ทำงานกับโฟลว์เดสก์ท็อปโดยใช้โค้ด
นักพัฒนาสามารถเพิ่มฟังก์ชัน โฟลว์เดสก์ท็อป ไปยังแอปพลิเคชันของพวกเขา รวมถึงการทริกเกอร์และยกเลิกโฟลว์เดสก์ท็อปโดยทางโปรแกรม ความสามารถเหล่านี้เป็นส่วนหนึ่งของแพลตฟอร์ม Microsoft Dataverse
ข้อกำหนดเบื้องต้น
- ความรู้ของ Dataverse Web APIรับรองความถูกต้องด้วย Dataverse และ การใช้ OAuth กับ Dataverse
- ความรู้ของแนวสภาพแวดล้อมและองค์กรของ Dataverse และ วิธีดึง URL องค์กร ด้วยตนเอง หรือโดยทางโปรแกรม
- ความรู้ของ แนวคิดโฟลว์เดสก์ท็อป และของสิ่งที่ การเชื่อมต่อและวิธีสร้าง
Important
ในบทความนี้ คุณต้องแทนที่วงเล็บเหลี่ยมทั้งหมด [...] ใน URL และข้อมูลอินพุต/เอาต์พุต ด้วยค่าเฉพาะในสถานการณ์ของคุณ
รายการโฟลว์เดสก์ท็อปที่พร้อมใช้งาน
สคริปต์โฟลว์เดสก์ท็อปทั้งหมดอยู่ใน Dataverse เป็นส่วนหนึ่งของ เอนทิตีเวิร์กโฟลว์
กรองรายการเวิร์กโฟลว์ตามหมวดหมู่เพื่อระบุโฟลว์เดสก์ท็อป
ร้องขอโฟลว์เดสก์ท็อป
Authorization: Bearer eyJ0eXAiOi...
Accept: application/json
GET https://[Organization URI]/api/data/v9.2/workflows?$filter=category+eq+6&$select=name,workflowid&$orderby=name HTTP/1.1
ตอบสนองต่อคำขอรับโฟลว์เดสก์ท็อป
{
"@odata.context": "https://[Organization URI]/api/data/v9.2/$metadata#workflows(name,workflowid)",
"value": [
{
"@odata.etag": "W1069462",
"name": "Desktop flow 1",
"workflowid": "f091ffab-58bb-4630-a115-659453d56f59",
},
{
"@odata.etag": "W1028555",
"name": "Desktop flow 2",
"workflowid": "eafba1a2-e8d4-4efa-b549-11d4dfd9a3d1",
}
]
}
รับสคีมาสำหรับโฟลว์เดสก์ท็อป
หากคุณต้องการดึงข้อมูลโฟลว์สคีมาสำหรับอินพุตและ/หรือเอาต์พุต คุณสามารถใช้ฟิลด์ clientData สำหรับเวิร์กโฟลว์เป้าหมายได้
ร้องขอสคีมาสำหรับโฟลว์เดสก์ท็อป
Authorization: Bearer eyJ0eXAiOi...
Accept: application/json
GET https://[Organization URI]/api/data/v9.2/workflows([Workflow Id])/clientdata/$value HTTP/1.1
ตอบสนองต่อคำขอรับสคีมาของโฟลว์เดสก์ท็อป
{
"clientversion": "2.19.00170.22097",
"properties": {
"definition": {
"dependencies": [],
"isvalid": true,
"name": "Desktop Flow 1",
"package": "UEsDBBQAAAAIAIqZlF...",
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#"
},
"inputs": {
"schema": {
"properties": {
"Input1": {
"default": "",
"description": "",
"format": null,
"title": "Input 1",
"type": "string",
"value": "0"
},
"Input2": {
"default": "",
"description": "",
"format": null,
"title": "Input2",
"type": "string",
"value": ""
}
},
"type": "object"
}
},
"outputs": {
"schema": {
"properties": {
"Output1": {
"default": "",
"description": "",
"format": null,
"title": "Output",
"type": "string",
"value": null
}
},
"type": "object"
}
}
},
"schemaversion": "ROBIN_20211012",
"targets": {
"schema": {
"properties": {},
"type": "object"
}
}
}
รับสถานะของการเรียกใช้โฟลว์เดสก์ท็อป
Dataverse เก็บการเรียกใช้โฟลว์เดสก์ท็อปทั้งหมดใน เอนทิตีเซสชันโฟลว์
ร้องขอสถานะของการเรียกใช้โฟลว์เดสก์ท็อป
Authorization: Bearer eyJ0eXAiOi...
Accept: application/json
GET https://[Organization URI]/api/data/v9.2/flowsessions([Flow session ID])?$select=statuscode,statecode,startedon,completedon HTTP/1.1
ตอบสนองต่อสถานะของการเรียกใช้โฟลว์เดสก์ท็อป
{
"@odata.context": "https://[Organization URI]/api/data/v9.2/$metadata#flowsessions(statuscode,statecode,startedon,completedon)/$entity",
"@odata.etag": "W1276122",
"statuscode": 8,
"statecode": 0,
"startedon": "2022-06-16T12:54:40Z",
"completedon": "2022-06-16T12:57:46Z",
}
รับผลลัพธ์โฟลว์เดสก์ท็อป
ถ้าโฟลว์เดสก์ท็อปมีเอาต์พุต คุณสามารถสอบถามฟิลด์เอาต์พุตเพื่อเรียกข้อมูลเหล่านั้นได้
ร้องขอเอาต์พุตของโฟลว์เดสก์ท็อป
Authorization: Bearer eyJ0eXAiOi...
Accept: application/json
GET https://[Organization URI]/api/data/v9.2/flowsessions([Flow session ID])/outputs/$value HTTP/1.1
ตอบสนองต่อคำขอรับเอาต์พุตของโฟลว์เดสก์ท็อป
{
"Output1": "My output value"
}
ทริกเกอร์การเรียกใช้โฟลว์เดสก์ท็อป
โดยการใช้ Dataverse คุณสามารถเพิ่มฟังก์ชันการทำงานของการทริกเกอร์โฟลว์เดสก์ท็อปผ่านแอปพลิเคชันของคุณได้ ในการใช้ฟังก์ชันนี้ คุณต้องใช้ การดำเนินการ RunDesktopFlow
ในการเรียกการดำเนินการ คุณต้องมีข้อมูลต่อไปนี้
ID
ของโฟลว์เดสก์ท็อปที่คุณต้องการเรียกใช้ คุณสามารถรับ ID นี้ผ่าน API เป็นส่วนสรุป รายการโฟลว์เดสก์ท็อปที่พร้อมใช้งาน ตอนต้นในบทความนี้Tip
อีกวิธีหนึ่ง คุณสามารถดึง ID ด้วยตนเองจาก URL รายละเอียดโฟลว์เดสก์ท็อปใน Power Automate รูปแบบ URL คือ:
https://flow.microsoft.com/manage/environments/[Environment ID]/uiflows/[Desktop Flow ID]/details
สำหรับข้อมูลเพิ่มเติม ดูที่ จัดการโฟลว์เดสก์ท็อป
name
ของการเชื่อมต่อโฟลว์เดสก์ท็อป (กำหนดเครื่อง/กลุ่มเครื่องเป้าหมาย) เพื่อใช้ในการเรียกใช้โฟลว์ของคุณ สามารถเรียกชื่อได้จาก URL ของหน้าการเชื่อมต่อเดียวกันใน Power Automate รูปแบบ URL คือ:
https://flow.microsoft.com/manage/environments/[Environment ID]/connections?apiName=shared_uiflow&connectionName=[Connection Name]
Note
สำหรับข้อมูลเพิ่มเติม ดูที่ สร้างการเชื่อมต่อโฟลว์เดสก์ท็อป
Tip
หรือคุณสามารถใช้ชื่อตรรกะของการอ้างอิงการเชื่อมต่อเป็นอินพุตของการเชื่อมต่อแทนชื่อการเชื่อมต่อ (ตัวอย่างการใช้งานที่อธิบายไว้ด้านล่าง) การอ้างอิงการเชื่อมต่อจะจัดเก็บไว้ใน connectionreference ของตาราง Dataverse และสามารถแสดงรายการโดยทางโปรแกรมได้ในลักษณะเดียวกับโฟลว์เดสก์ท็อปที่ระบุรายละเอียดในส่วน แสดงรายการโฟลว์เดสก์ท็อปที่มีอยู่
สำหรับข้อมูลเพิ่มเติม ดูที่ ใช้การอ้างอิงการเชื่อมต่อในโซลูชัน และ การอ้างอิงตาราง/เอนทิตี connectionreference
คำขอเพื่อทริกเกอร์โฟลว์เดสก์ท็อป
Authorization: Bearer eyJ0eXAiOi...
Accept: application/json
POST https://[Organization URI]/api/data/v9.2/workflows([Workflow ID])/Microsoft.Dynamics.CRM.RunDesktopFlow HTTP/1.1
{
"runMode": "attended",
"runPriority": "normal",
"connectionName": "[Connection Name]",
"timeout": 7200,
"inputs": "{\"Input1\":\"Value\", \"Input2\":\"Value\"}"
}
ขอให้ทริกเกอร์โฟลว์เดสก์ท็อปด้วยการอ้างอิงการเชื่อมต่อ
Authorization: Bearer eyJ0eXAiOi...
Accept: application/json
POST https://[Organization URI]/api/data/v9.2/workflows([Workflow ID])/Microsoft.Dynamics.CRM.RunDesktopFlow HTTP/1.1
{
"runMode": "attended",
"runPriority": "normal",
"connectionName": "[Connection Reference Logical Name]",
"connectionType": 2,
"timeout": 7200,
"inputs": "{\"Input1\":\"Value\", \"Input2\":\"Value\"}"
}
ตอบสนองจากคำขอเพื่อทริกเกอร์โฟลว์เดสก์ท็อป
{
"@odata.context": "https://[Organization URI]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.RunDesktopFlowResponse",
"flowsessionId": "d9687093-d0c0-ec11-983e-0022480b428a"
}
Warning
เมื่อใช้ API มีข้อจำกัดบางประการที่ควรทราบ:
เมื่อทริกเกอร์การเรียกใช้โฟลว์เดสก์ท็อปโดยใช้ API อินพุตของสคริปต์จะไม่สามารถดูได้ในหน้ารายละเอียดการเรียกใช้บนพอร์ทัล Power Automate
เจ้าของเซสชันโฟลว์ที่แสดงถึงการเรียกใช้ถูกแมปกับเจ้าของเอนทิตีเวิร์กโฟลว์ที่แสดงโฟลว์เดสก์ท็อป มีข้อจำกัดบางประการเมื่อเรียกใช้ API บนเวิร์กโฟลว์ที่มีสิทธิ์การใช้งาน "ผู้ใช้": การยกเลิกการเรียกใช้และการสอบถามสถานะอาจถูกบล็อกเนื่องจากไม่มีสิทธิ์การใช้งานในเซสชันของโฟลว์
การเลียนแบบ Dataverse ไม่ได้รับการสนับสนุน
รับการแจ้งเตือนเมื่อสคริปต์เสร็จสิ้น
พารามิเตอร์ทางเลือก "callbackUrl" มีอยู่ในเนื้อความของ การดำเนินการ RunDesktopFlow คุณสามารถใช้ได้หากต้องการรับการแจ้งเตือนเมื่อสคริปต์ของคุณเสร็จสิ้น คำขอ POST จะถูกส่งไปยัง URL ที่ให้ไว้เมื่อสคริปต์เสร็จสมบูรณ์
ได้รับคำขอโดยตำแหน่งข้อมูลการติดต่อกลับ
User-Agent: EnterpriseConnectors/1.0
Content-type: application/json; charset=utf-8
x-ms-workflow-id: [Workflow ID]
x-ms-run-id: [Flow session ID]
POST [yourCallbackURL]
{
"statuscode": 4,
"statecode": 0,
"startedon": "2022-09-05T08:04:11Z",
"completedon": "2022-09-05T08:04:41Z",
"flowsessionid": "d9687093-d0c0-ec11-983e-0022480b428a"
}
หากไม่มีพารามิเตอร์ URL ติดต่อกลับ สถานะโฟลว์เซสชันควรถูกสำรวจจาก Dataverse (อ้างถึง รับสถานะของการเรียกใช้โฟลว์เดสก์ท็อป)
Note
- คุณยังสามารถใช้การสำรวจสถานะเป็นกลไกทางเลือกได้ แม้ว่าคุณจะระบุพารามิเตอร์ URL ติดต่อกลับ
- การดำเนินการตำแหน่งข้อมูล URL ติดต่อกลับของคุณควรเป็นเหตุเป็นผล
- คำขอ POST จะถูกลองใหม่สามครั้งด้วยช่วงเวลาหนึ่งวินาที ถ้าตำแหน่งข้อมูลของคุณตอบสนองด้วยการตอบสนองข้อผิดพลาดของเซิร์ฟเวอร์ (รหัส 500 ขึ้นไป) หรือการตอบสนอง "คำขอหมดเวลา" (รหัส 408)
ข้อกำหนดสำหรับพารามิเตอร์ URL ติดต่อกลับ
เซิร์ฟเวอร์ของคุณต้องมี TLS และชุดรหัส ปัจจุบัน
อนุญาตเฉพาะโปรโตคอล HTTPS เท่านั้น
ไม่อนุญาตให้เข้าถึง localhost (loopback)
ใช้ที่อยู่ IP ไม่ได้ คุณต้องใช้ที่อยู่เว็บที่มีชื่อซึ่งต้องมีการแก้ไขชื่อ DNS
เซิร์ฟเวอร์ของคุณต้องอนุญาตการเชื่อมต่อจาก ค่าที่อยู่ IP ของ Power Platform และบริการ Dynamics 365 ที่ระบุภายใต้แท็กบริการ AzureCloud
Tip
เนื่องจากการติดต่อกลับไม่ได้รับการยืนยัน จึงควรระมัดระวังเป็นพิเศษ
- ตรวจสอบความถูกต้องของรหัสเซสชันโฟลว์เมื่อได้รับการแจ้งเตือนการติดต่อกลับ Dataverse คือที่มาของความจริง
- ใช้กลยุทธ์การจำกัดอัตราบนฝั่งเซิร์ฟเวอร์ของคุณ
- พยายามจำกัดการแชร์ URL ติดต่อกลับระหว่างหลายองค์กร
ยกเลิกการเรียกใช้โฟลว์เดสก์ท็อป
คล้ายกับฟังก์ชัน ทริกเกอร์ คุณยังสามารถยกเลิกโฟลว์เดสก์ท็อปที่เข้าคิว/รันอยู่ได้ หากต้องการยกเลิกโฟลว์เดสก์ท็อป ให้ใช้ การดำเนินการ CancelDesktopFlowRun
คำขอเพื่อยกเลิกการเรียกใช้ร์โฟลว์เดสก์ท็อป
Authorization: Bearer eyJ0eXAiOi...
Accept: application/json
POST https://[Organization URI]/api/data/v9.2/flowsessions(d9687093-d0c0-ec11-983e-0022480b428a)/Microsoft.Dynamics.CRM.CancelDesktopFlowRun HTTP/1.1
ตอบสนองจากคำขอเพื่อยกเลิกโฟลว์เดสก์ท็อป
HTTP/1.1 204 No Content
ข้อผิดพลาด
เมื่อเกิดข้อผิดพลาด การตอบสนองจะมีรูปแบบต่างๆ ที่ตรงกับข้อความแสดงข้อผิดพลาด Dataverse รหัสข้อผิดพลาด http และข้อความควรให้ข้อมูลที่เพียงพอเพื่อทำความเข้าใจปัญหา
HTTP/1.1 403 Forbidden
{
"error": {
"code": "0x80040220",
"message": " Principal user (Id=526..., type=8) is missing prvReadworkflow privilege (Id=88...*)”
}
}
Note
บอกให้เราทราบเกี่ยวกับภาษาที่คุณต้องการในคู่มือ ทำแบบสำรวจสั้นๆ (โปรดทราบว่าแบบสำรวจนี้เป็นภาษาอังกฤษ)
แบบสำรวจนี้ใช้เวลาทำประมาณเจ็ดนาที ไม่มีการเก็บข้อมูลส่วนบุคคล (คำชี้แจงสิทธิ์ส่วนบุคคล)