使用 Power Automate 建立工作訂單

你可以在 Dynamics 365 Field Service 中使用 Power Automate 流程自動建立工作訂單。 當需要根據外部觸發器建立工作訂單時,例如物聯網警示、表單提交、來自其他系統的服務請求,或相關紀錄的變更,這非常有用。

Power Automate流程使用 Microsoft Dataverse連接器與現場服務紀錄互動。 關於如何透過程式碼建立工作訂單,請前往使用 Dataverse Web API 建立工作訂單。

必要條件

  • 大多數 Dynamics 365 授權都包含 Power Automate 授權。
  • 流程的連線帳戶須指派下列至少一個 Field Service 安全性角色。 了解更多請參閱 設定使用者與安全角色。
    • Field Service - 調度員
    • Field Service - 管理員
  • 您的工作訂單流程所使用的查詢欄位的現有紀錄:
    • 工作訂單類型 (msdyn_workordertype 實體)
    • 價目表 (pricelevel 實體),如果程序需要的話
    • 服務帳戶 (account 實體),如果所選工作訂單類型需要服務帳戶,或你想要帳戶衍生的上下文

選項一:當 Dataverse 記錄變更時建立工作訂單

使用此模式來建立工作訂單,以因應其他 Dataverse 資料表的變更,例如當客戶資產的狀態發生變更時。

設定觸發器

  1. 在 Power Automate 中,選擇 建立>自動化雲端流程。

  2. 搜尋並選取新增、修改或刪除資料列時 (Microsoft Dataverse 連接器)。

  3. 當被要求時,請使用你的Dynamics 365憑證登入 Microsoft Dataverse 連接器。 如果您已建立連線至自己的環境,請從下拉式清單中選取該連線。 觸發器的設定欄位只有建立活躍連線後才會被填入。

  4. 設定觸發器:

    領域 Value
    變更類型 已修改
    資料表名稱 客戶資產
    範圍 組織
  5. 可選擇性地加入 Filter 列 條件,限制流量運行時間。 例如: msdyn_operationalstatus eq 690970001 (需要服務)。

提示

若要在不變更 Dataverse 記錄的情況下測試工單建立步驟,請複製一份流程,並將 Dataverse 觸發程序換成手動觸發流程。 新增輸入參數(例如服務帳戶 ID、工作訂單類型 ID 和價目表 ID 的文字輸入),這樣你執行流程時就能通過測試值。 確認工單能正確建立之後,再將正式流程切回使用 Dataverse 觸發程序。

