取り込みプロバイダーの作成
このトピックでは、Microsoft Dynamics 365 Intelligent Order Management で取り込みプロバイダーを作成するために必要な手順を説明します。
新しいプロバイダーの定義を作成する
新しいプロバイダーの定義を作成するには、次の手順を実行します。
- プロバイダー> カタログに移動します。
- 新規プロバイダー定義を選択します。
- 表示名 に、 「IOMLabOrderIntakeProvider」 と入力します。
- 論理名 に、 「msdyn_IOMLabOrderIntakeProvider」 と入力します。
- ロゴ に、「IOMLab.png」 を選択します。
- サービス タイプに関して、「受注」と入力します。
- 説明 に「IOM ラボの受注プロバイダー」と入力します。
- 保存して閉じる を選択します。
ソリューションにプロバイダーの定義を追加する
ソリューションにプロバイダーの定義を追加するには、以下の手順で行います。
- Power App 作成者ポータル に移動し、新しく作成されたソリューション IOMLabProviders に移動します。
- 既存の追加 > IOM プロバイダー定義を選択します。
- IOMLabOrderIntakeProvider を選択し、追加を選択してソリューションを追加します。
プロバイダー定義に変換を追加する
プロバイダー定義への変換の追加は、以下の手順で行います。
- プロバイダー> カタログに移動します。
- 新たに作成した IOMLabOrderIntakeProvider を選択します。
- メニュー バーで編集を選択します。
- 変換 タブを選択します。
- + 新規 IOM プロバイダー定義の変換を選択します。
- 表示名 に、 「Dataverse 注文に対する IOMLab 注文」 と入力します。
- 論理名 に、 「msdyn_IOMLabOrderIntake_Order」 と入力します。
- プロバイダー定義に、IOMLabOrderIntakeProviderを入力、または選択します。
- ソース オブジェクト名 に、 「IOMLabOrderIntakeProvider」 と入力します。
- 宛先オブジェクト名に、「Dataverse 注文」と入力します。
- 変換に、次の M クエリ コードを貼り付けます。
shared ImportMappingKey = [
account = {
[
ExternalRecordKey = [ProviderName = "IOMLabOrderIntakeProvider"],
SelectedFields = {"accountid"}
]
},
pricelevel = {
[
ExternalRecordKey = [ProviderName = "IOMLabOrderIntakeProvider"],
SelectedFields = {"pricelevelid"}
]
},
product = List.Distinct(List.Transform(Source[orderdetails], each
[
ExternalRecordKey = [sku = _[sku]],
SelectedFields = {"productid"}
])),
uom = List.Distinct(List.Transform(Source[orderdetails], each
[
ExternalRecordKey = [unit = _[unit]],
SelectedFields = {"uomid"}
]))
];
shared TransformSourceData =
let
orderProducts = Source[orderdetails],
account = IOM.MapRecord(IOM.MappingTables[account], [ProviderName = "IOMLabOrderIntakeProvider"]),
pricelevel = IOM.MapRecord(IOM.MappingTables[pricelevel], [ProviderName = "IOMLabOrderIntakeProvider"]),
orderheader = Record.FromTable
(
Table.SelectRows
(
Record.ToTable
(
[
ordernumber = Text.From(Source[ordernumber]),
name = ordernumber,
#"customerid_account@odata.bind" = "/accounts(" & Text.From(account[accountid]) & ")",
#"pricelevelid@odata.bind" = "/pricelevels(" & Text.From(pricelevel[pricelevelid]) & ")",
billto_city = Record.FieldOrDefault(Source, "billtocity"),
billto_stateorprovince = Record.FieldOrDefault(Source, "billtostateorprovince"),
billto_country = Record.FieldOrDefault(Source, "billtocountry"),
billto_postalcode = Record.FieldOrDefault(Source, "billtozip"),
shipto_city = Record.FieldOrDefault(Source, "shiptocity"),
shipto_stateorprovince = Record.FieldOrDefault(Source, "shiptostateorprovince"),
shipto_country = Record.FieldOrDefault(Source, "shiptocountry"),
shipto_postalcode = Record.FieldOrDefault(Source, "shiptozip")
]
), each [Value] <> null
)
),
orderlines = List.Transform(orderProducts, each
Record.FromTable
(
Table.SelectRows
(
Record.ToTable
(
[
ispriceoverridden = true,
#"productid@odata.bind" = "/products(" & IOM.MapRecord(IOM.MappingTables[product], [sku = Record.FieldOrDefault(_, "sku")])[productid] & ")",
#"uomid@odata.bind" = "/uoms(" & IOM.MapRecord(IOM.MappingTables[uom], [unit = Record.FieldOrDefault(_, "unit")])[uomid] & ")",
quantity = [quantity],
shipto_name = Record.FieldOrDefault(orderheader, "shipto_name"),
shipto_contactname = Record.FieldOrDefault(orderheader, "shipto_contactname"),
shipto_line1 = Record.FieldOrDefault(orderheader, "shipto_line1"),
shipto_line2 = Record.FieldOrDefault(orderheader, "shipto_line2"),
shipto_line3 = Record.FieldOrDefault(orderheader, "shipto_line3"),
shipto_city = Record.FieldOrDefault(orderheader, "shipto_city"),
shipto_stateorprovince = Record.FieldOrDefault(orderheader, "shipto_stateorprovince"),
shipto_country = Record.FieldOrDefault(orderheader, "shipto_country"),
shipto_postalcode = Record.FieldOrDefault(orderheader, "shipto_postalcode"),
shipto_telephone = Record.FieldOrDefault(orderheader, "shipto_telephone")
]
), each [Value] <> null
)
)
),
salesorder = Record.AddField(orderheader, "order_details", orderlines)
in Text.FromBinary(Json.FromValue(salesorder));
- 変換ソース タイプに、「JsonPayload」 と入力します。
- 保存を選択します。
- JSON ファイルを作成し、以下のコードを貼り付けて保存します。
{
"ordernumber": "IOMLabOrder001",
"shiptocity": "BELLEVUE",
"shiptostateorprovince": "WA",
"shiptocountry": "US",
"shiptozip": "98007",
"billtocity": "BELLEVUE",
"billtostateorprovince": "WA",
"billtocountry": "US",
"billtozip": "98007",
"orderdetails": [
{
"sku": "883988211855",
"unit": "each",
"quantity": 11
}
]
}
- サンプル データフィールド横にある ファイルの選択 を選択 し、作成した JSON ファイルをアップロードします。
- 保存して閉じる を選択します。
ソリューションにプロバイダー定義の変換を追加する
ソリューションにプロバイダーの変換定義を追加するには、以下の手順で行います。
- Power App 作成者ポータル に移動し、新しく作成されたソリューション IOMLabProviders に移動します。
- 既存の追加 > IOM プロバイダー定義の変換を選択します。
- Dataverse 注文に対する IOMLab 注文 を選択し、追加 を選択してソリューションを追加します。
プロバイダー メッセージ ハンドラーの作成
プロバイダー メッセージ ハンドラーを作成するには、次の手順を実行します。
Power App 作成者ポータル に移動し、ソリューションに移動して 既定のソリューション を開きます。
新規 を選択します。
クラウド フローを選択し、「IOM Lab 受注メッセージ要求ハンドラー」 と名付けます。
トリガ タイプにOutlook.com – メールの受信時 (V2)を選択し、outlook.com アカウントの資格情報でサインインします。
フォルダーに、受信トレイを選択します。
宛先に、受信者の電子メール アドレスをセミコロンで区切るを選択します。
CCに、CC 受信者の電子メール アドレスをセミコロンで区切るを選択します。
宛先または CC に、宛先または CC 受信者の電子メール アドレスをセミコロンで区切るを選択します。
送信元に、送信者の電子メール アドレスをセミコロンで区切るを選択します。
添付ファイルを含めるには、はい を選択します。
件名フィルターに IOMLabOrderIntakeOrder を選択します。
重要度に、任意 を選択します。
添付のみに、はいを選択します。
新しいステップ を選択し、「JSON の解析」を追加します。
コンテンツに、次のコードを貼り付けます:
{ "ProviderId": "00000000-0000-0000-0000-000000000000" }
次のサンプル のスキーマ コードに直接貼り付けます。
{ "type": "object", "properties": { "ProviderId": { "type": "string" } } }
完了 を選択します。
省略記号 (...) を選択し、再命名を選択します。
アクション 「IOMシステム プロパティ」 の名前を変更します。
保存を選択します。
新規手順を選択し、JSON の解析アクションを追加して、「プロバイダ変数の初期化」と名前を変更します。
コンテンツに、次のコードを貼り付けます:
{ "SourceObjectName": "IOMLabOrderIntakeProvider", "DestinationObjectName": "Dataverse Order" }
保存を選択します。
新規手順を選択し、変数の初期化アクションを追加して、「処理の実行結果を初期化」 に 名前を変更します。
名前 に、「ExecutionResult」を入力します。
タイプに、ブール値を選択します。
値に、true を選択します。
保存を選択します。
新規手順を選択し、「スコープ」 を追加し、名前を 「試行」 に変更します。
試行 スコープで、アクションの追加を選択します。
Dataverse コネクタから 「アンバウンド アクションの実行」 を追加し、「IOMでプロバイダ ー メッセージを確認する」に名前を変更します。
アクション名に、「msdyn_CreateProviderMessageRequestExecution」と入力します。
PowerAutomateWorkflowId に、式として
workflow()['tags']['xrmWorkflowId']
を入力します。PowerAutomateRunId に、式として
workflow()['run']?['name']
を入力します。ProviderExternalRequestId に、式として
guid()
を入力します。保存を選択します。
アクションの追加を選択し、それぞれに適用コントロールを追加します。
前の手順の出力を選択するに、添付 を選択します。
それぞれに適用 ループ内の アクションの追加 を選択し、フロー コネクターから 子フローの実行 を追加し、"Power Query オンラインでメッセージを変換" と名前を変更します。
子フロー IOM プロバイダー変換 を選択します。
プロバイダ ID に、 ProviderId 変数を選択します。
ソース オブジェクト名に、SourceObjectName 変数を選択します。
宛先のオブジェクト名に、DestinationObjectName 変数を選択します。
ペイロード に、式として
decodeBase64(items('Apply_to_each')?['ContentBytes'])
を入力します。保存を選択します。
この変換手順の後、アクションの追加 を選択し、フロー コネクターから子フローの実行を追加して、[注文の作成] と名前を変更します。
子フローに、「IOM 販売注文の作成」 と入力します。
ペイロード に、式として
string(json(outputs('Transform_Message_with_Power_Query_Online')?['Body']?['result'])?[0][0])
を入力します。保存を選択します。
タイトル バー を 選択して、試行スコープを折りたたみます。
新規手順を選択し、スコープを追加して、「キャッチ」 という名前に変更します。
Catch スコープで、省略記号 ("...") を選択し、実行後の構成を選択します。
失敗したと タイムアウトしたチェック ボックスをオンにし、完了を選択します。
キャッチスコープで、アクションの追加 を選択し、変数の設定アクションを追加し、名前を 「実行結果に失敗」とします。
名前 に、「Executionresult」を入力します。
値に、False を選択します。
保存を選択します。
タイトル バー を 選択して、キャッチスコープを折りたたみます。
新規手順を選択し、スコープを追加して、「Finally」 という名前に変更します。
Finally スコープで、省略記号 ("...") を選択し、実行後の構成を選択します。
成功した、失敗した、スキップされた、タイムアウトしたチェック ボックスをオンにし、完了を選択します。
Finally スコープで、アクションの追加 を選択し、アンバウンド アクションの実行アクションを追加して。「プロバイダー メッセージ要求の実行結果の保存」 と名前を変更します。
アクション名に、「msdyn_UpdateProviderMessageRequestStatus」と入力します。
ProviderMessageRequestExecutionId に、
@outputs('Acknowledge_the_Provider_Message_in_IOM')?["body/ProviderMessageRequestExecutionId']
と入力します。保存を選択します。
プロバイダー定義に、プロバイダー定義のロジック定義を追加する
プロバイダー定義のロジック定義をプロバイダー定義に追加するには、以下の手順で行います。
- Intelligent Order Management アプリケーション で、プロバイダー > カタログを選択します。
- 新たに作成した IOMLabOrderIntakeProvider を選択します。
- メニュー バーで編集を選択します。
- ロジック定義タブを選択します。
- + 新規 IOM プロバイダー定義ロジックの定義を選択します。
- 表示名に、「IOM Lab 受注メッセージ要求ハンドラー」と入力します。
- 論理名 に、 「msdyn_LabOrderIntakeMessageRequestHandler」 と入力します。
- プロバイダー定義に、「IOMLabOrderIntakeProvider」と入力します。
- ロジック タイプに、「メッセージ ハンドラーの提供」と入力します。
- ワークフロー名に、「IOM Lab 受注メッセージ要求ハンドラー」と入力します。
- タイムアウト分に、「2」と入力します。
- 最大再試行回数に、「3」と入力します。
- 説明に、「IOM Lab 受注メッセージ要求ハンドラー」と入力します。
- 保存を選択します。 これにより、メッセージ ハンドラー クラウド フローの JSON 表現が生成され、クライアント データ フィールドに入力されます。
- 保存して閉じる を選択します。
- 接続を選択します。 Microsoft Dataverse と Outlook.com の両方の接続参照定義が表示されます。
メモ
Microsoft Dataverse と Outlook.com 以外の接続参照定義が表示されている場合は、注文受付メッセージ ハンドラー フローで複数の Dataverse 接続参照を使用していることを意味します。 この問題を修正するには、フローに移動し、すべての Dataverse アクションが同じ接続参照を使用していることを確認します。
IOMLabProviders ソリューションに、プロバイダー定義のロジック定義を追加する
IOMLabProviders ソリューションにプロバイダ定義のロジック定義を追加するには、以下の手順で行います。
- Power App 作成者ポータル に移動し、新しく作成されたソリューション IOMLabProviders に移動します。
- 既存の追加 > IOM プロバイダー定義のロジック定義を選択します。
- IOM Lab 受注メッセージ要求ハンドラー を選択し、追加を選択してソリューションを追加します。
IOMLabProviders ソリューションへのプロバイダー定義接続参照の追加
IOMLabProviders ソリューションにプロバイダー定義の接続参照を追加するには、以下の手順に従います。
- Power App 作成者ポータル に移動し、新しく作成されたソリューション IOMLabProviders に移動します。
- 既存の追加 > IOM プロバイダー定義の接続参照を選択します。
- Microsoft Dataverse と Outlook.com の接続参照を選択し、追加を選択してソリューションに追加します。
クイック スタート ラボの次のステップ: フルフィルメント プロバイダーの作成。