Kongsi melalui


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 -Definisi
2 -Pengaktifan
3 -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