Rad s tokovima oblaka s pomoću koda

Svi tijekovi su pohranjeni u njima Dataverse i možete koristiti Dataverse SDK za .NET ili Web API za upravljanje.

Ovaj članak pokriva upravljanje tokovima uključenima na kartici Rješenja u Power Automate. Trenutno upravljanje tijekovima u odjeljku Moji tokovi nije podržano kodom.

Interakcija s API-jima Dataverse

Dataverse pruža ekvivalentne mogućnosti pomoću SDK-a Dataverse za .NET ili web-API-ja.

Koju metodu trebam koristiti?

Najbolja metoda ovisi o tehnologiji projekta i vještinama koje imate.

Ako vaš projekt koristi .NET, preporučujemo korištenje SDK-a. SDK pojednostavljuje vaše razvojno iskustvo pružajući tipizirani objektni model i metode za provjeru autentičnosti.

Dodatne informacije: Korištenje servisa tvrtke ili ustanove

Kako se povezati?

Način povezivanja ovisi o tome koristite Dataverse li SDK za .NET ili web-API.

Pomoću SDK-a morate se povezati s klijentskom aplikacijom da biste dobili pristup instanci IOrganizationService . IOrganizationService je sučelje koje pruža metode koje možete koristiti za interakciju Dataverse.

Dodatne informacije:

Tablica tijeka rada

Tijekovi u oblaku pohranjuju se u tablicu Proces (tijek rada) koja je predstavljena u web-API-ju kao EntityType tijeka rada

U sljedećoj su tablici opisani važni stupci u tablici tijeka rada:

Logični naziv Tip Opis
category Mogućnost odabira Kategorija toka. Ovdje su različite kategorije.
0 - Klasični Dataverse tijekovi rada.
1 - Klasični Dataverse dijalozi.
2 - Poslovna pravila.
3 - Klasične Dataverse akcije.
4 - Tijekovi poslovnih procesa.
5 - Moderni tijek (automatizirani, trenutni ili planirani tijekovi).
6 - Tijekovi radne površine.
clientdata String JSON kodiran nizom definicije toka i njegove connectionReferences.
createdby Pretraživanje Korisnik koji je stvorio tijek.
createdon DatumVrijeme Datum stvaranja tijeka.
description String Opis tijeka koji je dao korisnik.
ismanaged Bool Označava je li tijek instaliran putem upravljanog rješenja.
modifiedby Pretraživanje Posljednji korisnik koji je ažurirao tijek.
modifiedon DatumVrijeme Posljednji put kada je tijek ažuriran.
name String Zaslonski naziv koji ste dali tijeku.
ownerid Pretraživanje Korisnik ili tim koji je vlasnik tijeka.
statecode Mogućnost odabira Status toka. Status može biti:
0 - Nacrt (isključeno)
1 - Aktivirano (uključeno)
2 -Zaustavljena.
type Mogućnost odabira Označava je li tijek tekući ili predložak koji se može koristiti za stvaranje više tijekova.
1 -Definicija
2 -Aktiviranje
3 -Predložak.
workflowid GUID Jedinstveni identifikator za tijek u oblaku za sve uvoze.
workflowidunique GUID Jedinstveni identifikator za ovu instalaciju tijeka.

Napomena

Uz Web API, vrijednosti pretraživanja su navigacijska svojstva s jednom vrijednošću koja se mogu proširiti da biste dobili pojedinosti iz povezanog zapisa.

Stupci s vrijednostima imaju i odgovarajuća svojstva pretraživanja GUID-a koja se mogu koristiti u upitima. Svojstva pretraživanja imaju ovu konvenciju imenovanja: _<logical name>_value. Za vrstu entiteta tijeka rada u web-API-ju možete se pozvati na ova svojstva pretraživanja: _createdby_value,, _modifiedby_value i _ownerid_value.

Navedi tokove

Da biste dohvatili popis tijekova u oblaku, možete upitati tablicu tijeka rada. Sljedeći upit vraća prvi automatizirani, trenutni ili planirani tijek koji je trenutno uključen:

Ova statička OutputFirstActiveFlow metoda zahtijeva autentificiranog klijenta koji implementira IOrganizationService. Koristi metodu IOrganizationService.RetrieveMulti .

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

Da biste dohvatili više zapisa, uklonite ograničenje TopCount .

Izlaz

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

Dodatne informacije:

Stvori tok oblaka

Potrebna svojstva za automatizirane, trenutne i planirane tijekove su: category,, name, type, primaryentity i clientdata. Koristite none za primaryentity ove vrste protoka.

Ova statička metoda zahtijeva autentificiranog klijenta koji implementira IOrganizationService. Koristi metodu 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);
}

Dodatne informacije: Stvaranje redaka tablice pomoću servisa tvrtke ili ustanove

