DCLフィールドの値を別のフィールドの値に依存させる
動的選択リスト・フィールド(DCL)などのフィールドを作成し、異なるフィールドの値に応じて異なる値を表示できます。 この例では、「担当者の作成」ページのDCLフィールドを作成し、その担当者に関連付けられたアカウントの住所を表示します。 営業担当は、このフィールドを使用して、使用可能なアカウント住所から担当者の住所を選択できます。
動的選択リスト・フィールドの作成
- アプリケーション・コンポーザをサンドボックスで開きます。
- 左側のパネルで、「アプリケーション」フィールドでCRM Cloudが選択されていることを確認します。
- 「担当者」標準オブジェクトを展開します。
- 「フィールド」をクリックします。
- 「フィールド」ページで、 をクリックします。
- 「選択リスト(動的)」オプションを選択します。
- 「動的選択リストの作成」 : 「基本情報」ページで、次のように入力
-
フィールド サンプル・エントリ 説明 表示ラベル 請求先所在地 UIに表示されるラベル・ユーザー。 表示幅 40 住所要素を表示するボックスの幅。 名前 BillToAddress 一意の内部名。 - 「制約」は、デフォルトの選択値のままにします。
- 「次」をクリックします。
- 「値リスト」ページで、次のエントリを作成します:
フィールド サンプル・エントリ 説明 関連オブジェクト Address 値のソース。 リスト選択表示値 Country これらの値はこのユース・ケースには使用されないため、いずれかの値を選択できます。 - 他のセクションは空白のままにできます。
- 「送信」をクリックします。
DCLフィールドの動作の指定およびレイアウトへの追加
- Visual Builder Studioを開きます。
- 「レイアウト」タブをクリックします。
「レイアウト」タブで、 をクリックします。
をクリックします。
- 「レイアウトのコピーも作成」オプションを選択してデフォルト・ルールを複製します。
- 新しいルールにルール条件を追加します。
新しいレイアウト・ルールで「オープン」をクリックして、レイアウト・コピーを開きます。
- 「PersonDEO_Bill_To_Address_id_c (請求先住所)」フィールドを検索し、レイアウトに追加します(次のスクリーンショットのコールアウト1で強調表示されています)
-
フィールド・テンプレートの変数を作成します:
-
「担当者」レイアウト・タブで、「変数」をクリック
- 「変数の作成」をクリックします(次のスクリーンショットのコールアウト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に割り当てます。
「担当者」タブで、「アクション・チェーン」をクリックします。
- 「処理チェーンの作成」 (+Actionチェーン)をクリックします。
- 「アクション・チェーンの作成」ウィンドウで、「Javaスクリプト」オプションを選択したままにし、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; });
-
フィールド・テンプレートのイベント・リスナーを作成します:
- 「イベント・リスナー」タブをクリックします。
- 「リスナーの作成」ボタン(+Eventリスナー)をクリックします。
- 「イベント・リスナーの作成」ページで、ContactsOnFieldValueChangeEventを選択します。
- 「次」をクリックします
- 作成したアクション・チェーンを選択します。 この例では、GetAddressesです。
- 「終了」をクリックします。
-
フィールドをテストします:
「プレビュー」ボタンをクリックして、新しく作成したフィールドをテストします。
- 「担当者」リスト・ページで、「アクション・バー」にCreate Contactと入力します。
- 複数の所在地を含むアカウントを選択します。
- Bill-To-Addressフィールド内をクリックして、アドレスを選択します。