新しいプロバイダーの作成

新しいプロバイダーを作成するには、次の手順を使用します。 また、既存のプロバイダーに追加する場合にも、この手順を使うことができます。

プロバイダー アーキテクチャの定義

プロバイダーを作成する前に、プロバイダーに何を実行させるか、何に使用するかを理解してください。 プロバイダーには複数のコンポーネントがあり、すべてのコンポーネントが不要な場合があります。

次の表を使用して、必要なコンポーネントを決定します。

条件 必要なコンポーネント
作成したいプロバイダーのためのサービスに、Power Automate 内にコネクタがありません。
詳細については、「 すべての Power Automate コネクタの一覧」を参照してください。
顧客コネクタを作成するか、ジェネリック コネクタを使用します。
プロバイダーは、外部サービスと Microsoft Dataverse の間でデータを交換します。 プロバイダーはプロバイダーの変換が必要です。 変換ごとにプロバイダー変換コンポーネントを追加します。
プロバイダーはオーケストレーション デザイナーからロジックを実行します。 各アクションを表す個別の Power Automate フローを作成します。
プロバイダーは、外部サービスからのメッセージを処理する必要があります。 Power Automate メッセージ ハンドラーのフローを作成します。
プロバイダーは、一定の間隔で外部サービスからメッセージをプルします。 Power Automate メッセージ プラーのフローを作成します。
プロバイダーは、インテリジェント注文管理で現在定義されていないビジネス イベントを発生させます。 新しいビジネス イベント定義を作成し、既存のイベントを追加します。

ソリューションを十分に理解したら、プロバイダーの実装に進みます。

プロバイダー ソリューションの作成

プロバイダー ソリューションを作成するには、次のタスクを実行します。

  • カスタム プロバイダーを設定します。

  • プロバイダー定義を追加します。

  • コンポーネントをソリューションに追加します。

カスタム プロバイダーの設定

プロバイダーのコンポーネントを保持するソリューションを Power Apps で作成します。 Power Apps で新しいソリューションを作成する手順については、「Power Apps でソリューションを作成する」を参照してください。

プロバイダー定義の追加

プロバイダー定義には、プロバイダーに関する詳細が含まれています。 定義によって、プロバイダー カタログでのプロバイダーの表示方法が決まります。

  1. 作成したプロバイダー ソリューションで、新規を選択します。

  2. IOM プロバイダー定義 を選択します。

  3. 以下の詳細を追加します :

    • 表示名: プロバイダーに付ける名前 ("Test Provider" など)。

    • 論理名 : プロバイダー用のエクスポート キーです。

    • 説明 : プロバイダーが何をするのかを説明するテキストです。

  4. 保存を選択します。

  5. ロゴを追加する場合は、画像をアップロードします。

  6. プロバイダー定義がソリューションに表示されることを検証します。 コンポーネント タイプである IOM プロバイダー定義がレコードと共に表示されるはずです。 表示されない場合は、[ 既存のものを追加] を選択し、作成したレコードを選択します。

  7. プロバイダーが、プロバイダー カタログに表示されることを検証します。 [ アクティブ] フィールドを [はい] に設定すると、プロバイダー カタログにプロバイダー定義が表示されます。 Intelligent Order Management を開きます。 プロバイダー > カタログに移動します。 プロバイダー定義が表示されることを検証します。

ソリューションにコンポーネントを追加する

プロバイダー定義を作成した後、プロバイダー コンポーネントをソリューションに追加します。

  1. ソリューションに移動します。

  2. 既存の追加を選択します。

  3. インテリジェント注文管理コンポーネントの種類を選択し、作成したレコードを選択します。

プロバイダー変換の作成

