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 dalam Power Automate. Pada masa ini, mengurus aliran di bawah Aliran Saya tidak disokong dengan kod.

Berinteraksi dengan Dataverse API

Dataverse menyediakan keupayaan yang setara menggunakan sama ada Dataverse SDK untuk .NET atau API Web.

Kaedah manakah yang perlu saya gunakan?

Kaedah terbaik bergantung pada teknologi projek dan kemahiran yang anda miliki.

Jika projek anda menggunakan .NET, kami mengesyorkan menggunakan SDK. SDK memudahkan pengalaman pembangunan anda dengan menyediakan model objek yang ditaip dan kaedah untuk mengesahkan.

Maklumat lanjut: Gunakan perkhidmatan Organisasi

Bagaimana untuk berhubung?

Cara menyambung bergantung pada sama ada anda menggunakan Dataverse SDK untuk .NET atau API Web.

Dengan SDK, anda perlu berhubung dengan aplikasi klien untuk mendapatkan akses kepada tika IOrganizationService . IOrganizationService ialah 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 EntityType aliran kerja

Jadual berikut menerangkan lajur penting dalam jadual aliran kerja:

Nama Logik Taip Description
category Pilihan Kategori aliran. Berikut ialah 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 berkod rentetan bagi definisi aliran dan sambungannyaRujukan.
createdby Cari Pengguna yang mencipta aliran.
createdon TarikhMasa Tarikh apabila aliran dibuat.
description String Perihalan aliran yang disediakan pengguna.
ismanaged Bool Menunjukkan jika aliran telah dipasang melalui penyelesaian terurus.
modifiedby Cari Pengguna terakhir yang mengemas kini aliran.
modifiedon TarikhMasa Kali terakhir aliran dikemas kini.
name String Nama paparan yang anda berikan aliran.
ownerid Cari Pengguna atau pasukan yang memiliki aliran.
statecode Pilihan Status aliran. Status boleh:
0 - Draf (Dimatikan)
1 - Diaktifkan (Hidup)
2 - Digantung.
type Pilihan Menunjukkan sama ada aliran ialah aliran larian atau templat yang boleh digunakan untuk mencipta lebih banyak aliran.
1 - Definisi,
2 - Pengaktifan
3 - Templat.
workflowid GUID Pengecam unik untuk aliran awan merentas semua import.
workflowidunique GUID Pengecam unik untuk pemasangan aliran ini.

Nota

Dengan API Web, nilai Carian adalah sifat navigasi bernilai tunggal yang boleh dikembangkan untuk mendapatkan butiran daripada rekod berkaitan.

Lajur carian juga mempunyai GUID yang sepadan sifat carian yang boleh digunakan dalam pertanyaan. Sifat 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 'dihidupkan' pada masa ini:

Statik ini OutputFirstActiveFlow kaedah memerlukan pelanggan yang disahkan yang melaksanakan IOrganizationService. Ia menggunakan IOrganizationService.RetrieveMultiple kaedah.

/// <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 lebih banyak rekod, alih keluar TopCount had.

Keluaran

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

Sifat yang diperlukan untuk aliran automatik, segera dan berjadual ialah: category, name, type, primaryentity, dan clientdata. guna none untuk primaryentity untuk jenis aliran ini.

Kaedah statik ini memerlukan klien yang disahkan yang melaksanakan IOrganizationService. Ia menggunakan IOrganizationService.Create kaedah.

/// <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: Buat baris jadual menggunakan Perkhidmatan Organisasi

statecode semua aliran yang dibuat dengan cara ini ditetapkan kepada 0 (Draf atau 'Mati'). Aliran itu perlu didayakan sebelum ia boleh digunakan.

Sifat yang paling penting ialah clientdata, yang mengandungi connectionReferences yang digunakan aliran dan takrif aliran. connectionReferences ialah pemetaan kepada 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, tetapkan sifat yang ingin anda ubah sahaja.

Kaedah statik ini memerlukan klien yang disahkan yang melaksanakan IOrganizationService. Ia menggunakan kaedah IOrganizationService.Update untuk mengemas kini perihalan aliran dan menetapkan 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);
}

Maklumat lanjut: Kemas kini dan padamkan baris jadual menggunakan Perkhidmatan Organisasi > Kemas kini asas

Padamkan aliran awan

Contoh berikut menunjukkan cara memadam rekod aliran kerja yang mewakili aliran awan.

Kaedah DeleteCloudFlow statik 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 yang berkongsi aliran awan

Gunakan RetrieveSharedPrincipalsAndAccess mesej untuk mendapatkan senarai semua pengguna yang berkongsi aliran awan.

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

Maklumat lanjut: Dapatkan pengetua dengan akses kepada rekod

Kongsi atau nyahkongsi aliran awan

Kongsi aliran awan seperti mana-mana Dataverse rekod lain menggunakan GrantAccess mesej. Dengan SDK, gunakan GrantAccessRequest Class dan dengan API Web gunakan GrantAccess Action. Maklumat lanjut: Contoh GrantAccess

Jika anda ingin menukar hak akses yang anda berikan apabila anda berkongsi rekod, gunakan ModifyAccess mesej. Dengan SDK, gunakan ModifyAccessRequest Class dan dengan API Web gunakan ModifyAccess Action. Maklumat lanjut: Contoh ModifyAccess

Untuk menyahkongsi rekod, gunakan RevokeAccess mesej. Dengan SDK, gunakan RevokeAccessRequest Class dan dengan API Web gunakan RevokeAccess Action. Maklumat lanjut: Membatalkan akses

Aliran eksport

Apabila aliran adalah sebahagian daripada penyelesaian, anda boleh mengeksportnya dengan mengeksport penyelesaian yang mengandungi aliran menggunakan ExportSolution mesej.

Kaedah contoh ExportSolution statik berikut menggunakan ExportSolutionRequest untuk mendapatkan semula byte[] yang mengandungi fail ZIP bagi penyelesaian tidak terurus dengan UniqueNameyang 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 menetapkan parameter berikut:

Nama sifat Description
OverwriteUnmanagedCustomizations Jika terdapat kejadian sedia ada aliran ini dalam Dataverse, bendera ini perlu ditetapkan kepada true untuk mengimportnya. Jika tidak, ia tidak ditimpa.
PublishWorkflows Menunjukkan jika aliran kerja Dataverse klasik diaktifkan semasa import. Tetapan ini tidak digunakan pada jenis aliran lain.
CustomizationFile Fail zip berkod 64 asas yang mengandungi penyelesaiannya.

Kaedah sampel ImportSolution statik 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);
}

Soalan lazim

Bagaimana pula dengan API di api.flow.microsoft.com?

API di api.flow.microsoft.com tidak disokong. Sebaliknya, pelanggan harus menggunakan Dataverse API Web untuk Power Automate yang didokumenkan sebelum ini dalam artikel ini.

Sebagai alternatif, pelanggan boleh menggunakan penyambung pengurusan: Power Automate Pengurusan atau Power Automate untuk Pentadbir.

Pelanggan boleh menggunakan API yang tidak disokong pada api.flow.microsoft.com atas risiko mereka sendiri. API ini tertakluk kepada perubahan, jadi perubahan pecah boleh berlaku.

Operasi kelas entiti menggunakan perkhidmatan Organisasi
Melaksanakan operasi menggunakan API Web
Perkongsian dan penugasan
Mengesahkan akses dalam kod
Bekerja dengan penyelesaian menggunakan Dataverse SDK