Deli putem


Rad sa tokovima u oblaku korišćenjem koda

Svi tokovi se čuvaju i Dataverse možete koristiti SDK Dataverse za .NET ili Veb API da biste njima upravljali.

Ovaj članak pokriva upravljanje tokovima uključenim na kartici Rešenja u Power Automate. Trenutno, upravljanje tokovima pod Mi tokovi nisu podržani kodom.

Interakcija sa Dataverse API-jima

Dataverse pruža ekvivalentne Dataverse mogućnosti koristeći bilo SDK za .NET ili Veb API.

Koji metod treba da koristim?

Najbolji način zavisi od tehnologije projekta i veština koje imate.

Ako vaš projekat koristi .NET, preporučujemo da koristite SDK. SDK pojednostavljuje vaše razvojno iskustvo pružajući otkucani model objekta i metode za autentifikaciju.

Više informacija: Koristite uslugu organizacije

Kako se povezati?

Kako se povezati zavisi od toga da li koristite Dataverse SDK za .NET ili Veb API.

Sa SDK-om, potrebno je da se povežete sa klijentskom aplikacijom da biste dobili pristup instanci IOrganizationService . IOrganizationService je interfejs koji pruža metode koje možete koristiti za interakciju Dataverse.

Još informacija:

Tabela toka posla

Tokovi oblaka se čuvaju u tabeli Process (Vorkflov) koja je predstavljena u Veb API-ju kao tok posla EntiTipe

Sledeća tabela opisuje važne kolone u tabeli toka posla:

Logičko ime Tip Opis
category Izbor Kategorija toka. Evo različitih kategorija.
0 - Klasični Dataverse radni tokovi.
1 - Klasični Dataverse dijalozi.
2 - Poslovna pravila.
3 - Klasične Dataverse akcije.
4 - Tokovi poslovnih procesa.
5 - Moderni protok (automatizovani, instant ili planirani tokovi).
6 - Tokovi na radnoj površini.
clientdata String JSON kodiran stringom definicije toka i njegove connectionReferences.
createdby Pronalaženje Korisnik koji je stvorio tok.
createdon Datum i vreme Datum kada je tok kreiran.
description String Opis toka koji je obezbedio korisnik.
ismanaged Bilten Označava da li je protok instaliran preko kompletno rešenje.
modifiedby Pronalaženje Poslednji korisnik koji je ažurirao tok.
modifiedon Datum i vreme Poslednji put kada je tok ažuriran.
name String Prikazno ime za prikaz koje ste dali toku.
ownerid Pronalaženje Korisnik ili tim koji je vlasnik toka.
statecode Izbor Status toka. Status može biti:
0 - Nacrt (isključen)
1 - Aktiviran (uključeno)
2 -Suspendovan.
type Izbor Označava da li je tok tekući tok, ili šablon koji se može koristiti za kreiranje više tokova.
1 -Definicija
2 -Aktivacija
3 -Predložak.
workflowid GUID Jedinstveni identifikator za tok u oblaku u svim uvozima.
workflowidunique GUID Jedinstveni identifikator za ovu instalaciju toka.

Belešku

Sa Veb API-jem, vrednosti pretrage su osobine navigacije sa jednom vrednošću koje se mogu proširiti da bi se dobili detalji iz povezanog zapisa.

Kolone pretrage takođe imaju odgovarajuće osobine GUID pretrage koje se mogu koristiti u upitima. Osobine pretrage imaju ovu konvenciju imenovanja: _<logical name>_value. Za entitetipe toka posla u Veb API-ju možete uputiti na ove osobine pretrage: _createdby_value,, _modifiedby_value i _ownerid_value.

Spisak tokova

Da biste preuzeli listu tokova oblaka, možete upitati tabelu toka posla. Sledeći upit vraća prvi automatizovani, trenutni ili planirani tok koji je trenutno "uključen":

Ovaj statički OutputFirstActiveFlow metod zahteva autentifikovanog klijenta koji implementira IOrganizationService. Koristi IOrganizationService.RetrieveMultiple metod.

/// <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 preuzeli 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

Još informacija:

Kreiranje toka u oblaku

Potrebne osobine za automatizovane, trenutne i planirane tokove su: category, name,, type, primaryentity i clientdata. Koristi se none za primaryentity ove vrste tokova.