プロバイダーに変換が必要な場合は、プロバイダー変換コンポーネントをソリューションに追加します。 複数の変換を作成する必要がある場合があります。

  1. プロバイダー ソリューションで、[ 新規] を選択します。

  2. IOM プロバイダー定義変換を選択します。

  3. 以下の詳細を追加します :

    1. 表示名: プロバイダートランスフォーメーションの名前 ("販売注文の変換" など)。

    2. 論理名 : プロバイダーの一意識別子です。 この値は、データのインポート キーとエクスポート キーです。 これは、発行元の接頭辞から始まる必要があります。 たとえば、Microsoft では発行元の接頭辞である msdyn_ を使用しています。 論理名の例として、msdyn_flexe_fulfillmentorderproduct_orderline、および msdyn_flexe_fulfillmentorder_order があります。

    3. ソース タイプ : このフィールドは、受信したデータのタイプを示します。 JsonDocument または Dataverse エンティティの 2 つのオプションを使用できます。 データが Dataverse に既にある場合は、Dataverse エンティティを選択します。 そうでない場合は JsonDocument を選択してください。 定義する Power Automate 要素では、この情報を使用して変換を検索します。

    4. ソース オブジェクト名: 変換するデータの名前。 Dataverse レコードを変換する場合は、 ソース オブジェクト名 が Dataverse テーブルと同じ名前であることを確認します。

    5. 送信先オブジェクト名 : 変換するレコードの送信先です。

    6. 変換: 入力データの変換に使用される Power Query Online MQuery。 Power Query および MQuery については、Power Query とは?Power Query M 式の言語のリファレンスを参照してください。次は、外部のオーダー サービスから Intelligent Order Management の販売注文に変換する MQuery の例です。

shared TransformSourceData =

let

orderItems = Source\[OrderItems\],

orderheader =

Record.FromTable

(

Table.SelectRows

(

Record.ToTable

(

\[

ordernumber = Record.FieldOrDefault(Source, "SellerOrderId", Text.From(Source\[OrderServiceOrderId\])),

name = ordernumber,

msdyn\_ExternalOrderId = Text.From(Source\[OrderServiceOrderId\]),

\#"customerid\_account@odata.bind" = "/accounts(" & Text.From(Source\[accountid\]) & ")",

\#"pricelevelid@odata.bind" = "/pricelevels(" & Text.From(Source\[pricelevelid\]) & ")",

totalamount = if Record.HasFields(Source, "OrderTotal") then Decimal.From(Record.FieldOrDefault(Source\[OrderTotal\], "Amount")) else null,

shipto\_name = if Record.HasFields(Source, "ShippingAddress") then Record.FieldOrDefault(Source\[ShippingAddress\], "Name") else null,

shipto\_contactname = shipto\_name,

shipto\_line1 = if Record.HasFields(Source, "ShippingAddress") then Record.FieldOrDefault(Source\[ShippingAddress\], "AddressLine1") else null,

shipto\_line2 = if Record.HasFields(Source, "ShippingAddress") then Record.FieldOrDefault(Source\[ShippingAddress\], "AddressLine2") else null,

shipto\_line3 = if Record.HasFields(Source, "ShippingAddress") then Record.FieldOrDefault(Source\[ShippingAddress\], "AddressLine3") else null,

shipto\_city = if Record.HasFields(Source, "ShippingAddress") then Record.FieldOrDefault(Source\[ShippingAddress\], "City") else null,

shipto\_stateorprovince = if Record.HasFields(Source, "ShippingAddress") then Record.FieldOrDefault(Source\[ShippingAddress\], "StateOrRegion") else null,

shipto\_country = if Record.HasFields(Source, "ShippingAddress") then Record.FieldOrDefault(Source\[ShippingAddress\], "CountryCode") else null,

shipto\_postalcode = if Record.HasFields(Source, "ShippingAddress") then Record.FieldOrDefault(Source\[ShippingAddress\], "PostalCode") else null,

shipto\_telephone = if Record.HasFields(Source, "ShippingAddress") then Record.FieldOrDefault(Source\[ShippingAddress\], "Phone") else null,

overriddencreatedon = Record.FieldOrDefault(Source, "PurchaseDate")

\]

), each \[Value\] \<\> null

)

),

orderlines = List.Transform(orderItems, each

Record.FromTable

(

Table.SelectRows

(

Record.ToTable

(

\[

isproductoverridden = true,

ispriceoverridden = true,

productdescription = \[OrderItemId\] & "-" & Record.FieldOrDefault(\_, "SellerSKU") & "-" & Record.FieldOrDefault(\_, "Title"),

quantity = \[QuantityOrdered\],

quantityshipped = Record.FieldOrDefault(\_, "QuantityShipped"),

priceperunit = if Record.HasFields(\_, "ItemPrice") then Decimal.From(Record.FieldOrDefault(\[ItemPrice\], "Amount")) else null,

manualdiscountamount = if Record.HasFields(\_, "PromotionDiscount") then Decimal.From(Record.FieldOrDefault(\[PromotionDiscount\], "Amount")) else null,

tax = if Record.HasFields(\_, "ItemTax") then Decimal.From(Record.FieldOrDefault(\[ItemTax\], "Amount")) else null,

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"),

overriddencreatedon = Record.FieldOrDefault(orderheader, "overriddencreatedon")

\]

), each \[Value\] \<\> null

)

)

),

