Kerja dengan aliran awan menggunakan kod
Semua aliran disimpan dan Dataverse anda boleh menggunakan sama ada Dataverse SDK untuk .NET atau API Web untuk menguruskannya.
Artikel ini merangkumi pengurusan aliran yang disertakan pada tab Penyelesaian Power Automate. Pada masa ini, menguruskan aliran di bawah Aliran Saya tidak disokong dengan kod.
Berinteraksi dengan Dataverse API
Dataverse menyediakan keupayaan setara menggunakan sama ada Dataverse SDK untuk .NET atau API Web.
Kaedah manakah yang patut saya gunakan?
Kaedah terbaik bergantung kepada teknologi projek dan kemahiran yang anda miliki.
Jika projek anda menggunakan .NET, kami mengesyorkan menggunakan SDK. SDK memudahkan pengalaman pembangunan anda dengan menyediakan model dan kaedah objek bertaip untuk mengesahkan.
Maklumat lanjut: Gunakan perkhidmatan Organisasi
Bagaimana hendak menyambung?
Cara menyambung bergantung pada sama ada anda menggunakan Dataverse SDK untuk .NET atau API Web.
Dengan SDK, anda perlu berhubung dengan aplikasi pelanggan untuk mendapatkan akses kepada contoh IOrganizationService . IOrganizationService
adalah antara muka yang menyediakan kaedah yang boleh anda gunakan untuk berinteraksi Dataverse.
Maklumat lanjut:
Jadual aliran kerja
Aliran awan disimpan dalam jadual Proses (Aliran Kerja) yang diwakili dalam API Web sebagai Entiti aliran kerjaJenis
Jadual berikut menerangkan lajur penting dalam jadual aliran kerja:
Nama Logik | Jenis | Description |
---|---|---|
category |
Pilihan | Kategori aliran. Berikut adalah kategori yang berbeza. 0 - Aliran kerja klasik Dataverse .1 - Dialog klasik Dataverse . 2 - Peraturan perniagaan. 3 - Tindakan klasik Dataverse . 4 - Aliran proses perniagaan. 5 - Aliran Moden (Aliran automatik, segera atau berjadual).6 - Aliran desktop. |
clientdata |
String | JSON yang dikodkan rentetan bagi definisi aliran dan sambungannyaRujukan. |
createdby |
Cari | Pengguna yang mencipta aliran. |
createdon |
TarikhMasa | Tarikh aliran dicipta. |
description |
String | Penerangan yang disediakan oleh pengguna mengenai aliran. |
ismanaged |
Bool | Menunjukkan jika aliran dipasang melalui penyelesaian terurus. |
modifiedby |
Cari | Pengguna terakhir yang mengemas kini aliran. |
modifiedon |
TarikhMasa | Kali terakhir aliran dikemas kini. |
name |
String | Nama paparan yang telah anda berikan aliran. |
ownerid |
Cari | Pengguna atau pasukan yang memiliki aliran. |
statecode |
Pilihan | Status aliran. Status boleh:0 - Draf (Mati)1 - Diaktifkan (Hidup)2 -Digantung. |
type |
Pilihan | Menunjukkan jika aliran ialah aliran sedang berjalan atau templat yang boleh digunakan untuk mencipta lebih banyak aliran. 1 -Definisi2 -Pengaktifan3 -Template. |
workflowid |
GUID | Pengecam unik untuk aliran awan merentasi semua import. |
workflowidunique |
GUID | Pengecam unik untuk pemasangan aliran ini. |
Nota
Dengan API Web, nilai Carian ialah sifat navigasi bernilai tunggal yang boleh dikembangkan untuk mendapatkan butiran daripada rekod berkaitan.
Lajur carian juga mempunyai sifat carian GUID sepadan yang boleh digunakan dalam pertanyaan. Hartanah carian mempunyai konvensyen penamaan ini: _<logical name>_value
. Untuk jenis entiti aliran kerja dalam API Web, anda boleh merujuk sifat carian ini: _createdby_value
, _modifiedby_value
,dan _ownerid_value
.
Senaraikan aliran
Untuk mendapatkan semula senarai aliran awan, anda boleh menanyakan jadual aliran kerja. Pertanyaan berikut mengembalikan aliran automatik, segera atau berjadual pertama yang sedang 'dihidupkan':
Kaedah statik OutputFirstActiveFlow
ini memerlukan pelanggan yang disahkan yang melaksanakan IOrganizationService. Ia menggunakan kaedah IOrganizationService.RetrieveVariety .
/// <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"]}");
}
Untuk mendapatkan semula lebih banyak rekod, alih keluar had TopCount .
Output
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
Maklumat lanjut:
Cipta aliran awan
Ciri-ciri yang diperlukan untuk aliran automatik, segera, dan berjadual adalah: category
, name
, type
,, primaryentity
dan clientdata
. Gunakan none
untuk primaryentity
jenis aliran ini.
Kaedah statik ini memerlukan pelanggan yang disahkan yang melaksanakan IOrganizationService. Ia menggunakan kaedah IOrganizationService.Create .
/// <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);
}
Maklumat lanjut: Cipta baris jadual menggunakan Perkhidmatan Organisasi
Semua statecode
aliran yang dicipta dengan cara ini ditetapkan kepada 0
(Draf atau 'Mati'). Aliran perlu diaktifkan sebelum ia boleh digunakan.
Harta yang paling penting ialah clientdata
, yang mengandungi connectionReferences
aliran yang digunakan, dan definisi aliran. Ini connectionReferences
adalah pemetaan pada setiap sambungan yang digunakan oleh aliran.
{
"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"
}
Kemas kini aliran awan
Untuk mengemas kini aliran, setkan sifat yang anda ingin ubah sahaja.
Kaedah statik ini memerlukan pelanggan yang disahkan yang melaksanakan IOrganizationService. Ia menggunakan kaedah IOrganizationService.Update untuk mengemas kini perihalan aliran dan menetapkan pemiliknya.
/// <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);
}
Maklumat lanjut: Mengemas kini dan memadamkan baris jadual menggunakan kemas kini Asas Perkhidmatan > Organisasi
Padamkan aliran awan
Contoh berikut menunjukkan cara memadamkan rekod aliran kerja yang mewakili aliran awan.
Kaedah statik DeleteCloudFlow
memadamkan rekod aliran kerja.
/// <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);
}
Maklumat lanjut: Padamkan rekod menggunakan SDK
Dapatkan semua pengguna dengan siapa aliran awan dikongsi
Gunakan mesej untuk RetrieveSharedPrincipalsAndAccess
mendapatkan senarai semua pengguna yang aliran awan dikongsi.
Dengan SDK, gunakan Kelas RetrieveSharedPrincipalsAndAccessRequest, dan dengan API Web menggunakan Fungsi RetrieveSharedPrincipalsAndAccess.
Maklumat lanjut: Dapatkan pengetua dengan capaian kepada rekod
Berkongsi atau menyahkongsi aliran awan
Kongsi aliran awan seperti mana-mana rekod lain Dataverse menggunakan GrantAccess
mesej. Dengan SDK, gunakan Kelas GrantAccessRequest dan dengan API Web menggunakan Tindakan GrantAccess. Maklumat lanjut: Contoh GrantAccess
Jika anda ingin mengubah hak capaian yang anda berikan apabila anda berkongsi rekod, gunakan mesej tersebut ModifyAccess
. Dengan SDK, gunakan Kelas ModifyAccessRequest dan dengan API Web menggunakan Tindakan ModifyAccess. Maklumat lanjut: Contoh Ubah SuaiAccess
Untuk menyahkongsi rekod, gunakan RevokeAccess
mesej. Dengan SDK, gunakan Kelas RevokeAccessRequest dan dengan API Web gunakan Tindakan RevokeAccess. Maklumat lanjut: Membatalkan capaian
Aliran eksport
Apabila aliran adalah sebahagian daripada penyelesaian, anda boleh mengeksportnya dengan mengeksport penyelesaian yang mengandungi aliran menggunakan ExportSolution
mesej.
Kaedah contoh statik ExportSolution
di bawah menggunakan ExportSolutionRequest untuk mendapatkan semula fail byte[]
ZIP penyelesaian yang tidak diuruskan dengan UniqueName yang ditentukan.
/// <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;
}
Aliran import
Apabila anda mempunyai fail ZIP penyelesaian, anda boleh mengimportnya menggunakan ImportSolution
mesej.
Apabila anda mengimport aliran, anda harus mengesetkan parameter berikut:
Nama sifat | Description |
---|---|
OverwriteUnmanagedCustomizations |
Sekiranya terdapat contoh aliran Dataverse ini yang sedia ada, bendera ini perlu ditetapkan untuk true mengimportnya. Jika tidak, mereka tidak akan ditulis ganti. |
PublishWorkflows |
Menunjukkan jika aliran kerja klasik Dataverse akan diaktifkan semasa import. Seting ini tidak digunakan pada jenis aliran lain. |
CustomizationFile |
Fail zip asas 64-dikodkan yang mengandungi penyelesaiannya. |
Kaedah sampel statik ImportSolution
menunjukkan cara mengimport fail penyelesaian menggunakan Kelas 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);
}
Lihat juga
Operasi kelas entiti menggunakan perkhidmatan Organisasi
Melaksanakan operasi menggunakan API Web
Berkongsi dan menugaskan
Mengesahkan akses dalam kod
Bekerjasama dengan penyelesaian menggunakan Dataverse SDK