新增「建立工作訂單」的動作

  1. 選擇 + 新步驟,並搜尋 新增一列(Microsoft Dataverse連接器)。

  2. 選取與觸發程序相同的 Dataverse 連線。 表格名稱欄位僅在選擇連線後才會出現。

  3. 將 資料表名稱 設為 工作訂單。

  4. 填寫必填欄位:

    領域 Value
    工單號碼 將表達式 guid() 作為佔位符輸入。 工作訂單號碼欄位是 Dataverse 連接器使用者介面 (UI) 所必需的,但 Field Service 的自動編號外掛會在儲存紀錄時自動分配正確的連續工作訂單號碼。 要輸入表達式,選擇欄位,切換到動態內容面板中的 表達 式標籤,輸入 guid(),然後選擇 確定。
    服務帳戶 僅在所選工作單類型需要服務帳戶時才需要。 使用搜尋欄位選取帳戶,如果您需要使用硬式編碼或動態 GUID,請在運算式索引標籤中輸入運算式 concat('/accounts(', 'service-account-guid', ')')。 對於不需要服務帳戶且工作訂單使用其他服務上下文的工作訂單類型,請留空此欄位。
    工單類型 使用搜尋欄位選擇工作訂單類型,若需要使用硬編碼或動態 GUID,則可在concat('/msdyn_workordertypes(', 'work-order-type-guid', ')')標籤中輸入。 請參考下方如何找到這些資訊。
    價目表 使用搜尋欄選取價格清單,或若需要使用硬編碼或動態 GUID,則在concat('/pricelevels(', 'your-price-list-guid', ')')標籤頁中輸入。 如果您在 For each 迴圈內使用列出資料列動作動態擷取價目表,請改用 concat('/pricelevels(', items('YourLoopName')?['pricelevelid'], ')'),並將 YourLoopName 替換為您迴圈的名稱。 請參考下方如何找到這些資訊。
    系統狀態 690970000 (未排定)
    應稅 false
    指示 使用觸發器中的動態內容,例如資產名稱

    服務帳號:直接在 服務帳號 欄位輸入帳號名稱以搜尋並選擇。 如果觸發條件是客戶資產變更,且資產連結到帳戶,你可以從動態內容面板選擇帳戶(客戶資產)。 如果你需要直接使用 GUID,請到 Field Service 的 服務 區 >客戶>帳戶 ,打開帳戶,並從瀏覽器 URL 複製記錄 ID(介於 %7B 和 %7D之間的值,若 URL 未編碼則為純 GUID)。 在 「設定工作訂單的服務帳戶需求」中了解更多。

    工作訂單類型:直接在 工作訂單類型 欄位輸入工作訂單類型名稱以搜尋並選擇。 如果你需要直接使用 GUID,請到 Field Service 的設定區>「工作訂單>工作訂單類型」,打開工作訂單類型,並從瀏覽器網址複製記錄 ID。

    價目表:直接在 價目表 欄位輸入價目表名稱,搜尋並選擇。 如果你需要直接使用 GUID,請到 Field Service 的設定>>一般價格表,打開價格表,並從瀏覽器網址複製記錄 ID。

    備註

    Dataverse 連接器要求查找欄位必須使用 OData 實體參考路徑(例如 /accounts(guid)),而非一般的 GUID。 直接輸入裸 GUID 會在執行階段導致 ODataUnrecognizedPathException。 concat上述表達式構造正確的路徑格式。

  5. 儲存並測試工作流程。

選項二:從 HTTP 請求建立工作訂單

使用此模式從外部系統(如客戶入口網站、工單系統或物聯網平台)建立工作訂單。

設定觸發器

  1. 在Power Automate中,選擇 建立>即時雲端流程。

  2. 命名流程,並選擇 當收到 HTTP 請求 作為觸發條件。

  3. 選擇創建。

  4. 在 請求主體 JSON 架構 欄位,貼上以下結構:

    {
      "type": "object",
      "properties": {
        "serviceAccountId": { "type": "string" },
        "workOrderTypeId": { "type": "string" },
        "priceListId": { "type": "string" },
        "instructions": { "type": "string" }
      },
      "required": ["workOrderTypeId", "priceListId"]
    }
    

    當所選的工作訂單類型需要服務帳戶,或當您希望工作訂單使用帳戶衍生的內容時,請包含 serviceAccountId。 對於不需要服務帳號的工作訂單類型,可以省略。

  5. 關於 誰可以觸發流程,請選擇以下選項之一:

    選項 何時使用
    只有我的租戶中的使用者 建議用於正式環境。 來電者必須使用 Microsoft Entra ID 驗證並出示有效的 OAuth 持有人令牌。 將此用於內部系統或受信任的服務主體。
    任何人 URL 本身就是憑證——不需要額外的認證標頭。 只有在呼叫系統無法取得 Entra ID 令牌且能確保 URL 安全儲存時才使用。

    欲了解更多有關保護 HTTP 觸發的流程,請參閱 為 HTTP 請求觸發添加 OAuth 驗證。

  6. HTTP URL 欄位是唯讀的——不要填入。 Power Automate 會在你第一次儲存流程時自動填滿該欄位。

  7. 儲存流程。 HTTP URL 欄位現在已填入端點 URL。 複製這個網址並提供給負責設定外部系統的人(例如開發者或系統管理員)。 外部系統會透過向這個 URL 發送 HTTP POST 請求,並附上與你定義的結構相符的 JSON 主體,來觸發流程。 例如:

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

    每次外部系統發送此請求時,Power Automate 會執行流程並在現場服務中建立工作訂單。