salesorder = Record.AddField(orderheader, "order\_details", orderlines)

in Text.FromBinary(Json.FromValue(salesorder));
  1. 保存を選択します。

  2. 変換コンポーネントが正しく表示されていることを検証します。 IOM プロバイダー定義変換のコンポーネント タイプが変換名と共に表示されるはずです。 表示されない場合は、[ 既存のものを追加] を選択し、作成した変換を選択します。

ビジネス イベント定義の追加

プロバイダーが新しいビジネス イベントを作成または使用する場合は、 IOM プロバイダー定義ビジネス イベント定義 コンポーネントをソリューションに追加します。 インテリジェント注文管理にまだ含まれていないビジネス イベントのみを追加します。

作成するビジネス イベントがまだインテリジェント注文管理にない場合は、独自のイベントを作成します。

  1. 新規 を選択します。

  2. IOM プロバイダー定義ビジネス イベント定義を選択します。

  3. 以下の詳細を追加します :

    1. 名前 : ビジネス イベントの名前です。

    2. プロバイダー : このビジネス定義を作成するプロバイダーです。

    3. 関連付けられたエンティティ: イベントの作成時に変更または影響を受けるインテリジェント注文管理の Dataverse エンティティ。

    4. 関連付けられた状態値: ビジネス イベントが発生したときに関連付けられているエンティティの状態を更新する場合は、このフィールドに状態値を含めます。

    5. 関連付けられた状態値: ビジネス イベントが発生したときに関連付けられているエンティティの状態を更新する場合は、このフィールドに状態値を含めます。

  4. 保存を選択します。

  5. IOM プロバイダー ビジネス イベント定義レコードが表示されているかを検証するため、ソリューションを確認してください。 レコードがソリューションに表示されない場合は、[ 既存のものを追加] を選択し、作成したレコードを選択します。

コネクタの追加

Power Automate で使用できないコネクタがプロバイダーに必要な場合は、独自のコネクタを作成します。 詳細については、すべての Power Automate コネクタの一覧を参照してください。

独自の Power Automate コネクタを作成するには、カスタム コネクタの概要に記載手順に従ってください。

カスタム コネクタを作成した後、それをコンポーネントとしてプロバイダー ソリューションに追加します。

  1. プロバイダー ソリューションに移動します。

  2. 既存の追加を選択します。

  3. 作成したコネクタを選択します。

Power Automate フローのタイプ

Power Automate フローは、オーケストレーション デザイナーで実行するすべてのアクションを表します。 Power Automate で特定の情報を取得したり、特定のアクションを実行したりする場合は、それらのアクションのフローを作成する必要があります。 Power Automate の詳細については、Power Automate の紹介を参照してください。

フローをプロバイダー定義ロジック定義コンポーネントとしてプロバイダーに追加します。

フロー作成プロセスを開始する前に、インテリジェント注文管理で使用されるフローの種類を確認します。

プロバイダー メッセージ ハンドラー

これらのフローは、外部サービスからメッセージを受信して処理します。 インテリジェント注文管理オーケストレーションに通知するために、適切なビジネス イベントを発生させます。 外部サービスによってこれらのフローがトリガーされます。

次の例は、Power Automate フローのメッセージ ハンドラーの種類を作成するための構造を示しています。

  1. Power Automate のトリガーを定義します。 通常、このトリガーは、Webhook トリガー (推奨)、コネクタ トリガー、または Dataverse 挿入トリガーである HTTP エンドポイントです。 外部サービスは、インテリジェント注文管理に送信するデータがある場合にトリガーを発生させます。

HTTP 要求を受信したときのトリガーのスクリーンショット。

HTTP トリガーで次の JSON スキーマを使用します。

