メモ
Dynamics 365 Commerce の小売関連グループは、Yammer から Viva Engage に移行しました。 新しいViva Engage コミュニティにアクセスできない場合は、追加するフォーム (https://aka.ms/JoinD365commerceVivaEngageCommunity) に入力し、最新のディスカッションに参加してください。
この記事では、RetailTransactionServiceEx クラスに拡張メソッドを追加して、Commerce Data Exchange (CDX) - リアルタイム サービスを拡張する方法について説明します。 リアルタイム サービスは、クライアントがリアルタイムでコマース機能を操作できるようします。 財務および運用のデータベースとクラスに Retail サーバーから直接アクセスすることはできません。 これらをアクセスする場合は、財務および運用と Commerce Runtime 拡張機能を使用して CDX クラス拡張機能を使用する必要があります。
Commerce Data Exchange - リアルタイム サービスを拡張するには、 RetailTransactionServiceEx クラスに新しいメソッドを作成します。 このメソッドは、次の基準を満たしている必要があります。
- このメソッドは、パブリック静的メソッドでなければなりません。
- 戻り値は、長さが 2 以上のコンテナーである必要があります。 最初の要素は、メソッド呼び出しが成功したかどうかを示すブール値と、コメントまたはエラー メッセージに使用できる文字列値でなければなりません。 コンテナー内の他の項目は任意の型になることができ、入れ子になったコンテナーにもなれます。
- メソッドのパラメーターは、次のプリミティブ型のいずれかでなければなりません:
- ブール値
- 日付
- int
- int64
- str
- guid
- レアル
新しい拡張メソッドの作成と呼び出し
Microsoft Visual Studio を起動します。
Dynamics 365 メニューの Model management > Create model を選択します。
モデルの作成ダイアログ ボックスに、次の詳細を入力します。
- モデル名 - Contoso
- モデル発行元 - Contoso
- レイヤー - USR (関連するレイヤーを選択)
- バージョン - 1.0.0.0
- モデルの表示名 - Contoso
次へを選択します。
ダイアログ ボックスで 新しいパッケージの作成 > 次へ を選択し、参照パッケージを選択 を選択して、一覧で アプリケーション スイート と アプリケーション プラットフォーム のチェック ボックスをオンにします。
次へを選択します。
完了を選択します。
新しいプロジェクト ダイアログ ボックスに、ContosoRetailTransactionServiceEx というプロジェクト名を入力します。
[OK] を選択.
プロジェクトを右クリックし、追加 > 新しい項目 を選択します。 新しい項目の追加 ウィンドウで、クラス を選択し、ContosoRetailTransactionServiceSample としてクラスの名前を入力します。
Commerce Runtime (CRT) で CDX メソッドを使用するには、クラスに
ExtensionOf属性 (ExtensionOf(classStr(RetailTransactionServiceEx))など) を追加します。 この追加は、クラスがRetailTransactionServiceExクラスから拡張されていることを意味します。コード エディターで、次のコードを追加します。
[ExtensionOf(classStr(RetailTransactionServiceEx))] final class ContosoRetailTransactionServiceSample { }クラス内部で、カスタム ロジックを実行する新しいメソッドを追加します。 このメソッドは、カスタム ロジックを実行するために CRT から呼び出すメソッドです。
[ExtensionOf(classStr(RetailTransactionServiceEx))] final class ContosoRetailTransactionServiceSample_Extension { public static container SerialCheck(str _serialNum) { boolean success = false; str errorMessage; int fromLine; try { if (_serialNum) { ttsbegin; // check whether the serial number exists // Add your custom logic errorMessage = "Serial number found"; ttscommit; } else { // Add your custom logic success = false; errorMessage = "Serial number not found"; } } catch (Exception::Error) { ttsAbort; errorMessage = RetailTransactionServiceUtilities::getInfologMessages(fromLine); } // Return sanitized error code. errorMessage = RetailTransactionServiceUtilities::getErrorCode(errorMessage); return [success, errorMessage, "Custom values"]; } }Solution Explorerでプロジェクトを右クリックし、Build を選択します。
新しい拡張メソッドのビルドが完了したら、プロジェクトをデプロイします。
CRT から新しいメソッドを呼び出す
コマース ランタイム (CRT) 拡張機能に Microsoft.Dynamics.Commerce.Runtime.RealtimeServices.Messages NuGet パッケージ (まだ追加していない場合) を追加してください。
新しいメソッドを呼び出すには、次のサンプル コードを使用します。
InvokeExtensionMethodRealtimeRequest extensionRequest = new InvokeExtensionMethodRealtimeRequest("SerialCheck", "123"); InvokeExtensionMethodRealtimeResponse response = await request.RequestContext.ExecuteAsync<InvokeExtensionMethodRealtimeResponse> (extensionRequest).ConfigureAwait(false); ReadOnlyCollection<object> results = response.Result; string resValue = (string)results[0];results オブジェクトからは、リアルタイム サービスからの応答値を読み取ることができます。
CRT フレームワーク コードは、成功または失敗の状態を確認し、CDX メソッドから返された値に基づいてエラー メッセージを提供します。 必要に応じて、拡張コードでこのエラーをキャッチし、より多くのロジックを提供できます。
メモ
InvokeExtensionMethodRealtimeRequest メソッドは 2 つのパラメーターを取ります。 1 つのパラメーターはリアルタイム サービス メソッド名で、もう 1 つはメソッドが使用する必要があるパラメーターの一覧です。 渡すメソッド名は、 ContosoRetailTransactionServiceSample クラスで作成したメソッド名と同じである必要があります。
public InvokeExtensionMethodRealtimeRequest(string methodName, params object[] parameters)
: base(methodName, parameters)
{
}
CDX オフライン
コマース本社への接続がない場合、クライアントまたは Retail Server は CDX メソッドを呼び出すことはできません。 この場合、拡張機能コードは、次のセクションで説明するベスト プラクティスに従う必要があります。
- CDX メソッドを呼び出す前に、CRT がオンライン (Retail Server) データベースまたはオフライン (ローカル) データベースに接続されているかどうかを確認します。 この状態は、POS と CRT の両方で確認できます。
接続ステータスを確認する方法
POS
GetConnectionStatusClientRequest POS API を使用します。
CRT
if(request.RequestContext.Runtime.Configuration.IsMasterDatabaseConnectionString)
{ }
- CDX メソッドへの接続に失敗した場合、コマース本社への接続がないため、操作を実行できないというエラー メッセージが表示されることがあります。 CDX メソッドへの接続がない場合にこの操作を機能させる必要がある場合は、軽減ロジックが必要です。