Power Automateを使用して作業指示書を作成する

Power Automate フローを使用して、Dynamics 365 Field Serviceで作業指示書を自動的に作成できます。 これは、IoT アラート、フォームの送信、別のシステムからのサービス要求、関連レコードへの変更などの外部トリガーに基づいて作業指示を作成する必要がある場合に便利です。

Power Automate フローでは、Microsoft Dataverse コネクタを使用して Field Service レコードを操作します。 コードを使用して作業指示書を作成する方法については、「 Dataverse Web API を使用して作業指示書を作成する」を参照してください。

前提条件

  • Power Automate ライセンス (ほとんどのDynamics 365 ライセンスに含まれます)。
  • フローの接続アカウントには、次の Field Service セキュリティ ロールのうち少なくとも1つが割り当てられている必要があります。 詳細については、「 ユーザーとセキュリティ ロールの設定」を参照してください。
    • Field Service - フィールドサービス ディスパッチャー
    • フィールドサービス - 管理者
  • 必要なルックアップフィールドに対する既存のレコード:
    • サービス アカウント (account エンティティ)
    • 作業指示書の種類 (msdyn_workordertype エンティティ)
    • 価格表 (pricelevel エンティティ)

オプション 1: Dataverse レコードが変更されたときに作業指示書を作成する

このパターンを使用して、顧客資産の状態が変更されたときなど、別の Dataverse テーブルの変更に応じて作業指示書を作成します。

トリガーを設定する

  1. Power Automateで、Create>Automated cloud flow を選択します。

  2. 行が追加、変更、または削除されると (Microsoft Dataverse コネクタ) を検索して選択します。

  3. メッセージが表示されたら、Dynamics 365資格情報を使用して Microsoft Dataverse コネクタにサインインします。 環境への接続が既にある場合は、ドロップダウンから選択します。 トリガーの構成フィールドは、アクティブな接続が確立されるまで設定されません。

  4. トリガーを構成します。

    フィールド 価値
    変更の種類 変更済み
    テーブル名 顧客資産
    Scope 組織
  5. 必要に応じて、フローの実行時に制限する フィルター行 条件を追加します。 例: msdyn_operationalstatus eq 690970001 (サービスが必要)。

ヒント

Dataverse レコードを変更せずに作業指示書の作成手順をテストするには、フローのコピーを作成し、Dataverse トリガーを 手動でフローをトリガーするように置き換えます。 フローの実行時にテスト値を渡すことができるように、入力パラメーター (サービス アカウント ID、作業指示書の種類 ID、価格表 ID のテキスト入力など) を追加します。 作業指示書が正しく作成されたことを確認したら、実稼働フローで Dataverse トリガーに戻ります。