{
    "type": "object",
    "properties": {
        "text": {
            "title": "ProviderActionExecutionEventId",
            "type": "string",
            "x-ms-dynamically-added": true,
            "description": "Please enter your input",
            "x-ms-content-hint": "TEXT"
        },
        "text_1": {
            "title": "EntityRecordId",
            "type": "string",
            "x-ms-dynamically-added": true,
            "description": "Please enter your input",
            "x-ms-content-hint": "TEXT"
        }
    },
    "required": [
        "text",
        "text_1"
    ]
}
  1. メッセージ処理を初期化します。 このタスクには、2 つの手順が含まれます。

    1. メッセージの処理を追跡する実行結果を初期化します。

    2. Intelligent Order Management でプロバイダー メッセージを確認することで、処理状態の追跡、再試行、表示が可能になります。 この手順は、インテリジェント 注文管理で導入される Power Automate アクションです。 このアクションを IOM でのプロバイダー メッセージ要求確認と呼びます。 このアクションには、次の必須パラメーターがあります。

      1. PowerAutomateWorkflowId: メッセージ ハンドラー定義上の WorkflowId です。 workflow()['tags']で compose 関数を使用して、この値を取得します。

      2. PowerAutomateRunId: メッセージを受信した一意の Power Automate 実行識別子。 この識別子を使用すると、パイプラインは処理を再試行し、実行ログをリンクできます。 workflow()['run']?['name']で compose 関数を使用して、この値を取得します。

      3. ProviderMessageExternalRequestId: 送信されたメッセージの識別子です。 識別子が存在しない場合は、GUID を生成します。 パイプラインでは、この識別子を使用して、送信者が重複するメッセージを送信するのを防ぎます。 識別子はソース ペイロードによって異なります。 たとえば、 concat(triggerOutputs()?['body']?['type']?['name'], '_', triggerOutputs()?['body']?['ID'])と指定します。

[プロバイダー メッセージ要求の確認] 画面のスクリーンショット。

  1. 前に定義したプロバイダー変換は、入力データを取得して変換します。 インテリジェント注文管理は、変換を実行する IOM プロバイダー トランスフォーマー と呼ばれる、すぐに使用できる子フローを提供します。 イベントまたはメッセージを処理するために、次の詳細情報を追加します :

    1. プロバイダー名: メッセージ ハンドラーにリンクされているプロバイダー名です。 この値は、プロバイダー変換と同じ名前である必要があります。

    2. ソース オブジェクト名: 変換を実行するソース ルックアップ キーの値です。 この値は、プロバイダー変換で定義されたソース オブジェクト名と同じである必要があります。

    3. 送信先オブジェクト名: 変換を実行する送信先ルックアップ キーの値です。 この値は、プロバイダー変換で定義された値と同じである必要があります。

    4. ペイロード: JSON ペイロードの変換時に提供されます。 Power Automate では、パラメーターをシリアル化された文字列として渡す必要があります。 ペイロードまたはレコード ID の値を提供しますが、両方は提供できません。

    5. レコード ID: Dataverse レコードの変換時に提供されます。 ペイロードまたはレコード ID の値を指定しますが、両方は指定しません。

Power Query Online での変換メッセージのスクリーンショット。

  1. HTTP 要求または Dataverse コネクタの挿入アクションを使用して、Dataverse にデータを挿入できます。 複数の挿入を実行していて、パフォーマンスを向上させる場合は、要求がトランザクション バッチ内になるように、挿入を変更セットにラップします。

メッセージの挿入フローのスクリーンショット。

  1. フローでビジネス イベントを発生させる場合は、 ビジネス イベントの発生 子フローを使用します。 以下の詳細を追加します。

    1. BusinessEventName: 発生するイベントの名前です。

    2. EntityRecordId: 作成され、イベントに関連付けられているレコードの ID。

  2. プロバイダー メッセージ要求状態の更新アクションを使用してメッセージの処理状態を更新し、処理の実行結果を保存します。 以下の詳細を追加します。

    1. ProviderMessageRequestExecutionId: メッセージ処理の進行状況を追跡するために作成されたレコードの出力 ID です。

    2. IsProviderMessageRequestExecutionSuccess: 正常に処理されたかどうかを示すブール値です。

プロバイダー メッセージ プル フロー

プロバイダー メッセージ プル フローは、定期的に定義された間隔で外部サービスからメッセージをプルする Power Automate フローです。

メモ

メッセージ ハンドラーは、メッセージ プラー フローの前提条件となるものです。