Svi statecode tijekovi stvoreni na ovaj način postavljeni su na 0 (Nacrt ili 'Isključeno'). Tijek mora biti omogućen prije nego što se može koristiti.

Najvažnije svojstvo je clientdata, koje sadrži ono connectionReferences što protok koristi i definiciju toka. To connectionReferences su mapiranja za svaku vezu koju tijek koristi.

{
  "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"
}

Ažuriranje tijeka u oblaku

Da biste ažurirali tijek, postavite samo svojstva koja želite promijeniti.

Ova statička metoda zahtijeva autentificiranog klijenta koji implementira IOrganizationService. Koristi metodu IOrganizationService.Update za ažuriranje opisa tijeka i postavljanje vlasnika.

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

Dodatne informacije: Ažuriranje i brisanje redaka tablice pomoću ažuriranja Organization Service Basic >

Brisanje tijeka u oblaku

Sljedeći primjeri pokazuju kako izbrisati zapis tijeka rada koji predstavlja tijek u oblaku.

Statička DeleteCloudFlow metoda briše zapis tijeka rada.

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

}

Dodatne informacije: Brisanje zapisa pomoću SDK-a

Saznajte sve korisnike s kojima se dijeli tijek u oblaku

Upotrijebite RetrieveSharedPrincipalsAndAccess poruku da biste dobili popis svih korisnika s kojima se tijek u oblaku dijeli.

Sa SDK-om koristite klasu RetrieveSharedPrincipalsAndAccessRequest, a s web-API-jem koristite funkciju RetrieveSharedPrincipalsAndAccess.

Dodatne informacije: Dobivanje principala s pristupom zapisu

Zajedničko korištenje ili poništavanje dijeljenja tijeka u oblaku

Dijelite tijek u oblaku kao i bilo koji drugi Dataverse zapis pomoću GrantAccess poruke. Sa SDK-om koristite klasu GrantAccessRequest, a s web-API-jem koristite akciju GrantAccess. Dodatne informacije: Primjer GrantAccessa

Ako želite promijeniti prava pristupa koja dodjeljujete prilikom zajedničkog korištenja zapisa, upotrijebite ModifyAccess poruku. S SDK-om koristite klasu ModifyAccessRequest , a s Web API-jem koristite akciju ModifyAccess. Više informacija: Primjer ModifyAccess

Za prestanak dijeljenja zapisa upotrijebite poruku RevokeAccess . S SDK-om koristite klasu RevokeAccessRequest , a s Web API-jem koristite radnju RevokeAccess. Više informacija: Opoziv pristupa

Izvozni tokovi

Kada je tok dio rješenja, možete ga izvesti izvozom rješenja koje sadrži tok pomoću poruke ExportSolution .

Sljedeća statička metoda primjera koristi zahtjev za izvoz rješenja (ExportSolutionRequest) za dohvaćanje datoteke koja sadrži ZIP datoteku neupravljanog rješenja s navedenim jedinstvenim nazivom (UniqueName). ExportSolution...byte[]...

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

Uvozni tokovi

Kada imate ZIP datoteku rješenja, možete je uvesti pomoću poruke ImportSolution .

Prilikom uvoza tokova trebali biste postaviti sljedeće parametre:

Naziv svojstva Opis
OverwriteUnmanagedCustomizations Ako postoje postojeće instance ovih tokova u Dataverse, ova zastavica mora biti postavljena na true da bi se uvezli. Inače se ne prepisuju.
PublishWorkflows Označava jesu li klasični tijekovi rada aktivirani pri uvozu. Dataverse Ova postavka se ne odnosi na druge vrste tokova.
CustomizationFile Zip datoteka s Base 64 kodiranjem koja sadrži rješenje.

Statička metoda primjera pokazuje kako uvesti datoteku rješenja pomoću klase ImportSolutionRequest ImportSolution...

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

Najčešće postavljana pitanja

Što je s API-jem na api.flow.microsoft.com?

API na adresi api.flow.microsoft.com nije podržan. Korisnici bi umjesto toga trebali koristiti web API-je za prethodno dokumentirane u ovom članku. Dataverse Power Automate

Alternativno, korisnici mogu koristiti konektore za upravljanje: Power Automate Upravljanje ili Power Automate za administratore.

Korisnici mogu koristiti nepodržane API-je na vlastitu odgovornost. api.flow.microsoft.com Ovi API-ji podložni su promjenama, tako da bi moglo doći do kritičnih promjena.

Operacije klase entiteta pomoću usluge Organizacija
Izvršavanje operacija pomoću web API-ja
Dijeljenje i dodjeljivanje
Provjera pristupa u kodu
Radite s rješenjima koristeći Dataverse SDK