Làm việc với dòng đám mây bằng mã
Tất cả các luồng được lưu trữ trong Dataverse và bạn có thể sử dụng Dataverse SDK cho .NET hoặc Web API để quản lý chúng.
Bài viết này đề cập đến việc quản lý các luồng được bao gồm trong tab Giải pháp trong Power Automate. Hiện tại, việc quản lý luồng trong Luồng của tôi không được hỗ trợ bằng mã.
Tương tác với Dataverse API
Dataverse cung cấp các khả năng tương đương bằng cách sử dụng Dataverse SDK cho .NET hoặc Web API.
Tôi nên sử dụng phương pháp nào?
Phương pháp tốt nhất phụ thuộc vào công nghệ dự án và các kỹ năng bạn có.
Nếu dự án của bạn sử dụng .NET, chúng tôi khuyên bạn nên sử dụng SDK. SDK đơn giản hóa trải nghiệm phát triển của bạn bằng cách cung cấp mô hình đối tượng được gõ và các phương thức để xác thực.
Thông tin thêm: Sử dụng dịch vụ Tổ chức
Làm thế nào để kết nối?
Cách kết nối phụ thuộc vào việc bạn đang sử dụng Dataverse SDK cho .NET hay Web API.
Với SDK, bạn cần kết nối với ứng dụng khách để có quyền truy cập vào phiên bản IOrganizationService . IOrganizationService
là một giao diện cung cấp các phương pháp bạn có thể sử dụng để tương tác với Dataverse.
Thông tin khác:
Bảng quy trình làm việc
Luồng đám mây được lưu trữ trong bảng Quy trình (Luồng công việc) được biểu thị trong Web API dưới dạng Thực thể luồng công việc
Bảng sau đây mô tả các cột quan trọng trong bảng quy trình làm việc:
Tên Logic | Loại | Description |
---|---|---|
category |
Nhóm chọn | Thể loại của dòng chảy. Sau đây là các danh mục khác nhau. 0 - Quy trình làm việc cổ điển. Dataverse 1 - Hộp thoại cổ điển. Dataverse 2 - Quy tắc kinh doanh. 3 - Hành động cổ điển. Dataverse 4 - Luồng quy trình kinh doanh. 5 - Dòng chảy hiện đại (Luồng tự động, tức thời hoặc theo lịch trình).6 - Luồng máy tính để bàn. |
clientdata |
String | Chuỗi JSON được mã hóa của định nghĩa luồng và connectionReferences của nó. |
createdby |
Tra cứu | Người dùng đã tạo ra luồng. |
createdon |
Ngày giờ | Ngày tạo luồng. |
description |
String | Mô tả luồng do người dùng cung cấp. |
ismanaged |
Bool | Chỉ ra liệu luồng có được cài đặt thông qua giải pháp được quản lý hay không. |
modifiedby |
Tra cứu | Người dùng cuối cùng cập nhật luồng. |
modifiedon |
Ngày giờ | Lần cuối cùng luồng được cập nhật. |
name |
String | Tên hiển thị mà bạn đã đặt cho luồng. |
ownerid |
Tra cứu | Người dùng hoặc nhóm sở hữu luồng. |
statecode |
Nhóm chọn | Trạng thái của luồng. Trạng thái có thể là:0 - Bản nháp (Tắt)1 - Đã kích hoạt (Bật)2 - Cấm. |
type |
Nhóm chọn | Chỉ ra liệu luồng có phải là luồng đang chạy hay là mẫu có thể được sử dụng để tạo thêm nhiều luồng khác. 1 - Sự định nghĩa,2 - Kích hoạt3 - Bản mẫu. |
workflowid |
Guid | Mã định danh duy nhất cho dòng đám mây trên tất cả các lần nhập. |
workflowidunique |
Guid | Mã định danh duy nhất cho cài đặt luồng này. |
Lưu ý
Với Web API, giá trị tra cứu là thuộc tính điều hướng có giá trị đơn có thể mở rộng để lấy thông tin chi tiết từ hồ sơ liên quan.
Các cột tra cứu cũng có GUID tương ứng tra cứu thuộc tính có thể được sử dụng trong truy vấn. Thuộc tính tra cứu có quy ước đặt tên như sau: _<logical name>_value
. Đối với loại thực thể quy trình công việc trong Web API, bạn có thể tham chiếu các thuộc tính tra cứu sau: _createdby_value
, _modifiedby_value
, Và _ownerid_value
.
Liệt kê dòng
Để lấy danh sách các luồng đám mây, bạn có thể truy vấn bảng quy trình công việc. Truy vấn sau đây trả về luồng tự động, tức thời hoặc theo lịch trình đầu tiên hiện đang 'bật':
Tĩnh này OutputFirstActiveFlow
phương pháp này yêu cầu một máy khách được xác thực thực hiện IOrganizationService. Nó sử dụng IOrganizationService.RetrieveMultiple phương pháp.
/// <summary>
/// Outputs the first active flow
/// </summary>
/// <param name="service">Authenticated client implementing the IOrganizationService interface</param>
public static void OutputFirstActiveFlow(IOrganizationService service)
{
var query = new QueryExpression("workflow")
{
ColumnSet = new ColumnSet("category",
"createdby",
"createdon",
"description",
"ismanaged",
"modifiedby",
"modifiedon",
"name",
"ownerid",
"statecode",
"type",
"workflowid",
"workflowidunique"),
Criteria = new FilterExpression(LogicalOperator.And)
{
Conditions = {
{ new ConditionExpression(
"category",
ConditionOperator.Equal,
5) }, // Cloud Flow
{ new ConditionExpression(
"statecode",
ConditionOperator.Equal,
1) } // Active
}
},
TopCount = 1 // Limit to one record
};
EntityCollection workflows = service.RetrieveMultiple(query);
Entity workflow = workflows.Entities.FirstOrDefault();
Console.WriteLine($"category: {workflow.FormattedValues["category"]}");
Console.WriteLine($"createdby: {workflow.FormattedValues["createdby"]}");
Console.WriteLine($"createdon: {workflow.FormattedValues["createdon"]}");
// Description may be null
Console.WriteLine($"description: {workflow.GetAttributeValue<string>("description")}");
Console.WriteLine($"ismanaged: {workflow.FormattedValues["ismanaged"]}");
Console.WriteLine($"modifiedby: {workflow.FormattedValues["modifiedby"]}");
Console.WriteLine($"modifiedon: {workflow.FormattedValues["modifiedon"]}");
Console.WriteLine($"name: {workflow["name"]}");
Console.WriteLine($"ownerid: {workflow.FormattedValues["ownerid"]}");
Console.WriteLine($"statecode: {workflow.FormattedValues["statecode"]}");
Console.WriteLine($"type: {workflow.FormattedValues["type"]}");
Console.WriteLine($"workflowid: {workflow["workflowid"]}");
Console.WriteLine($"workflowidunique: {workflow["workflowidunique"]}");
}
Để lấy thêm hồ sơ, hãy xóa Số lượng hàng đầu giới hạn.
Đầu ra
category: Modern Flow
createdby: SYSTEM
createdon: 5/20/2020 9:37 PM
description:
ismanaged: Unmanaged
modifiedby: Kiana Anderson
modifiedon: 5/6/2023 3:37 AM
name: When an account is updated -> Create a new record
ownerid: Monica Thomson
statecode: Activated
type: Definition
workflowid: d9e875bf-1c9b-ea11-a811-000d3a122b89
workflowidunique: c17af45c-10a1-43ca-b816-d9cc352718cf
Thông tin khác:
Tạo dòng đám mây
Các thuộc tính bắt buộc đối với luồng tự động, tức thời và theo lịch trình là: category
, name
, type
, primaryentity
, Và clientdata
. Sử dụng none
cho primaryentity
cho các loại luồng này.
Phương pháp tĩnh này yêu cầu một máy khách được xác thực thực hiện IOrganizationService. Nó sử dụng IOrganizationService.Tạo phương pháp.
/// <summary>
/// Creates a cloud flow
/// </summary>
/// <param name="service">Authenticated client implementing the IOrganizationService interface</param>
/// <returns>The workflowid</returns>
public static Guid CreateCloudFlow(IOrganizationService service)
{
var workflow = new Entity("workflow")
{
Attributes = {
{"category", new OptionSetValue(5) }, // Cloud flow
{"name", "Sample flow name"},
{"type", new OptionSetValue(1) }, //Definition
{"description", "This flow reads some data from Dataverse." },
{"primaryentity", "none" },
{"clientdata", "{\"properties\":{\"connectionReferences\":{\"shared_commondataserviceforapps\":{\"impersonation\":{},\"runtimeSource\":\"embedded\",\"connection\":{\"name\":\"shared-commondataser-114efb88-a991-40c7-b75f-2693-b1ca6a0c\",\"connectionReferenceLogicalName\":\"crdcb_sharedcommondataserviceforapps_109ea\"},\"api\":{\"name\":\"shared_commondataserviceforapps\"}}},\"definition\":{\"$schema\":\"https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#\",\"contentVersion\":\"1.0.0.0\",\"parameters\":{\"$connections\":{\"defaultValue\":{},\"type\":\"Object\"},\"$authentication\":{\"defaultValue\":{},\"type\":\"SecureObject\"}},\"triggers\":{\"manual\":{\"metadata\":{\"operationMetadataId\":\"76f87a86-89b3-48b4-92a2-1b74539894a6\"},\"type\":\"Request\",\"kind\":\"Button\",\"inputs\":{\"schema\":{\"type\":\"object\",\"properties\":{},\"required\":[]}}}},\"actions\":{\"List_rows\":{\"runAfter\":{},\"metadata\":{\"operationMetadataId\":\"9725b30f-4a8e-4695-b6fd-9a4985808809\"},\"type\":\"OpenApiConnection\",\"inputs\":{\"host\":{\"apiId\":\"/providers/Microsoft.PowerApps/apis/shared_commondataserviceforapps\",\"connectionName\":\"shared_commondataserviceforapps\",\"operationId\":\"ListRecords\"},\"parameters\":{\"entityName\":\"accounts\",\"$select\":\"name\",\"$top\":1},\"authentication\":\"@parameters('$authentication')\"}}}}},\"schemaVersion\":\"1.0.0.0\"}" }
}
};
return service.Create(workflow);
}
Thông tin thêm: Tạo hàng bảng bằng cách sử dụng Dịch vụ tổ chức
statecode
Tất cả các luồng được tạo theo cách này đều được đặt thành 0
(Bản nháp hoặc 'Tắt'). Luồng cần được bật trước khi có thể sử dụng.
Thuộc tính quan trọng nhất là clientdata
, chứa connectionReferences
mà luồng sử dụng và định nghĩa của luồng. connectionReferences
Là các ánh xạ tới từng kết nối mà luồng sử dụng.
{
"properties": {
"connectionReferences": {
"shared_commondataserviceforapps": {
"runtimeSource": "embedded",
"connection": {},
"api": {
"name": "shared_commondataserviceforapps"
}
}
},
"definition": {
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"$connections": { "defaultValue": {}, "type": "Object" },
"$authentication": { "defaultValue": {}, "type": "SecureObject" }
},
"triggers": {
"manual": {
"metadata": {},
"type": "Request",
"kind": "Button",
"inputs": {
"schema": { "type": "object", "properties": {}, "required": [] }
}
}
},
"actions": {
"List_rows": {
"runAfter": {},
"metadata": {},
"type": "OpenApiConnection",
"inputs": {
"host": {
"apiId": "/providers/Microsoft.PowerApps/apis/shared_commondataserviceforapps",
"connectionName": "shared_commondataserviceforapps",
"operationId": "ListRecords"
},
"parameters": {
"entityName": "accounts",
"$select": "name",
"$top": 1
},
"authentication": "@parameters('$authentication')"
}
}
}
}
},
"schemaVersion": "1.0.0.0"
}
Cập nhật dòng đám mây
Để cập nhật luồng, chỉ cần thiết lập các thuộc tính bạn muốn thay đổi.
Phương pháp tĩnh này yêu cầu một máy khách được xác thực thực hiện IOrganizationService. Nó sử dụng phương thức IOrganizationService.Update để cập nhật mô tả luồng và đặt chủ sở hữu.
/// <summary>
/// Updates a cloud flow
/// </summary>
/// <param name="service">Authenticated client implementing the IOrganizationService interface</param>
/// <param name="workflowid">The ID of the flow to update.</param>
/// <param name="systemuserid">The id of the user to assign the flow to.</param>
public static void UpdateCloudFlow(IOrganizationService service, Guid workflowid, Guid systemuserid) {
var workflow = new Entity("workflow",workflowid)
{
Attributes = {
{"description", "This flow will ensure consistency across systems." },
{"ownerid", new EntityReference("systemuser",systemuserid)},
{"statecode", new OptionSetValue(1) } //Turn on the flow.
}
};
service.Update(workflow);
}
Thông tin thêm: Cập nhật và xóa các hàng bảng bằng Dịch vụ tổ chức > Cập nhật cơ bản
Xóa dòng đám mây
Các ví dụ sau đây cho thấy cách xóa bản ghi quy trình công việc biểu thị dòng đám mây.
Phương thức DeleteCloudFlow
tĩnh xóa bản ghi quy trình công việc.
/// <summary>
/// Deletes a workflow
/// </summary>
/// <param name="service">Authenticated client implementing the IOrganizationService interface</param>
/// <param name="workflowId">The id of the cloud flow to delete.</param>
public static void DeleteCloudFlow(IOrganizationService service, Guid workflowId) {
service.Delete(entityName:"workflow",id: workflowId);
}
Thông tin thêm: Xóa bản ghi bằng SDK
Nhận tất cả người dùng được chia sẻ dòng đám mây
Sử dụng thông báo RetrieveSharedPrincipalsAndAccess
để nhận danh sách tất cả người dùng được chia sẻ dòng đám mây.
Với SDK, hãy sử dụng Lớp RetrieveSharedPrincipalsAndAccessRequest và với Web API, hãy sử dụng Hàm RetrieveSharedPrincipalsAndAccess.
Thông tin thêm: Nhận các hiệu trưởng có quyền truy cập vào hồ sơ
Chia sẻ hoặc bỏ chia sẻ dòng đám mây
Chia sẻ dòng đám mây như bất kỳ bản ghi nào khác bằng cách sử dụng Dataverse tin nhắn. GrantAccess
Với SDK, hãy sử dụng Lớp GrantAccessRequest và với Web API, hãy sử dụng Hành động GrantAccess. Thông tin thêm: Ví dụ GrantAccess
Nếu bạn muốn thay đổi quyền truy cập được cấp khi chia sẻ bản ghi, hãy sử dụng thông báo ModifyAccess
. Với SDK, hãy sử dụng Lớp ModifyAccessRequest và với Web API, hãy sử dụng Hành động ModifyAccess. Thông tin thêm: Ví dụ về ModifyAccess
Để hủy chia sẻ một bản ghi, hãy sử dụng thông báo RevokeAccess
. Với SDK, hãy sử dụng Lớp RevokeAccessRequest và với Web API, hãy sử dụng Hành động RevokeAccess. Thông tin thêm: Thu hồi quyền truy cập
Luồng xuất khẩu
Khi luồng là một phần của giải pháp, bạn có thể xuất luồng đó bằng cách xuất giải pháp có chứa luồng đó bằng cách sử dụng thông báo ExportSolution
.
Phương pháp tĩnh ExportSolution
ví dụ sau đây sử dụng ExportSolutionRequest để truy xuất byte[]
chứa tệp ZIP của giải pháp không được quản lý với UniqueName được chỉ định.
/// <summary>
/// Exports an unmanaged solution
/// </summary>
/// <param name="service">Authenticated client implementing the IOrganizationService interface</param>
/// <param name="solutionUniqueName">The uniquename of the solution.</param>
/// <returns></returns>
public static byte[] ExportSolution(
IOrganizationService service,
string solutionUniqueName)
{
ExportSolutionRequest request = new() {
SolutionName = solutionUniqueName,
Managed = false
};
var response = (ExportSolutionResponse)service.Execute(request);
return response.ExportSolutionFile;
}
Luồng nhập khẩu
Khi bạn có tệp ZIP giải pháp, bạn có thể nhập tệp đó bằng cách sử dụng thông báo ImportSolution
.
Khi bạn nhập luồng, bạn nên thiết lập các tham số sau:
Tên thuộc tính | Description |
---|---|
OverwriteUnmanagedCustomizations |
Nếu có các phiên bản hiện tại của các luồng này trong Dataverse, cờ này cần được đặt thành true để nhập chúng. Nếu không, chúng sẽ không bị ghi đè. |
PublishWorkflows |
Chỉ ra liệu quy trình công việc cổ điển có được kích hoạt khi nhập hay không. Dataverse Thiết lập này không áp dụng cho các loại luồng khác. |
CustomizationFile |
Tệp zip được mã hóa theo chuẩn base 64 có chứa giải pháp. |
Phương pháp ImportSolution
sample tĩnh cho thấy cách nhập tệp giải pháp bằng cách sử dụng Lớp ImportSolutionRequest
/// <summary>
/// Imports a solution.
/// </summary>
/// <param name="service">Authenticated client implementing the IOrganizationService interface</param>
/// <param name="solutionFile">The byte[] data representing a solution file. </param>
public static void ImportSolution(
IOrganizationService service,
byte[] solutionFile) {
ImportSolutionRequest request = new() {
OverwriteUnmanagedCustomizations = true,
CustomizationFile = solutionFile
};
service.Execute(request);
}
Câu hỏi thường gặp
Còn API tại api.flow.microsoft.com thì sao?
API tại api.flow.microsoft.com không được hỗ trợ. Thay vào đó, khách hàng nên sử dụng Dataverse API Web cho Power Automate đã được ghi lại trước đó trong bài viết này.
Ngoài ra, khách hàng có thể sử dụng các trình kết nối quản lý: Power Automate Quản lý hoặc Power Automate dành cho Quản trị viên.
Khách hàng có thể sử dụng các API không được hỗ trợ api.flow.microsoft.com
với rủi ro của riêng họ. Các API này có thể thay đổi nên có thể xảy ra những thay đổi đột ngột.
Thông tin liên quan
Các hoạt động của lớp thực thể sử dụng dịch vụ Tổ chức
Thực hiện các hoạt động bằng cách sử dụng Web API
Chia sẻ và chỉ định
Xác minh quyền truy cập trong mã
Làm việc với các giải pháp sử dụng Dataverse Bộ công cụ phát triển phần mềm