次の例は、Power Automate フローのメッセージ プーラーの種類を作成するための構造を示しています。

  1. トリガーをスケジュールするには、繰り返しワークフローを使用します。

  2. Dataverse からチェックポイントを取得します。 チェックポイントは、フローが外部プロバイダーから正常にプルしたメッセージを追跡します。 以下の詳細を追加します。

    1. アクション名: チェックポイントの名前です。

    2. WorkflowId: この情報を取得するには、次の compose 関数を設定します: workflow()['tags']['xrmWorkflowId']

[チェックポイントの取得] のスクリーンショット。

  1. メッセージを取り込むために外部プロバイダーへの HTTP 転記要求を作成します。 以下の詳細を追加します。

    1. メソッド: このフィールドで POST と設定します。

    2. URL: 外部プロバイダー エンドポイントです。

    3. 本文: JSON 要求には、次の数式が必要です: if(empty(outputs('Get_Checkpoint')?['body/Checkpoint']), 0, int(outputs('Get_Checkpoint')?['body/Checkpoint']))

プル メッセージのスクリーンショット。

  1. 手順 3 でフローがプルするメッセージを解析します。 以下の詳細を追加します。

    1. コンテンツ: 手順 3 から取得された本文です。

    2. スキーマ: 手順 3 で取得された本文の構造です。

メッセージの解析のスクリーンショット。

  1. 手順 4 の各メッセージを介してメッセージがループするようメッセージを処理します。

  2. 前の手順の各メッセージを解析します。 次の情報を追加します。

    1. コンテンツ: プロセス メッセージの現在の品目です。

    2. スキーマ: JSON 形式の 1 つのメッセージです。

プロセスメッセージ2のスクリーンショット。

  1. 前提条件で設定した、関連付けられているプロバイダー メッセージ ハンドラーを呼び出します。 次の情報を追加します。

    1. 子フロー: プロバイダー メッセージ ハンドラーを選択します。

    2. メッセージ: 手順 6 の解析されたメッセージです。

処理メッセージ 3 のスクリーンショット。

  1. チェックポイントを Dataverse に保存します。 次の情報を追加します。

    1. チェックポイント: この値には任意の文字列値 (最大 100) を指定できます。 この例では、この値は最後に処理されたメッセージの ID です。

    2. WorkFlowId: compose 関数セットを workflow()['tags']['xrmWorkflowId'] に追加することで、この ID を取得できます。

プロセスメッセージ 4 のスクリーンショット。

プロバイダー アクション

オーケストレーション デザイナーからプロバイダー アクション フローを呼び出します。 通常これらのフローは、Intelligent Order Management から外部サービスを呼び出します。

プロバイダー メッセージ ハンドラーとプロバイダー アクションの主な違いは、メッセージ ハンドラーはオーケストレーション デザイナーに通知できますが、オーケストレーション デザイナーのアクション タイルではトリガーできないことです。 プロバイダー アクションは、アクション タイルによってトリガーできます。