Ovaj statički metod zahteva autentifikovanog 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: Kreiranje redova tabele koristeći Organizacioni servis

Od statecode svih tokova kreiranih na ovaj način su podešeni na 0 (Nacrt ili 'Isključeno'). Protok mora biti omogućen pre nego što se može koristiti.

Najvažnija osobina je clientdata, koja sadrži da connectionReferences protok koristi, i definicija toka. To connectionReferences su mapiranja za svaku vezu koju protok 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žurirajte tok u oblaku

Da biste ažurirali tok, podesite samo osobine koje želite da promenite.

Ovaj statički metod zahteva autentifikovanog klijenta koji implementira IOrganizationService. Koristi metod IOrganizationService.Update za ažuriranje opisa toka 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 redova tabele korišćenjem osnovnog ažuriranja Organizacione službe >

Izbrišite tok u oblaku

Sledeći primeri pokazuju kako izbrisati zapis toka posla koji predstavlja tok u oblaku.

Statički DeleteCloudFlow metod briše zapis toka posla.

/// <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: Obrišite zapis koristeći SDK

Nabavite sve korisnike sa kojima se deli tok u oblaku

Koristite RetrieveSharedPrincipalsAndAccess poruku da biste dobili listu svih korisnika sa kojima se deli tok u oblaku.

Sa SDK-om koristite klasu RetrieveSharedPrincipalsAndAccessRequest, a pomoću Veb API-ja koristite funkciju RetrieveSharedPrincipalsAndAccess.

Više informacija: Nabavite direktore sa pristupom zapisu

Delite ili poništite tok u oblaku

Delite tok u oblaku kao i bilo koji drugi Dataverse zapis koristeći GrantAccess poruku. Sa SDK-om koristite klasu GrantAccessRequest i sa Veb API-jem koristite akciju GrantAccess. Više informacija: GrantAccess primer

Ako želite da promenite prava pristupa koja dodeljujete kada delite zapis, koristite ModifyAccess poruku. Sa SDK-om, koristite klasu ModifiAccessRekuest i sa Veb API-jem koristite akciju ModifiAccess. Više informacija: Primer izmene Access-a

Da biste poništili deljenje zapisa, koristite RevokeAccess poruku. Sa SDK-om koristite klasu RevokeAccessRekuest i sa Veb API-jem koristite akciju RevokeAccess. Više informacija: Ukidanje pristupa

Izvozni tokovi

Kada je tok deo rešenja, možete ga izvesti izvozom rešenja koje sadrži tok koristeći ExportSolution poruku.

Sledeći statički ExportSolution primer metoda koristi EkportSolutionRequest da preuzme ZIP datoteku byte[] koja sadrži neupravljano rešenje sa navedenim UniqueName.

/// <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 rešenje ZIP fajl, možete ga uvesti pomoću ImportSolution poruke.

Kada uvozite tokove, trebalo bi da podesite sledeće parametre:

Naziv svojstva Opis
OverwriteUnmanagedCustomizations Ako postoje postojeće instance ovih tokova u Dataverse, ova zastava treba da bude podešena da true ih uveze. U suprotnom se ne prepisuju.
PublishWorkflows Označava da li su klasični Dataverse tokovi posla aktivirani prilikom uvoza. Ova postavka se ne primenjuje na druge vrste tokova.
CustomizationFile Baza 64-kodirana zip datoteka koja sadrži rešenje.

Metoda statičkog ImportSolution uzorka pokazuje kako da uvezete datoteku rešenja koristeći klasu ImportSolutionRekuest

/// <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šća pitanja

Šta je sa API-jem na api.flow.microsoft.com?

API na # api.flow.microsoft.com nije podržan. Kupci bi umesto toga trebalo da koriste Dataverse Veb API-je za Power Automate dokumentovano prethodno u ovom članku.

Alternativno, korisnici mogu da koriste konektore za upravljanje: Power Automate menadžment ili Power Automate za administratore.

Korisnici mogu da koriste nepodržane API-je na api.flow.microsoft.com sopstveni rizik. Ovi API-ji su podložni promenama, tako da može doći do probijanja promena.

Operacije entitetske klase koristeći uslugu organizacije
Obavljanje operacija pomoću Veb API-ja
Deljenje i dodeljivanje
Provera pristupa u kodu
Rad sa rešenjima koristeći Dataverse SDK