Menggunakan alur cloud dengan kode

Semua alur disimpan dan Dataverse Anda dapat menggunakan Dataverse SDK untuk .NET atau API Web untuk mengelolanya.

Artikel ini membahas manajemen alur yang disertakan pada tab Solusi di Power Automate. Saat ini, mengelola alur di bawah Alur Saya tidak didukung dengan kode.

Berinteraksi dengan Dataverse API

Dataverse menyediakan kemampuan yang Dataverse setara menggunakan SDK for .NET atau Web API.

Metode apa yang harus saya gunakan?

Metode terbaik tergantung pada teknologi proyek dan keterampilan yang Anda miliki.

Jika project Anda menggunakan .NET, sebaiknya gunakan SDK. SDK menyederhanakan pengalaman pengembangan Anda dengan menyediakan model objek yang diketik dan metode untuk mengautentikasi.

Informasi selengkapnya: Menggunakan layanan organisasi

Bagaimana cara menghubungkan?

Cara menyambungkan bergantung pada apakah Anda menggunakan Dataverse SDK for .NET atau Web API.

Dengan SDK, Anda perlu terhubung dengan aplikasi klien untuk mendapatkan akses ke instans IOrganizationService . IOrganizationService adalah antarmuka yang menyediakan metode yang dapat Anda gunakan untuk berinteraksi Dataverse.

Informasi selengkapnya:

Tabel alur kerja

Alur cloud disimpan dalam tabel Proses (Alur Kerja) yang diwakili dalam API Web sebagai alur kerja EntityType

Tabel berikut menguraikan kolom penting dalam tabel alur kerja:

Nama Logis Tipe Description
category Pilihan Kategori aliran. Berikut adalah kategori yang berbeda.
0 - Alur kerja klasik Dataverse .
1 - Dialog klasik Dataverse .
2 - Aturan bisnis.
3 - Tindakan klasik Dataverse .
4 - Alur proses bisnis.
5 - Aliran Modern (Otomatis, aliran instan atau terjadwal).
6 - Alur desktop.
clientdata String JSON yang dikodekan string dari definisi aliran dan connectionReferences-nya.
createdby Pencarian Pengguna yang membuat alur.
createdon WaktuTanggal Tanggal saat alur dibuat.
description String Deskripsi alur yang diberikan pengguna.
ismanaged Bool Menunjukkan apakah aliran diinstal melalui solusi terkelola.
modifiedby Pencarian Pengguna terakhir yang memperbarui alur.
modifiedon WaktuTanggal Terakhir kali alur diperbarui.
name String Nama tampilan yang telah Anda berikan alirannya.
ownerid Pencarian Pengguna atau tim yang memiliki alur.
statecode Pilihan Status aliran. Statusnya dapat berupa:
0 - Draf (Nonaktif)
1 - Diaktifkan (On)
2 -Ditangguhkan.
type Pilihan Menunjukkan apakah alur adalah alur yang sedang berjalan, atau templat yang dapat digunakan untuk membuat lebih banyak alur.
1 -Definisi
2 -Pengaktifan
3 -Templat.
workflowid Guid ID unik untuk aliran cloud di semua impor.
workflowidunique Guid Pengenal unik untuk pemasangan alur ini.

Catatan

Dengan Web API, nilai Pencarian adalah properti navigasi bernilai tunggal yang bisa diperluas untuk mendapatkan detail dari rekaman terkait.

Kolom pencarian juga memiliki properti pencarian GUID terkait yang bisa digunakan dalam kueri. Properti pencarian memiliki konvensi penamaan ini: _<logical name>_value. Untuk entitytype alur kerja di Web API, Anda dapat mereferensikan properti pencarian ini: _createdby_value, _modifiedby_value, dan _ownerid_value.

Cantumkan alur

Untuk mengambil daftar alur cloud, Anda dapat mengkueri tabel alur kerja. Kueri berikut mengembalikan alur otomatis, instan, atau terjadwal pertama yang saat ini 'aktif':

Metode statis OutputFirstActiveFlow ini memerlukan klien yang diautentikasi yang mengimplementasikan IOrganizationService. Ini menggunakan metode IOrganizationService.RetrieveMultiple .

/// <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 mengambil lebih banyak rekaman, hapus batas 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

Informasi selengkapnya:

Buat alur cloud