次の例は、プロバイダー アクション Power Automate フローの構造を示しています。

  1. HTTP トリガーから開始します。 オーケストレーション サービスは、実行時に次の情報を渡します。 本文には、次の JSON スキーマが使用されます。
{
    "type": "object",
    "properties": {
        "text": {
            "title": "ProviderActionExecutionEventId",
            "type": "string",
            "x-ms-dynamically-added": true,
            "description": "Please enter your input",
            "x-ms-content-hint": "TEXT"
        },
        "text_1": {
            "title": "EntityRecordId",
            "type": "string",
            "x-ms-dynamically-added": true,
            "description": "Please enter your input",
            "x-ms-content-hint": "TEXT"
        }
    },
    "required": [
        "text",
        "text_1"
    ]
}
  1. アクション処理を初期化します。

    1. 実行結果および他のすべての処理変数を初期化します。

    2. プロバイダー アクションの実行開始を使用して、Dataverse アクションの実行の開始を承認します。 この手順により、パイプラインは Intelligent Order Management 内で処理状態を追跡、再試行、および表示できます。 次の情報を追加します。

      1. ProviderActionExecutionEventId: アクションは、この値をステップ 1 の入力パラメーターとして受け取ります。

      2. PowerAutomateRunID: Power Automate アクションの一意の実行です。 この値により、パイプラインは実行ログをリンクできます。 この情報を取得するには、フィールドを Power Automate 式 worflow()['run']?['name']に設定します。

  2. アクションを実行します。

    1. 必要に応じて、 Power Query Online の子フローでメッセージの変換 を使用してレコードを変換します。

      1. プロバイダー名: アクションにリンクするプロバイダーの名前。 この名前は、プロバイダー定義と同じ名前である必要があります。

      2. ソース オブジェクト名: 実行する変換のソース名です。 この名前は、Power Automate の変換で定義されたソース オブジェクトと同じである必要があります。

      3. 送信先オブジェクト名: 変換を実行する送信先ルックアップ キーの値です。 この名前は、プロバイダー変換で定義された値と同じである必要があります。

      4. ペイロード: 受信した JSON ペイロードの変換時に提供されます。 Power Automate では、パラメーターをシリアル化された文字列として渡す必要があります。 ペイロードまたはレコード ID の値を追加しますが、両方は追加できません。

      5. レコード ID:発信した Dataverse レコードの変換時に提供されます。 ペイロードまたはレコード ID の値を追加しますが、両方は追加できません。

      Power Query Online での変換メッセージのスクリーンショット。

    2. 定義したカスタム アクションを実行します。 これらのアクションは、使用している Power Automate コネクタに存在します。

    3. アクション固有のビジネス イベントを発生させます。 ビジネス イベントの発生子フローを使用します。 次の情報を追加します。

      1. BusinessEventName: 発生させたいイベントの名前です。

      2. EntityRecordId: イベントに関連付けられたレコードの ID です。

  3. アクションの実行を完了して結果を保存します。 オーケストレーション デザイナーが結果を処理します。 次の情報を追加します。

    1. ExecutionResult: 正常に処理されたかどうかを示すブール値です。

    2. ExecutionDetails: テストやデバッグを目的としたオプションのログの詳細です。

    3. ProviderActionExecutionEventId: アクションは、手順 1 で定義した入力パラメーターとしてこの値を受け取ります。

[Complete provider action execution]\(プロバイダー アクションの実行の完了\) のスクリーンショット。

子フロー

子フローは、他の Power Automate フローが参照するサブフローです。 複数の領域で繰り返す手順がある場合は、子フローを定義しておくと便利です。 子フローには特定のテンプレートや推奨されるプロセスはありません。これは、主に同様の手順を統合するために使用することを目的としているためです。

プロバイダーの子フローは、他のプロバイダーの子フローを呼び出すことはできません。

クラウド フローの作成

作成するフローの種類を理解したら、クラウド フローを作成する準備が整います。 これを行うには、次の手順に従います:

  1. Power Apps 環境で既定のソリューションを開きます。

重要

これらのソリューションをプロバイダー ソリューションに追加しないで下さい。

  1. [ 新規] を選択し、[ Cloud Flow] を選択します。

  2. Power Automate フローを構築します。 前のセクションを参照してテンプレートを使用します。

  3. フローを保存するには、次のセクションを参照してください。

Power Automate の定義を保存します

フローを作成したら、 それらをプロバイダー定義ロジック定義 コンポーネントとして保存します。 このコンポーネント タイプは、プロバイダーが有効化する際に展開するアクションを Intelligent Order Management に提供します。

フローを保存する前に、次の前提条件があることを確認してください。

  • Power Automate ロジック定義を保存するには、OData 要求を送信する必要があります。 これらの要求を送信するには、PostMan または同様のサービスを持つアカウントが必要です。

  • GET 要求と POST 要求を送信するには、Dataverse 環境のアクセス トークンを生成する必要があります。

    • 有効なサブスクリプションを持つ Azure アカウントを設定します。 アクティブなアカウントがない場合は、 Azure Web サイトでアカウントを設定します。

    • PowerShell がインストールされている必要があります。 詳細については PowerShell のインストールを参照してください。

    • PowerShell で次のコマンドを入力して、アクセス トークンを取得します。 az sign in --allow-no-subscriptions account get-access-token --resource=<https://YourDataverseTenantURL.api.crm.dynamics.com/> --query=accessToken --output=tsv \| Set-Clipboard.

