Oracle Salesで機械学習モデルによって識別された類似レコードを表示するにはどうすればよいですか。
営業管理者は、すぐに使用できるテンプレート・モデルを使用して類似のレコードの折りたたみパネルにレコード詳細を表示することで、Oracle Salesで独自のカスタム機械学習モデルによって識別される類似のレコードを表示できます。
次の事前定義済構成を使用して、標準オブジェクトとカスタム・オブジェクトの両方のSales Machine Learningユース・ケース予測のカスタム・サブビュー・テンプレートを追加することもできます。
- テンプレート
cx-subviewテンプレート定義は勘定科目に使用でき、必要に応じて新しい定義を作成できます。 他のオブジェクトについては、新しいサブビューを作成する必要があります。
- コールバック関数
予測レコードIDをフェッチします。
- 動的表レイアウト
subviewLayout表示する予測レコードの属性を定義します。
類似レコードを表示するカスタム・サブビューの例を次に示します。
類似レコードを表示するための既存テンプレートのクローニング
次の2つの方法を使用できます。
- 既存のテンプレートのクローニング: これには、既存のサブビュー・テンプレート「類似レコード・テンプレート」をコピーし、必要に応じて変更します。 既存のテンプレートがすでに要件に近づいており、アカウントにのみ使用できる場合は、この方が高速になります。
- 新しいテンプレートの追加: 新しいテンプレートを最初から作成し、最初から構造とパラメータを完全に制御できます。
アプローチに関係なく、最終的なテンプレートは次のようになります。
新しいテンプレートを作成する場合は、次のプロパティを構成する必要があります。
| 名前 | 説明 |
|---|---|
resource |
これは、作業中のオブジェクトの名前です(たとえば、取引先、見込み客、カスタムオブジェクト)。 別名は、複数のサブビューで同じリソース(オブジェクト)を使用できるため、サブビュー定義が一意になるようにします。 主キーは、アカウントのPartyId、リードのLeadId、カスタム・オブジェクトのIdなど、オブジェクトの識別子に対応している必要があります。 |
query |
keyをオブジェクト識別子(アカウントの場合はPartyId、リードの場合はLeadId、カスタム・オブジェクトの場合はIdなど)に設定する必要がある場合を除き、これは変更しないでください。 予測レコードIDが移入されるため、値は空になります。 これは、推奨IDをフェッチして割り当てるコールバック関数によって処理されます)。 ノート: エラスティック・エンドポイントを使用してレコード詳細をコールするには、valueパラメータのprovider: "adfRest"を削除し、paramsで演算子キーが存在することを確認する必要があります。 |
context |
usecasecodeには、表示するモデルのユース・ケースIDを含める必要があります。 類似レコード・テンプレートに定義されているサブビューでは、salesMlSubviewパラメータを常にtrueに設定する必要があります。 これは、サブビューを識別し、予測レコードIDを取得するためのコールバック関数をトリガーするのに役立ちます。 |
title |
ここに入力した文字列値は、サブビューへのアクセス時にサブヘッダーとして使用されます。 |
subviewLayoutId |
アプリケーション拡張IDとスラッシュ(/)を接頭辞としてsubviewLayoutId.に追加することをお薦めします。 例: site_cxsales_Extension/similarRecordsSubviewLayout |
(既存のサブビューをクローニングするのではなく)テンプレート・ページでサブビュー・テンプレートを手動で追加した場合、作成したサブビュー・テンプレートを公開するJSONコード・ブロックは生成されません。 次のように手動で追加する必要があります。
- 次のエントリをJSONファイルに追加します。 また、サブビュー・テンプレートを公開するためのキーとして、サブビュー・テンプレートに記載されている別名を追加する必要があります。

- サブビュー・ラベル変数のエントリを次のように追加します。 ノート:標準オブジェクトには、
subviewLabelという既存の変数がすでに存在します。サブビュー・ラベルのエントリには、キーと値が必要です。 キーは、サブビュー・テンプレートを公開するために使用されるキーです。 値は、アクションバーに表示されるアクション名(接頭辞は'Show' )を決定します。

- コールバック関数を作成します。 サブビューをコールする前に、
callbackhelperをすでに登録しておく必要があります。ノート:このコールバック・コールが登録されているリスナーからアクション・チェーンを追跡できます。アクション・チェーンを更新して機械学習固有のチェーンをコールし、予測レコードIDをフェッチし、サブビューの問合せパラメータを更新できます。 コードのサンプルを次に示します。
define([ 'vb/action/actionChain', 'vb/action/actions', 'vb/action/actionUtils', ], ( ActionChain, Actions, ActionUtils ) => { 'use strict'; class onBeforeInvokeSubviewCallbackChain extends ActionChain { /** * @param {Object} context */ async run(context, { event }) { const { $layout, $extension, $responsive, $user } = context; const { query, parentResource, parentRow, fragmentContext } = event; if (fragmentContext.salesMlSubview) { // Calling our subview specific action chain. const callChainExecuteSalesMLQueryChainResult = await Actions.callChain(context, { chain: 'executeSalesMLQueryChain', params: { usecaseCode: fragmentContext.usecasecode, partyId: parentRow.Id }, }); if(callChainExecuteSalesMLQueryChainResult.length > 0){ query[0].params[0].value = callChainExecuteSalesMLQueryChainResult; } } return event.detail.done(query); } } return onBeforeInvokeSubviewCallbackChain; }); - エンドポイントをコールし、予測レコードIDのリストを返すアクション・チェーンを作成します。 この関数は、次のようにカスタム・オブジェクトの動的レイアウト(雷記号)から定義する必要があります。 コードのサンプルを次に示します。
define([ 'vb/action/actionChain', 'vb/action/actions', 'vb/action/actionUtils', 'vx/oracle_cx_salesUI/ui/self/applications/cx-sales/resources/utils/RestHelperEndpoint', ], ( ActionChain, Actions, ActionUtils, RestHelperEndpoint ) => { 'use strict'; class executeSalesMLQueryChain extends ActionChain { /** * Action chain which calls salesMLQuery details when similar records subview is called * @param {Object} context * @param {Object} params * @param {string} params.usecaseCode usecase code of the salesML model we want to call * @param {string} params.partyId Id of the record we need to fetch predictions for */ async run(context, { usecaseCode, partyId }) { const { $layout, $extension, $responsive, $user } = context; let similarRecordsRest = RestHelperEndpoint.get("cx_salesml/postSalesMLQueryAPI"); let similarRecordsBody = { "UseCaseCode": usecaseCode, "QueryMetadata": "whereClause:Id =" + partyId + ";numberOfRows:5" }; let recordIds = []; try { const similarRecordsResponse = await similarRecordsRest.body(similarRecordsBody).fetch(); if (similarRecordsResponse && similarRecordsResponse.body) { let similarRecordsJSON = similarRecordsResponse.body; if (similarRecordsJSON && Array.isArray(similarRecordsJSON)) { for (let similar of similarRecordsJSON){ if(recordIds.length >= 5) break; recordIds.push(parseInt(similar.PARTYID, 10)); } } } }catch(e){ //Logger.info('similar-records-subview exception: ' + e); } return recordIds; } } return executeSalesMLQueryChain; }); - 次のようにサブビュー・レイアウトを作成します。