新增「建立工作訂單」的動作

  1. 選擇 + 新步驟,並搜尋 新增一列(Microsoft Dataverse連接器)。

  2. 登入 Microsoft Dataverse 連接器或選擇現有連線。 表格名稱欄位僅在選擇連線後才會出現。

  3. 將 資料表名稱 設為 工作訂單。

  4. 將 HTTP 請求主體欄位對應到工作訂單欄位:

    工作訂單欄位 Value
    工單號碼 將表達式 guid() 作為佔位符輸入。 工作訂單號碼欄位是 Dataverse 連接器使用者介面 (UI) 所必需的,但 Field Service 的自動編號外掛會在儲存紀錄時自動分配正確的連續工作訂單號碼。 要輸入表達式,選擇欄位,切換到動態內容面板中的 表達 式標籤,輸入 guid(),然後選擇 確定。
    服務帳戶 僅在已提供 concat('/accounts(', triggerBody()?['serviceAccountId'], ')') 時使用 serviceAccountId。 如果所選工作訂單類型不需要服務帳戶,且請求中不包含 serviceAccountId,請不要映射此查詢欄位。
    工單類型 concat('/msdyn_workordertypes(', triggerBody()?['workOrderTypeId'], ')')
    價目表 concat('/pricelevels(', triggerBody()?['priceListId'], ')')
    系統狀態 690970000 (未排定)
    指示 @{triggerBody()?['instructions']}
  5. 可選擇性地新增 回應 動作,將新的工作訂單 ID 回傳給呼叫系統:

    1. 選擇 + 新步驟,並從請求連接器搜尋回應。
    2. 將 狀態碼 設為 200。
    3. 在 Body 欄位,選擇動態內容圖示,從新增一列步驟中選擇msdyn_workorderid。 這是剛建立的工作訂單的唯一 ID。

    若無此步驟,呼叫系統將接收不到回應,HTTP 請求在等待後即逾時。 如果你新增這個步驟,呼叫系統會在流程完成後立即收到 200 帶有工作單 ID 的回應。

系統狀態選項集的值

在設定流程或 API 呼叫中的 系統狀態 時,請使用這些整數值。

標籤 Value
未排程 690970000
已排程 690970001
進行中 690970002
已完成 690970003
已過帳 690970004
已取消 690970005

考慮事項

流程連線帳戶的擁有權

由流程建立的工單,擁有者為 Dataverse 連接器所使用的連線帳戶。 確保此帳號擁有正確的安全角色,且流程所建立的工作訂單會出現在預期的檢視與佇列中。

兒童紀錄

新增一列操作只會建立工作訂單標頭。 若要新增工作訂單產品、服務或服務任務,請為每個子資料表新增一 列 步驟(msdyn_workorderproduct, msdyn_workorderservice, msdyn_workorderservicetask),並將 工作訂單 查詢欄位設定為建立步驟回傳的 ID。

API 速率限制

Power Automate 的流程受 Dataverse API 限制。 對於高流量情境,可以考慮使用 Dataverse Web API 批次端點,或使用排程觸發器和批次處理來分散流程執行。

避免重複的工作訂單

如果流程經常在相同的觸發條件下執行,請加入條件,在建立新的工單前檢查工單是否已存在。 使用列出資料列動作並以來源記錄的識別碼篩選,即可檢查是否已有工單。

錯誤處理

正式流程請將新增資料列步驟包在範圍動作裡,並新增一個設為失敗時執行的平行分支。 使用此分支來記錄錯誤或發送通知。 以 HTTP 觸發的流程請務必加上回應動作,讓呼叫端系統能收到成功或失敗的狀態碼,而不會逾時。

後續步驟