作業指示書の作成アクションを追加する

  1. + 新しいステップを選択し、新しい行を追加 (Microsoft Dataverse コネクタ) を検索します。

  2. トリガーに使用したのと同じ Dataverse 接続を選択します。 [ テーブル名 ] フィールドは、接続が選択された後にのみ表示されます。

  3. [テーブル名] を [作業指示書] に設定します。

  4. 必須フィールドを入力してください。

    フィールド 価値
    作業指示書番号 プレースホルダーとして式 guid() を入力します。 Dataverse コネクタ UI では作業指示番号フィールドが必要ですが、レコードの保存時に Field Service の自動番号プラグインによって正しい順次作業指示番号が自動的に割り当てられます。 式を入力するには、フィールドを選択し、動的コンテンツ パネルの [式 ] タブに切り替え、「 guid()」と入力して、[ OK] を選択します
    サービス アカウント ハードコードまたは動的 GUID を使用する必要がある場合は、検索フィールドを使用してアカウントを選択するか、[式] タブにconcat('/accounts(', 'service-account-guid', ')')を入力します。 これを見つける方法については、以下を参照してください。
    作業指示書の種類 ハードコードまたは動的 GUID を使用する必要がある場合は、検索フィールドを使用して作業指示書の種類を選択するか、[concat('/msdyn_workordertypes(', 'work-order-type-guid', ')')] タブに式を入力します。 これを見つける方法については、以下を参照してください。
    価格表 ハードコードまたは動的 GUID を使用する必要がある場合は、検索フィールドを使用して価格表を選択するか、[式] タブにconcat('/pricelevels(', 'your-price-list-guid', ')')を入力します。 For each ループ内の List 行アクションを使用して価格表を動的に取得する場合は、代わりに concat('/pricelevels(', items('YourLoopName')?['pricelevelid'], ')') を使用し、YourLoopNameをループの名前に置き換えます。 これを見つける方法については、以下を参照してください。
    システムステータス 690970000 (スケジュールなし)
    有税 false
    手順 トリガーの動的コンテンツ (資産名など) を使用する

    サービス アカウント: [ サービス アカウント] フィールドにアカウント名を直接入力して検索して選択します。 トリガーが顧客資産の変更であり、資産がアカウントにリンクされている場合は、代わりに動的コンテンツ パネルから アカウント (顧客資産) を選択できます。 GUID を直接使用する必要がある場合は、Field Service の サービス 領域 >Customers>Accounts に移動し、アカウントを開き、ブラウザーの URL からレコード ID ( %7B%7D の間の値、または URL がエンコードされていない場合はプレーン GUID) をコピーします。

    作業指示書タイプ: 作業指示書タイプの名前を[ 作業指示書タイプ ]フィールドに直接入力して検索して選択します。 GUID を直接使用する必要がある場合は、[設定] 領域>フィールド サービスの [作業順序>作業注文の種類] に移動し、作業指示の種類を開き、ブラウザーの URL からレコード ID をコピーします。

    価格リスト: 価格リストフィールドに価格リスト名を直接入力して検索および選択します。 GUID を直接使用する必要がある場合は、[>General>フィールド サービスの価格リストに移動し、価格表を開き、ブラウザーの URL からレコード ID をコピーします。

    Dataverse コネクタでは、単純な GUID ではなく OData エンティティ参照パス ( /accounts(guid) など) を使用するルックアップ フィールドが必要です。 GUID をそのまま入力すると、実行時に ODataUnrecognizedPathException エラーが発生します。 上記の concat 式は、正しいパス形式を構築します。

  5. フローを保存して、テストします。

オプション 2: HTTP 要求から作業指示書を作成する

このパターンを使用して、顧客ポータル、チケット システム、IoT プラットフォームなどの外部システムから作業指示書を作成します。

トリガーを設定する

  1. Power Automateで、Create>Instant cloud flow を選択します。

  2. フローに名前を付 け、[HTTP 要求が受信されたとき ] をトリガーとして選択します。

  3. を選択してを作成します。

  4. [ 要求本文の JSON スキーマ ] フィールドに、次のスキーマを貼り付けます。

    {
      "type": "object",
      "properties": {
        "serviceAccountId": { "type": "string" },
        "workOrderTypeId": { "type": "string" },
        "priceListId": { "type": "string" },
        "instructions": { "type": "string" }
      },
      "required": ["serviceAccountId", "workOrderTypeId", "priceListId"]
    }
    
  5. [フローをトリガーできるユーザー] で、次のいずれかのオプションを選択します。

    オプション いつ使用するか
    私のテナント内のユーザーのみ 本番環境に推奨されます。 呼び出し元は、Microsoft Entra IDで認証し、有効な OAuth ベアラー トークンを提示する必要があります。 これは、内部システムまたは信頼されたサービス プリンシパルに使用します。
    すべてのユーザー URL 自体は資格情報として機能します。追加の認証ヘッダーは必要ありません。 呼び出し元のシステムがEntra IDトークンを取得できず、URL が安全に格納されていることを確認できる場合にのみ使用します。

    HTTP によってトリガーされるフローのセキュリティ保護の詳細については、 HTTP 要求トリガーの OAuth 認証の追加に関するページを参照してください。

  6. HTTP URL フィールドは読み取り専用です。入力しないでください。 初めてフローを保存すると、Power Automateが自動的にそれを入力します。

  7. フローを保存します。 HTTP URL フィールドにエンドポイント URL が設定されるようになりました。 この URL をコピーし、外部システムを構成するユーザー (開発者やシステム管理者など) に指定します。 外部システムは、定義したスキーマに一致する JSON 本文を使用して、この URL に HTTP POST 要求を送信することでフローをトリガーします。 例えば次が挙げられます。

    POST <paste the HTTP URL here>
    Content-Type: application/json
    
    {
      "serviceAccountId": "<account record GUID>",
      "workOrderTypeId": "<work order type record GUID>",
      "priceListId": "<price list record GUID>",
      "instructions": "Reported issue: equipment not functioning"
    }
    

    外部システムがこの要求を送信するたびに、Power Automateフローが実行され、Field Service で作業指示書が作成されます。

作業指示書の作成アクションを追加する

  1. + 新しいステップを選択し、新しい行を追加 (Microsoft Dataverse コネクタ) を検索します。

  2. Microsoft Dataverse コネクタにサインインするか、既存の接続を選択します。 [ テーブル名 ] フィールドは、接続が選択された後にのみ表示されます。

  3. [テーブル名] を [作業指示書] に設定します。

  4. HTTP 要求本文フィールドを作業指示フィールドにマップします。

    作業指示書フィールド 価値
    作業指示書番号 プレースホルダーとして式 guid() を入力します。 Dataverse コネクタ UI では作業指示番号フィールドが必要ですが、レコードの保存時に Field Service の自動番号プラグインによって正しい順次作業指示番号が自動的に割り当てられます。 式を入力するには、フィールドを選択し、動的コンテンツ パネルの [式 ] タブに切り替え、「 guid()」と入力して、[ OK] を選択します
    サービス アカウント concat('/accounts(', triggerBody()?['serviceAccountId'], ')')
    作業指示書の種類 concat('/msdyn_workordertypes(', triggerBody()?['workOrderTypeId'], ')')
    価格表 concat('/pricelevels(', triggerBody()?['priceListId'], ')')
    システムステータス 690970000 (スケジュールなし)
    手順 @{triggerBody()?['instructions']}
  5. 必要に応じて、 応答 アクションを追加して、新しい作業指示書 ID を呼び出し元システムに返します。

    1. [+ 新しいステップ] を選択し、[応答] を検索します (要求コネクタから)。
    2. 状態コード200に設定します。
    3. [本文] フィールドで、動的コンテンツ アイコンを選択し、[新しい行の追加] ステップからmsdyn_workorderidを選択します。 これは、先ほど作成された作業指示書の一意の ID です。

    この手順がないと、呼び出し元システムは応答を受信せず、HTTP 要求は待機後にタイムアウトします。 このステップを追加すると、フローが完了するとすぐに、呼び出し元システムは作業指示書 ID を含む 200 応答を受け取ります。

[システム状態] オプションの設定値

フローまたは API 呼び出しで システム状態 を設定する場合は、次の整数値を使用します。

ラベル 価値
スケジュールなし 690970000
スケジュール 690970001
進行中で 690970002
完了 690970003
転記済み 690970004
取り消し済み 690970005

考慮事項

Flow接続アカウントの所有権

フローによって作成された作業指示書は、Dataverse コネクタで使用される接続アカウントによって所有されます。 このアカウントに適切なセキュリティ ロールがあり、フローによって作成された作業指示書が予想されるビューとキューに表示されることを確認します。

子レコード

[ 新しい行の追加] アクションでは、作業指示書ヘッダーのみが作成されます。 作業指示書製品、サービス、またはサービス タスクを追加するには、子テーブル (msdyn_workorderproductmsdyn_workorderservice) ごとにmsdyn_workorderservicetaskステップを追加し、作業指示書ルックアップ フィールドを作成ステップによって返される ID に設定します。

API レートの制限

Power Automate フローには、Dataverse API の制限が適用されます。 大量のシナリオの場合は、 Dataverse Web API バッチ エンドポイント を使用するか、バッチ処理でスケジュールされたトリガーを使用してフロー実行を分散することを検討してください。

作業指示書の重複を回避する

フローが同じトリガーで頻繁に実行される場合は、新しいトリガーを作成する前に、作業指示書が既に存在するかどうかを確認する条件を追加します。 ソース レコード ID でフィルター処理された 行の一覧表示 アクションを使用して、既存の作業指示を確認します。

エラー処理

運用フローの場合は、[スコープ] アクションで [新しい行の追加] ステップをラップし、実行するように構成された並列ブランチを追加できませんでした。 この分岐を使用して、エラーをログに記録するか、通知を送信します。 HTTP によってトリガーされるフローの場合は、呼び出し元システムがタイムアウトではなく成功または失敗状態コードを受け取るように、常に 応答 アクションを追加します。

次のステップ