Properti yang diperlukan untuk alur otomatis, instan, dan terjadwal adalah: category, name, type, primaryentity, dan clientdata. Gunakan none untuk jenis primaryentity aliran ini.

Metode statis ini memerlukan klien yang diautentikasi yang mengimplementasikan IOrganizationService. Ini menggunakan metode 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);
}

Informasi selengkapnya: Membuat baris tabel menggunakan Layanan Organisasi

Semua statecode alur yang dibuat dengan cara ini diatur ke 0 (Draf atau 'Nonaktif'). Alur harus diaktifkan sebelum dapat digunakan.

Properti yang paling penting adalah clientdata, yang berisi connectionReferences bahwa aliran menggunakan, dan definisi aliran. Adalah connectionReferences pemetaan untuk setiap koneksi yang digunakan 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"
}

Memperbarui alur cloud

Untuk memperbarui alur, atur hanya properti yang ingin Anda ubah.

Metode statis ini memerlukan klien yang diautentikasi yang mengimplementasikan IOrganizationService. Ini menggunakan metode IOrganizationService.Update untuk memperbarui deskripsi alur dan mengatur pemilik.

/// <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);
}

Informasi selengkapnya: Memperbarui dan menghapus baris tabel menggunakan pembaruan dasar layanan > organisasi

Menghapus alur cloud

Contoh berikut memperlihatkan cara menghapus rekaman alur kerja yang mewakili alur cloud.

Metode statis DeleteCloudFlow menghapus rekaman alur 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);

}

Informasi selengkapnya: Menghapus data menggunakan SDK

Dapatkan semua pengguna dengan siapa aliran cloud dibagikan

RetrieveSharedPrincipalsAndAccess Gunakan pesan untuk mendapatkan daftar semua pengguna yang diajak berbagi alur cloud.

Dengan SDK, gunakan Kelas RetrieveSharedPrincipalsAndAccessRequest, dan dengan API Web gunakan Fungsi RetrieveSharedPrincipalsAndAccess.

Informasi selengkapnya: Mendapatkan akses ke data kepada prinsipal

Berbagi atau membatalkan berbagi alur cloud

Bagikan alur cloud seperti rekaman lainnya Dataverse menggunakan GrantAccess pesan. Dengan SDK, gunakan Kelas GrantAccessRequest dan dengan API Web gunakan Tindakan GrantAccess. Informasi selengkapnya: Contoh GrantAccess

Jika Anda ingin mengubah hak akses yang Anda berikan saat berbagi rekaman, gunakan pesan tersebut ModifyAccess . Dengan SDK, gunakan Kelas ModifyAccessRequest dan dengan API Web gunakan Tindakan ModifyAccess. Informasi selengkapnya: Contoh ModifyAccess

Untuk berhenti berbagi rekaman, gunakan RevokeAccess pesan. Dengan SDK, gunakan Kelas RevokeAccessRequest dan dengan API Web gunakan Tindakan RevokeAccess. Informasi selengkapnya: Mencabut akses

Alur ekspor

Bila alur merupakan bagian dari solusi, Anda dapat mengekspornya dengan mengekspor solusi yang berisi alur menggunakan ExportSolution pesan.

Metode contoh statis ExportSolution di bawah ini menggunakan ExportSolutionRequest untuk mengambil file byte[] ZIP yang berisi solusi tidak terkelola 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;
}

Mengimpor alur

Bila Anda memiliki file ZIP solusi, Anda dapat mengimpornya menggunakan ImportSolution pesan.

Saat mengimpor alur, Anda harus mengatur parameter berikut:

Nama properti Description
OverwriteUnmanagedCustomizations Jika ada instans aliran Dataverse ini, bendera ini perlu diatur ke untuk true mengimpornya. Jika tidak, mereka tidak akan ditimpa.
PublishWorkflows Menunjukkan apakah alur kerja klasik Dataverse akan diaktifkan saat impor. Pengaturan ini tidak berlaku untuk jenis alur lainnya.
CustomizationFile File zip dasar yang dikodekan 64 yang berisi solusi.

Metode sampel statis ImportSolution menunjukkan cara mengimpor file solusi 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);
}

Baca juga

Operasi kelas entitas menggunakan layanan Organisasi
Melakukan operasi menggunakan API Web
Berbagi dan menetapkan
Memverifikasi akses dalam kode
Bekerja dengan solusi menggunakan Dataverse SDK