この記事では、Commerce 初期化クラスを拡張して、カスタムの Commerce Data Exchange (CDX) 同期をサポートする方法について説明します。 この拡張機能では、Microsoft Dynamics 365 Finance プラットフォーム更新プログラム 8 または Microsoft Dynamics 365 Retail プラットフォーム更新プログラム 8 で追加された新しい拡張ポイントを使用します。
CDX は、Dynamics 365 Commerce 本社とオンライン ストアや実店舗などのチャネル間でデータを転送するシステムです。 スケジューラ ジョブは、本社とチャネル データベース間のデータ転送を制御します。 各スケジューラ ジョブには、スケジューラ サブジョブの一覧が含まれています。 スケジューラ サブジョブには、ソース テーブルと出力先テーブルの名前と、それらのテーブルの転送フィールド マッピングが含まれています。 本社とチャネル データベースの間でデータ同期を構成するには、次の 2 つの方法があります。
- CDX のコンフィギュレーション ユーザー インターフェイス (UI) を使用して、すべてのカスタム ジョブとサブジョブをコンフィギュレーションします。
- プッシュおよびプルの両方のカスタム ジョブとサブジョブをサポートするために用意されている拡張ポイントを使用して、コマース初期化クラスを拡張します。
コマース初期化クラスを使用する利点は、さまざまな環境 (開発、テスト、および運用) でカスタム ジョブを構成する必要がないことです。 代わりに、CDXの初期化は、Retail and Commerce>>>ダイアログ ボックスを使用して実行できます。 データの同期のためのカスタム ジョブに関する情報は CDX で自動的に作成されます。
Important
Commerce バージョン 10.0.46 以降で使用できる 生成された拡張 SQL スクリプト 機能により、チャネル データベースに拡張機能を追加するプロセスが簡略化され、高速化されます。 また、パフォーマンスを最適化し、データ同期に影響を与える一般的なカスタマイズ エラーを回避するのにも役立ちます。
本社とチャネル データベース間のデータ転送には、さまざまなシナリオがあります。
- ダウンロード ジョブを使用して、新しい本社テーブルから新しいチャネル データベース テーブルにデータを送信します。
- プッシュ ジョブを使用して、新しいチャネル データベース テーブルから新しい本社テーブルにデータをプルします。
ダウンロード ジョブを使用して新しい本社テーブルから新しいチャネル データベース テーブルにデータを送信する
データをプッシュまたはプルする前に、XML リソース ファイルのさまざまなメタデータ定義を理解する必要があります。 リソース ファイルには、データをプッシュおよびプルするために環境内で初期化されるカスタム ジョブ情報が含まれています。 構成する必要があるリソース ファイルの一覧を次に示します。
- ChannelDBSchema - チャネル データベースで作成した拡張スキーマです。
- TargetTableSchema – カスタム テーブルを追加するチャネル データベースで作成した拡張スキーマ。
- AxTableName - テーブル名。
- IsUpload – ジョブがプッシュ ジョブかプル ジョブかを判断するフラグ。 (つまり、フラグは、本社からチャネル データベースにデータを送信するか、チャネル データベースから本社にデータをプルするかを示します)。 既定値は false で、本社からチャネル データベースにデータを送信していることを示します。
- ScheduledByJob – このリソース ファイルには、1 つ以上のサブジョブが含まれています。
- サブジョブ – 各テーブルは、サブジョブとして追加され、各サブジョブは 1 つまたは複数のスケジューラ ジョブによってスケジュールされています。
- TargetTable – チャネル データベース テーブルの名前です。 このテーブルは、プッシュ ジョブまたはプル ジョブのデータの送り先となるターゲット テーブルです。 値が指定されていない場合、ターゲット テーブルの名前とソース テーブルの名前が同じになります。
新しい本社テーブルと新しいチャネル データベース テーブルを作成した場合は、次の手順に従って 2 つのテーブル間にデータをプッシュします。
- カスタム プロジェクトを作成し、アプリケーション オブジェクト ツリー (AOT) を使用してカスタム テーブルを追加します。
- すべてのカスタム ジョブ情報を追加する新しいリソース ファイルを作成します。 リソース ファイルのテンプレートを次に示します。
<RetailCdxSeedData ChannelDBMajorVersion="7" ChannelDBSchema="ext" Name="AX7">
<Jobs>
</jobs>
<Subjobs>
<Subjob Id="" TargetTableSchema="" TargetTableName="">
</Subjobs>
</RetailCdxSeedData>
ノート
DataAreaId 列名をフィールド マッピングに明示的に含めることはできません。 この列名は、Commerce Data Exchange (CDX) によって自動的に追加されます。 追加すると、リテール スケジューラの初期化中にエラーが発生します。
AOT を使用して新しい XML リソースを作成します。 リソースの XML ファイルで、次の例に示すように新しいテーブルと新しいジョブの詳細を指定します。
ノート
新規テーブルを既存のジョブの一部として追加するか、または新しいジョブを作成してからこのテーブルを追加するかのいずれかを実行できます。 この場合、ジョブ ID が 7000 で、カスタム テーブルの名前が ContosoRetailSeatingArrangementData である新しいジョブを作成します。
<RetailCdxSeedData ChannelDBMajorVersion="7" ChannelDBSchema="ext" Name="AX7"> <Jobs> <Job DescriptionLabelId="REX4520710" Description="Custom job" Id="7000"/> </Jobs> <Subjobs> <Subjob Id="ContosoRetailSeatingArrangementData" TargetTableSchema="ext" AxTableName="ContosoRetailSeatingArrangementData"> <ScheduledByJobs> <ScheduledByJob>7000</ScheduledByJob> </ScheduledByJobs> <AxFields> <Field Name="seatNumber"/> <Field Name="capacity"/> <Field Name="channelRecId"/> <Field Name="RecId"/> </AxFields> </Subjob> </Subjobs> </RetailCdxSeedData>既定では、ターゲット テーブルの名前がここでは指定されていません。 システムでは、チャネル側のターゲット テーブルの名前がコマース側のソース テーブルの名前 (AXTableName) と同じであることが前提です。 ただし、チャネル側のターゲット テーブルの名前は、時にソース テーブルの名前とは異なる場合があります。 この場合、<サブジョブ> ノードで <TargetTableName> 属性を使用してチャネル側でターゲット テーブルの名前を設定できます。
同様に、マッピング セクションでは、コマース側にあるフィールドの名前だけが指定されています (AxFields)。 既定では、同じフィールド名がチャネル側でも使用されることを前提とします。 ただし、対応するチャネル テーブルのフィールド名は、時にコマース側にあるフィールド名とは異なる場合があります。 この場合、マッピングで ノードの < 属性を使用してチャネル側でフィールドの名前を設定できます。
プロジェクトを右クリックし、追加>新しい項目を選択します。
新しい項目の追加ダイアログ ボックスで、リソースを選択し、リソース ファイルに RetailCDXSeedDataAX7_Custom と名前を付けてから、追加を選択します。
リソース ファイルの選択ダイアログ ボックスで、手順 2 で作成したリソース ファイルを検索し、開くを選択します。
registerCDXSeedDataExtension イベントを処理するために使用する新しいクラスを追加します。 RetailCDXSeedDataBase クラスを検索し、デザイナーで開きます。 registerCDXSeedDataExtension デリゲートを右クリックし、イベント ハンドラーをコピー を選択します。
作成したイベント ハンドラー クラスに移動して、次のイベント ハンドラー コードを貼り付けます。
if (originalCDXSeedDataResource == resourceStr(RetailCDXSeedDataAX7)) { resources.addEnd(resourceStr(RetailCDXSeedDataAX7_Custom)); }ノート
- システムには CDX シード データの定義が 2 つあるため、生成された CDX シード データが拡張しようとしているバージョンである場合にのみ拡張 CDX シード データを追加するように指定する必要があります。 if 条件が削除された場合、拡張 CDX シード データを N-1 CDX シード データの上に適用し、意図しない結果を引き起こす可能性もあります。 ベスト プラクティスとして、X++ の CDX/Retail スケジューラ同期フレームワーク クラスのその他のカスタマイズを回避することをお勧めします。 このようなカスタマイズは、追加の処理が実行されるときにデータのフローに影響を与える可能性があります。 提案されるパターンは、別のクラスおよびバッチ ジョブによりアップロードされたデータを処理させることです。
- 後で言及されるさまざまなシナリオの個別のリソース ファイルを作成する必要はありません。 1 つのファイルにすべてのカスタム ジョブ情報を含め、拡張機能クラスからそのファイルを登録することができます。
- 初期化クラスが実行される場合、このクラスはこのハンドラーを実装する拡張機能を検索します。 拡張機能が見つかった場合、ランタイムはリソース ファイル内にあるカスタム情報も初期化します。
小売と商取引 本社設定 商取引スケジューラ商取引スケジューラを初期化する に移動します。コマース スケジューラの初期化ダイアログの OK ボタンをクリックして CDX の初期化を実行します。
プル ジョブを使用して新しいチャネル データベース テーブルから新しい本社テーブルにデータをプルする
新しいチャネル テーブルから本社にデータをプルするには、次の 2 つのオプションがあります。
ここに示すように、新しいリソース ファイルを作成し、新しいリソースを 2 行目のイベント ハンドラーに追加します。
if (originalCDXSeedDataResource == resourceStr(RetailCDXSeedDataAX7)) { resources.addEnd(resourceStr(RetailCDXSeedDataAX7\_Custom)); resources.addEnd(resourceStr(RetailCDXSeedDataAX7\_Custom1)); }新しい行を追加しなくて済むように、新しい情報を含む既存のリソース ファイルを更新します。 アップロードするには、次の例に示すように、リソース ファイルの IsUpload 属性を true に設定し、カスタム プルジョブに関する情報を追加します。
<Subjob Id="ContosoRetailSeatReservationTrans" TargetTableSchema="ext" IsUpload="true" ReplicationCounterFieldName="ReplicationCounterFromOrigin" AxTableName="ContosoRetailSeatReservationTrans"> <ScheduledByJobs> <ScheduledByJob>P-1000</ScheduledByJob> </ScheduledByJobs> <AxFields> <Field Name="transactionId"/> <Field Name="storeId"/> <Field Name="terminalId"/> <Field Name="contactPhoneNo"/> <Field Name="numberOfCustomers"/> <Field Name="customerName"/> <Field Name="reservationDate"/> <Field Name="reservationTime"/> <Field Name="replicationCounterFromOrigin"/> </AxFields> </Subjob>ノート
- 拡張テーブルを作成していて、データを本社に同期する場合、テーブルの主キーとクラスター化インデックスは、拡張テーブルの本社テーブルと同じである必要があります。そうでない場合、CDX 同期は失敗します。 拡張テーブルから本社にデータをプルする必要がある場合は、拡張テーブルに REPLICATIONCOUNTERFROMORIGIN ID 列 ([REPLICATIONCOUNTERFROMORIGIN] [int] IDENTITY(1,1) NOT NULL,) が必要です。
- この新規テーブルを既存のプル ジョブ (P-0001) の一部として追加するか、または新しいプル ジョブを作成するかのいずれかを実行できます。
その他のシナリオ
残りのプッシュとプル シナリオでは、サンプル リソース ファイルの情報のみが記載されます。それは前のセクションの説明にあるように、初期化が同じであるためです。
CDX 構成の一部ではないチャネル データベースに既存の本社テーブルをプッシュする
この場合、拡張機能はコア テーブルと同じ名前の新しいサブジョブを作成し、チャネル データベース ext スキーマに同じテーブルを作成してマップする必要があります。 CDX は同じテーブルに対して複数のサブジョブをサポートしていないため、将来の競合を回避するために、サブジョブ名がコア テーブル名と一致する必要があります。 将来的には、headquarters テーブルが、コア テーブルと同じサブ ジョブ名で、アウトオブバンド (OOB) 製品による CDX プッシュ/プル配信に追加される可能性があります。 重複するサブジョブ名がある場合、CDX フレームワークは自動的にマージします。
任意のサブジョブの一部としてマップされていない既存の列をプッシュ
次の例で示すように、マッピングされていない既存の列を、新しい拡張列またはチャンル データベース内の既存の列のいずれかにプッシュすることができます。
<Subjob Id="RetailChannelTable" TargetTableSchema="ext">
<AxFields>
<Field Name="Payment"/>
<!-- Existing column which was not pushed to channel db-->
<Field Name="PaymMode"/>
<!-- Existing column which was not pushed to channel db-->
<Field Name="ContosoRetailWallPostMessage"/>
<!-- New column from the extended table -->
</AxFields>
</Subjob>
テーブルに RecId ではない主キーがある場合、次の例に示されるように、チャネル側の拡張子テーブルに 非 RecId 主キーも含まれる必要があります。
<Subjob Id="RetailCustTable" TargetTableSchema="ext">
<AxFields>
<Field Name="ReturnTaxGroup_W"/>
<!-- Existing column which was not pushed to channel db-->
<Field Name="SSNNumber"/>
<!-- New column from the extended table-->
</AxFields>
</Subjob>
</Subjobs>
新しい列を既存のテーブルにプルする
新しい列を追加して既存のテーブルの一部を取得する場合は、次のコードを使用します。
<Subjob Id="RetailTransactionTable" TargetTableName="CONTOSORETAILTRANSACTIONTABLE" TargetTableSchema="ext" OverrideTarget="false">
<AxFields>
<Field Name="ContosoRetailSeatNumber"/>
<Field Name="ContosoRetailServerStaffId"/>
</AxFields>
</Subjob>
別のサブジョブへの既存のサブジョブの移動
既存のサブジョブを別のジョブに移動するには、リソース ファイルの ScheduledByJob 属性を変更すると、イベント ハンドラーの一部として実行されます。
<Subjob Id="DirPartyTable">
<ScheduledByJobs>
<ScheduledByJob>1000</ScheduledByJob>
<!--add existing subjob to another job-->
</ScheduledByJobs>
CDX サンプル - 新しい列を既存のテーブルにプルする
Microsoft Dynamics 365 Retail App Update 5 では、 RetailSDK\Documents\SampleExtensionsInstructions\ExtensionTables に新しいサンプルが追加され、さまざまな CDX 拡張機能シナリオのすべてのサンプル SQL スクリプトとプロジェクト ファイルが含まれています。 このサンプルは、さまざまな CDX 拡張機能シナリオのリファレンスとして使用します。
次のセクションでは、拡張テーブルを使用してトランザクション テーブルをカスタマイズするための手順とベスト プラクティスについて説明します。 他のセクションでは、CDX をカスタマイズしてチャネル側のカスタマイズされた (拡張子) テーブルをコマースにアップロードする方法を示します。 カスタマイズをテストする方法を説明するセクションもあります。
設定手順
Microsoft では、手つかずのリテール ソフトウェア開発キット (SDK) にセットアップの変更を実装することをお勧めします。 または、SDK を Microsoft Azure DevOps などのソース管理下で配置することにより、どのステップでも変更を簡単に元に戻すことができます。 まず、SDK にある *.axpp パッケージをインポートします。 次に、チャネル データベースで、SQL 更新スクリプトを実行します。
カスタマイズ コードを含むコマース側にパッケージをインポートします。
ExtensionTablesAndCDXCustomization.axpp ファイルをRetailSDK\Documents\SampleExtensionsInstructions\ExtensionTables フォルダーからコピーし、拡張プロジェクト フォルダーに貼り付けます。
Microsoft Visual Studio を開始します。
Dynamics 365>インポート プロジェクト を選択します。
プロジェクトのインポート ダイアログ ボックスで、手順 1 でコピーした .axpp ファイルのパスを指定します。
必要に応じて、現在のソリューション または 新しいソリューション を選択します。
OK を選択してパッケージのインポートを開始します。
インポートが完了すると、ソリューション エクスプローラーにファイルが表示されます。
ソリューションをビルドします。
プロジェクトを右クリックし、データベースの同期 を選択します。
SQL 更新スクリプトを実行します。
Retail SDK フォルダーから ContosoRetailExtensionTablesUpdate.sql ファイルをコピーします。 同様の仕方で他のサンプル ファイルを実行することができます。
Microsoft SQL Server ブラウザーでスクリプトを開いて、チャネル データベースに対してスクリプトを実行します。
このステップでは、トランザクション テーブルをカスタマイズするために必要な拡張テーブルを作成します。 このスクリプトでは、他のサンプル シナリオに使用される他のテーブルも作成されます。
サンプルでデータを拡張する
コマース側のテーブル拡張は、サンプルですでに作成されています。 手動で作成するには、次の手順を実行します。
Visual Studio を起動します。
メニューで、表示>アプリケーション エクスプローラーを選択します。
データ モデル>テーブル>RetailTransactionTable を選択し、RetailTransactionTable を右クリックして 拡張機能を作成 を選択します。
ベスト プラクティスは、デフォルトの名前を次のように変更する必要があります RetailTransactionTable.ContosoRetailExtension。 常に一意の接頭語を追加します。 このサンプルでは、ContosoRetail が一意の接頭語として使用されます。 一意のプレフィックスを使用すると、複数の独立系ソフトウェア ベンダー (ISV) がテーブルを拡張する場合に、名前の競合を防ぐことができます。
新しい RetailTransactionTable.ContosoRetailExtension テーブルで、2 つの新しいフィールドを作成します。
タイプ = 文字列、名前 =ContosoRetailServerStaffId: 拡張データ型プロパティを RetailStaffId に設定します。 タイプ = 整数、名前 =ContosoRetailSeatNumber: 拡張データ型プロパティを ContosoRetailSeatNumber に設定します。
変更を保存し、プロジェクトをビルドします。
プロジェクトを右クリックし、データベースの同期 を選択します。
ノート
ベスト プラクティスとして、今後の名前の競合を回避するために新しい列名に固有の接頭語が追加されます。 別の ISV が同じ名前を持つ列を作成する場合、または Microsoft が同じ名前を持つ列を使用する更新プログラムをリリースする場合、名前付けの競合が発生する可能性があります。 拡張テーブルでは異なる AOT 資産に作成されますが、新しい列は SQL の元のテーブルに追加されます。
チャネル側にあるデータベースを拡張
Retail SDK フォルダーから SQL Server ContosoRetailExtensionTablesUpdate.sql スクリプトを開いて実行します。 複数の品目が作成され、コンフィギュレーションされています。
外部キーとカスタム (拡張子) フィールドを含む [ext].ContosoRetailTransactionTable テーブルが作成されます。 テーブルに追加される拡張列に加えて、チャネル側の拡張テーブルには、チャネル側の元のテーブルと同じ主キー列が必要です。 したがって、[ext].RetailTransactionTable_ContosoRetailExtension には、[ax].RetailTransactionTable で使用される 4 つの主キー列があります。 ベスト プラクティスとして、チャネル側の拡張テーブルに主キー列を追加するときは、列名が元のテーブルの主キー列の名前と一致していることを確認します。
CDX は、チャネル拡張テーブルからカスタム列をアップロードしてコマースに戻すように構成されています。 RetailCDXSeedDataAX7 リソースには、Commerce からチャネル データベースへのテーブル マッピングの情報が含まれています。 CDX はこの情報を使用して、必要なデータ転送スケジューラのジョブとサブジョブを作成します。 データ転送に新しい拡張テーブルまたは列を含めるには、CDX データ転送のカスタマイズを指定するリソース ファイルを提供する必要があります。 ベスト プラクティスは、競合を防ぐため次のような名前付け規則を使用します。 RetailCDXSeedDataAX7_ContosoRetailExtension。 (ここでは、ContosoRetail は、固有の拡張機能です。)
Retail SDK のサンプル CDX リソース ファイルには、追加のカスタマイズが含まれています。 ただし、RetailTransactionTable 拡張機能の例では、次のコードのセクションは、チャネル側から本社にデータをプルするために必要な唯一のセクションです。
<RetailCdxSeedData Name="AX7" ChannelDBSchema="ext" ChannelDBMajorVersion="7">
<Subjobs>
<!--Adding additional columns to (existing) RetailTransactionTable and wants to pull it back to headquarters. For upload subjobs, set the OverrideTarget property to "false", as ilustrated below. This setting tells CDX to use the table defined by TargetTableName and TargetTableSchema as extension table on this subjob.-->
<Subjob Id="RetailTransactionTable" TargetTableName ="CONTOSORETAILTRANSACTIONTABLE" TargetTableSchema="ext" OverrideTarget="false">
<!--Notice that there's no mention of the <ScheduledByJobs></ScheduledByJobs> because the subjob is already part of an upload job. -->
<AxFields>
<!--If you notice the existing columns aren't listed here in the <Field> tag, it's because the existing fields are already mapped in the main RetailCdxSeedData resource file, we only add the delta here. -->
<Field Name="ContosoRetailSeatNumber" />
<Field Name="ContosoRetailServerStaffId" />
</AxFields>
</Subjob>
</Subjobs>
</RetailCdxSeedData>
このリソース ファイルで使用されるフィールドの説明:
ChannelDBSchema ='ext' - リソースがチャネル データベース内の拡張スキーマから読み取るように、このフィールドが含まれています。
Subjob Id="RetailTransactionTable" – サブジョブ ID がそのテーブルの元のサブジョブ ID と同じであることを確認する必要があります。 そうすると、拡張性フレームワークはユーザーが既存のサブジョブをカスタマイズすることを判断することができます。 新しいサブジョブ ID を使用すると、同じテーブルに対して重複するサブジョブ エラーが生成されます。
TargetTableName = "CONTOSORETAILTRANSACTIONTABLE" - チャネル拡張子のテーブル名。
TargetTableSchema="拡張" - チャネル拡張子スキーマ。 現在、Microsoft は拡張スキーマ名を ext としてのみサポート しています。
OverrideTarget="false" - アップロード サブジョブ (チャネルから本社にデータを取り込むジョブ) の場合、 OverrideTarget を false に設定すると、 TargetTableName によって定義されたテーブルが拡張テーブルであり、データがサブジョブで既に定義されているプライマリ テーブルと共にアップロードされることを CDX に通知します。
OverrideTarget が true に設定されている場合、TargetTableName で定義されているテーブルは、サブジョブのプライマリ テーブルをオーバーライドします。 既定値フィールドはプル ジョブ中に省略され、拡張フィールドのみが考慮されます。 たとえば、このサンプルでは、ax からデータをアップロードするのではなく、この値を true に設定します 。RetailTransactionTable、CDX は ext からのデータのみをアップロードします 。CONTOSORETAILTRANSACTIONTABLE。
指定されたサブジョブがシンクとして使用する AxTableName 値をフレームワークが既に判断できるので、AxTableName 属性は指定されません。
RetailCDXSeedDataAX7 リソースをカスタマイズする場合にのみ、違いを指定する必要があります。 フレームワークが推定できるすべてのデータは、拡張機能により追加する必要はありません。 同様に、<AXFields></AXFields? セクションでは、カスタム フィールドまたは新しいフィールドのみ指定されているのがわかります。拡張フレームワークにより、指定されたサブジョブ ID から残りのフィールドのリストが決まるためです。
- CDX カスタマイズ リソースを持つ CDX モジュールが更新されます。 RetailCDXSeedDataAX7_ContosoRetailExtensionで指定されたカスタマイズを適用するには、registerCDXSeedDataExtension デリゲートをサブスクライブする必要があります。 このイベントをサブスクライブすることで、CDX シード データの初期化が実行されるときにカスタマイズが適用されることを保証できます。
registerCDXSeedDataExtension デリゲートにサブスクライブ
表示>アプリケーション エクスプローラーを選択します。
RetailCDXSeedDataBase クラスを検索します。
クラスを右クリックし、デザイナーで開く を選択します。
デザイナーのデリゲートおよびメソッドの一覧で、registerCDXSeedDataExtension デリゲートを選択します。
右クリックし、イベント ハンドラーのコピー を選択します。 実装する必要があるメソッド シグネチャがコピーされるため、CDX は CDX シード データのカスタマイズされたリソースを取得します。
新しいクラスを作成し、ContosoRetailCDXSeedDataAX7EventHandler などの名前を付けます。 任意の名前を指定することができます。 ただし、ベスト プラクティスとしては、接頭語をクラス名の前に付けてください。
手順 5 でコピーしたコードを貼り付けます。
class ContosoRetailCDXSeedDataAX7EventHandler { /// <summary> /// Registers the extension CDX seed data resource to be used during CDX seed data generation. /// </summary> /// <param name="result">The result object which is used to return the resource name.</param> [SubscribesTo(classStr(RetailCDXSeedDataBase), delegateStr(RetailCDXSeedDataBase, registerCDXSeedDataExtension))] public static void RetailCDXSeedDataBase_registerCDXSeedDataExtension(str originalCDXSeedDataResource, List resources) { } }CDX 機能拡張フレームワークは、コマースの初期化を選択するとこのメソッドを呼び出します。 CDX 拡張モジュールが CDX カスタマイズを使用するようにするためには、上記のメソッドに次のコードを貼り付けます。
if (originalCDXSeedDataResource == resourceStr(RetailCDXSeedDataAX7)) { resources.addEnd(resourceStr(RetailCDXSeedDataAX7_ContosoRetailExtension)); }カスタム リソースをリストに追加する前に、処理されている 元のCDXSeedDataResource リソースが RetailCDXSeedDataAX7 であることを確認する必要があります。 そうしないと、予期しない結果が生じる場合があります。
カスタマイズした構成で CDX モジュールを初期化または再初期化するには、次の手順を実行します。
小売とコマース>Headquarters 設定>コマース スケジューラー>スケジューラー ジョブ>コマース スケジューラーの初期化に移動します。
表示されるダイアログ ボックスで、既存のコンフィギュレーションの削除を選択します。
OK を選択して、初期化を開始します。
初期化が完了すると、元の RetailCDXSeedDataAX7 リソースとカスタマイズされた RetailCDXSeedDataAX7_ContosoRetailExtension リソースを使用して、CDX スケジューラ ジョブ、サブジョブ定義、および配布スケジュールが更新されます。
カスタマイズの検証
カスタマイズが正しく動作することを確認します。
- 初期化が完了したら、 Retail and Commerce>Headquarters のセットアップ>コマース スケジューラに移動し、[ Scheduler サブジョブ ] リンクを選択します。
- サブジョブ テーブルで、RetailTransactionTable サブジョブ ID を検索します。
- 詳細領域のチャネル フィールド マッピング セクションで、新しいカスタム (拡張) 列がマッピングに表示されていることを確認します。
CDX ジョブがチャネル側の元のテーブルと拡張テーブルをアップロードしてプルすることをテストします (元のテーブルと拡張可能なテーブルを組み合わせたビューが CDX フレームワークによって生成されます)。
Store Commerce アプリでトランザクションをいくつか作成します。
拡張テーブルは Commerce Runtime (CRT) や Store Commerce アプリでは使用しないため、手動で拡張テーブルにデータを挿入する必要があります。 必要な値を変更した後、次のスクリプトを実行します。
INSERT INTO [ext].[CONTOSORETAILTRANSACTIONTABLE] ( [CONTOSORETAILSEATNUMBER], [CONTOSORETAILSERVERSTAFFID], [TRANSACTIONID], [STORE], [CHANNEL], [TERMINAL], [DATAAREAID]) VALUES ( 1, /*normally this needs to be an existing seat number from ContosoRetailSeatingData table, but for this test add any number*/ '000160' /*add any staff ID here*/, 'HOUSTON-HOUSTON-11-101',/\*add the transaction id you just created */ 'HOUSTON', /*add the store used to create the transaction */ 5637144592, /*add the channel RecId of the store used to create the transaction*/ 'HOUSTON-11', /*add the terminalId used to create the transaction*/ 'USRT' /*add the dataareaId used by the store*/) GO他のトランザクションにもこの手順を繰り返します。 対応するデータを[ext].[CONTOSORETAILTRANSACTIONTABLE]に追加しないでください。これは、Store Commerce アプリで作成した一部のトランザクションに関するものです。 この方法では、[ax] からのデータであることを確認できます。RetailTransactionTable は、拡張テーブルに対応するデータがない場合でもプルおよびアップロードされます。
Dynamics 365>小売とコマース>小売とコマース IT に移動し、配送スケジュールを選択します。
配送スケジュールの一覧で、P-0001 を選択します。 この配布スケジュールには、カスタマイズした RetailTransactionTable のサブジョブが含まれています。
アクション ウィンドウで、実行を選択します。 確認メッセージが表示されたら、はい を選択します。
アクション ウィンドウで、履歴を選択し履歴ページを開き、アップロードされたセッションが正常に完了したことを確認できます。
[ 履歴 ] ページで、新しいアップロード セッション レコードがあることを確認します。 レコードのステータスが申請済に設定され、さらに影響を受けた行値は0 (ゼロ) でないことを確認してください。
アップロード セッションが正常に適用された場合は、 Retail and Commerce>Inquiries and reports>Store トランザクションに移動し、アップロードした新しいトランザクションを検索します。 トランザクション、シート番号、およびサーバー スタッフ ID の各カスタム列に期待された値が入っていることを確認します。
さらに、チャネル側の [ext].[CONTOSORETAILTRANSACTIONTABLE] 拡張テーブルに対応するレコードがないトランザクションが確実にアップロードされるように確認してください。 これらのトランザクションにシート番号とサーバー スタッフ ID の既定値が含まれていることを確認します。 シート番号は 0 (ゼロ) に設定し、サーバー スタッフ ID は 000160 に設定する必要があります。
Store Commerce アプリ オフライン トランザクション同期
Store Commerce アプリをオフライン モードに切り替えて、トランザクションを実行します。 オンラインに切り替えて、データがオフライン データベースからチャネル データベースに、次いでバックオフィスに正しく同期されていることを確認します。