別のフィールドの値に依存するDCLフィールドの値の作成
動的選択リスト・フィールド(DCL)のような、異なるフィールドの値に応じて異なる値が表示されるフィールドを作成できます。この例では、担当者に関連付けられているアカウントの住所が表示される「担当者の作成」ページのDCLフィールドを作成します。営業担当は、このフィールドを使用して、使用可能なアカウント住所から担当者の住所を選択できます。
動的選択リスト・フィールドの作成
ヒント: Oracle Visual Builder Studioでの設定の概要を示す、Oracle Cloud Customer Connectに関するビデオ: 依存DCLフィールドをご覧ください。
- サンドボックスでアプリケーション・コンポーザを開きます。
- 左パネルの「アプリケーション」フィールドで「CRMクラウド」が選択されていることを確認します。
- 「担当者」標準オブジェクトを展開します。
- 「フィールド」をクリックします。
- 「フィールド」ページで、 をクリックします。
- 選択リスト(動的)オプションを選択します。
- 動的選択リストの作成: 基本情報ページで、次のように入力します:
フィールド サンプル入力 説明 表示ラベル 請求先住所 UIでユーザーに表示されるラベル。 表示幅 40 住所要素が表示されるボックスの幅。 名前 BillToAddress 一意の内部名。 - 「制約」は選択されているデフォルト値のままにします。
- 「次」をクリックします。
- 「値リスト」ページで、次のように入力します:
フィールド サンプル入力 説明 関連オブジェクト 住所 値のソース。 リスト選択表示値 国 この値はこのユース・ケースでは使用されないため、任意の値を選択できます。 - その他のセクションは空白のままにすることができます。
- 「発行」をクリックします。
DCLフィールドの動作の指定とレイアウトへの追加
- Visual Builder Studioを開きます。
- 「レイアウト」タブをクリックします。
「レイアウト」タブで、
をクリックします。をクリックします。
- レイアウトのコピーも作成するオプションを選択して、デフォルト・ルールを複製します。
- 新しいルールにルールの条件を追加します。
新しいレイアウト・ルールの「開く」をクリックして、レイアウトのコピーを開きます。
- 「PersonDEO_Bill_To_Address_id_c (請求先住所)」フィールドを見つけて、これをレイアウトに追加します(次のスクリーンショットでコールアウト1で強調表示されているもの)
-
フィールド・テンプレートの変数を作成します:
-
引き続き「Contact」レイアウト・タブを使用し、「変数」をクリックします
- 変数の作成をクリックします(次のスクリーンショットのコールアウト1)。
- billToAddressesなどの変数IDを入力します。
- 「タイプ」に「任意」を選択します。
-
-
レイアウトに必要なフィールド・テンプレートを作成します:
- 「ルール・セット」タブをクリックします。
「フィールド」(右側)ペインの「テンプレート」フィールド(コールアウト2)で「作成」をクリックします。
- 「テンプレートの作成」ウィンドウで、スペースを入れずに名前を入力し(billToAddressTemplateなど)し、拡張の有効化オプションを選択したままにします。
- 「作成」をクリックします。
- 「コード」オプションをクリックします
-
入力するサンプル・コードを次に示します:
<template id="billToAddress"> <oj-select-single label-hint="billToAddressID" data="[[$variables.billToAddresses]]" value="{{$value}}"></oj-select-single> </template>
-
次のことを行う処理チェーンを作成します:
- レコードの更新されたフィールドがアカウント・パーティIDであるかどうかを確認します。
- アカウント・パーティIDが更新された場合は、そのパーティIDを定数accountPartyNumberに格納します
- そのパーティIDのすべての住所を返すRESTコールを作成します
- 返された住所(FormattedAddresses)を配列に格納します。
- 「担当者の作成」UIの一部になる変数billToAddressesに配列の値を割り当てます。
「Contacts」タブで、処理チェーンをクリックします。
- 処理チェーンの作成(+処理チェーン)をクリックします。
- 処理チェーンの作成ウィンドウで、「JavaScript」オプションを選択したままにし、任意の名前をIDとして入力します。この例ではGetAddressesです。
- 「作成」をクリックします。
- 「コード」ビューに切り替えて、次のコードを入力します:
-
次にサンプルを示します:
define([ 'vb/action/actionChain', 'vb/action/actions', 'vb/action/actionUtils', 'ojs/ojarraydataprovider', ], ( ActionChain, Actions, ActionUtils, ArrayDataProvider ) => { 'use strict'; class test extends ActionChain { /** * @param {Object} context * @param {Object} params * @param {{row:object,related:object[],fieldsToShow:string[]}} params.previous * @param {{row:object,previousRow:object,modifiedField:string,pickedRowsData:object,parentRow:object,mode:string}} params.event * @return {{row:object,related:object[],fieldsToShow:string[]}} */ async run(context, { previous, event }) { const { $layout, $extension, $responsive, $user } = context; if (event.modifiedField === 'AccountPartyId') { const accountPartyNumber = event.pickedRowsData ['accounts.AccountPartyId']; const addressesResponse = await Actions.callRest(context, { endpoint: 'oracle_cx_salesUI:cx/getall_accounts-Address', uriParams:{ 'accounts_Id': accountPartyNumber.PartyNumber, }, }); if (addressesResponse.ok){ const billToAddresses = addressesResponse.body.items.map((address)=> {return {label:address.FormattedAddress,value:address.FormattedAddress}}); $layout.variables.billToAddresses = new ArrayDataProvider(billToAddresses,{keyattributes:"value"}); } } if (event.modifiedField === 'PersonDEO_BillToAddress_Id_c'){ debugger; } return previous; } } return test; });
-
フィールド・テンプレートのイベント・リスナーを作成します:
- イベント・リスナー・タブをクリックします。
- 「リスナーの作成」ボタン(+イベント・リスナー)をクリックします。
- イベント・リスナーの作成ページで、「ContactsOnFieldValueChangeEvent」を選択します。
- 「次」をクリックします
- 先ほど作成した処理チェーンを選択します。この例では、GetAddressesです。
- 「終了」をクリックします。
-
フィールドをテストします:
「プレビュー」ボタンをクリックして、新規に作成したフィールドをテストします。
- 「Contacts」リスト・ページの処理バーに「担当者の作成」と入力します。
- 複数の住所を含むアカウントを選択します。
- 「請求先住所」フィールド内をクリックして、住所を選択します。