Power Automate 定義を保存するには、次の手順に従います。

  1. 保存する Power Automate フローのワークフロー ID を検索します。 次のいずれかのオプションを実行します。

    1. Power Automate アクションを使用してワークフロー ID を検索します。

      1. Power Automate フローの最後に、workflow() 式で構成アクションを作成します。

      Compose アクションのスクリーンショット。

      1. Power Automate を実行します。

      2. 実行結果の xrmWorkflowId プロパティには、ワークフロー ID が含まれています。

      ワークフロー ID のスクリーンショット。

      1. このアクションをフローから削除して、再度実行されないようにします。
    2. 必要に応じて、Get OData 要求を送信できます。

      1. ワークフロー ID を保存するフローに移動します。 URL 内の一意識別子を検索します。 この ID は URL 内の ../flows/ の後に表示されます。

      一意識別子を検索する方法のスクリーンショット。

      1. ワークフロー メタデータを取得する OData 要求を送信します。 GET 要求の例を次に示します。
        GET {Env url}/api/data/v9.1/workflows?$filter=workflowidunique eq '{Power Automate U}の一意のワークフロー ID'&$select=workflowid,workflowidunique

      2. 返された workflowid プロパティを保存します。

  2. プロバイダー定義 ID を検索します。

    1. フローの保存先となるプロバイダー定義を選択します。

    2. URL からプロバイダー定義 ID をコピーします。 URL のこの部分は ../id={example number}/.

    プロバイダー定義 ID を検索する方法のスクリーンショット。

  3. 保存する Power Automate の種類のオプション セットの値を書き留めておきます。

    1. 子フロー: 192350002

    2. プロバイダー アクション: 192350001

    3. プロバイダー メッセージ ハンドラー: 192350000

    4. プロバイダー メッセージ プル フロー: 192350003

  4. POST 要求を送信して Power Automate 定義を保存します。 次の例はこの要求を示しています。

    POST: {Env url}/api/data/v9.1/msdyn\_SaveProviderDefinitionLogicDefinition  
    Body:  
    {

"ProviderDefinitionId": "{ProviderId previously found}",

"WorkflowId": "{Power Automate WorkflowId previously found}",

"LogicalName": "{Export prefix \_ Power Automate Export Name}",

"LogicType": {Logic Type},

"MaxRetryAttempts": {Max number of attempts},

"TimeoutMinutes": {Timeout number ex: 5}

}
  1. プロバイダー定義ロジック定義コンポーネントがソリューション内にあることを確認します。 このチェックを行うには、次の手順に従います。

    1. プロバイダー ソリューションに移動します。

    2. 作成したプロバイダー定義ロジック定義がソリューション内にあることを確認します。 ソリューションにない場合は、[ 既存の追加] を選択し、作成したコンポーネントを追加します。

接続参照の保存

プロバイダーが顧客の Power Automate コネクタを使用している場合は、次の手順を実行して、Power Automate ソリューションへの接続参照を保存します。

  1. 接続参照 ID を取得するための GET 要求を送信します。 たとえば次のようにできます。
GET {Env url}/api/data/v9.2/connectionreferences

さらにフィルター処理する場合は、接続参照名でフィルター処理します。 たとえば次のようにできます。

    {Env url}/api/data/v9.2/connectionreferences?$[connectionreferences?$filter=connectionreferencedisplayname](https://orgdb90e3a2.api.crm10.dynamics.com/api/data/v9.2/connectionreferences?$filter=connectionreferencedisplayname) eq 'Provider Example'&$select=connectionreferencelogicalname,connectionreferencedisplayname,connectionreferenceid,connectorid

  1. Power Automate クライアント データを検索して、正しい接続参照 ID が取得されることを検証します。

    1. 先に保存したプロバイダー定義ロジック定義コンポーネントに移動します。

    2. クライアント データを確認して connectionReferenceLogicalName が表示されていることを検証します。

  2. プロバイダー定義 ID を検索します。 この値は、Power Automate ロジック定義を保存するために手順 2 で使用した値と同じです。

  3. POST 要求を送信して接続参照を保存します。 たとえば次のようにできます。

POST {Env url}/api/data/v9.1/msdyn\_SaveProviderDefinitionConnectionReference  
    Body:  
    {

"ProviderDefinitionId": "{ProviderId previously found}",

"ConnectionReferenceId": "{Connection reference id previously found}"

}
  1. プロバイダー定義ロジック定義コンポーネントが追加されたことを検証します。

    1. プロバイダー ソリューションに移動します。

    2. 作成したプロバイダー定義ロジック定義参照コンポーネントが追加されたことを検証します。 追加されていない場合は、[ 既存の追加 ] を選択し、作成したコンポーネントを追加します。

プロバイダーの共有

別の環境でプロバイダー定義を使用する場合、またはソリューションを共有する場合は、プロバイダー ソリューションをエクスポートします。 詳細については、ソリューションのエクスポートを参照してください。