Rad s tokovima oblaka s pomoću koda

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

Ovaj članak obuhvaća upravljanje tokovima uključenima na kartici Rješenja u Power Automate. Trenutno upravljanje tokovima u odjeljku Moji tokovi nisu podržani kodom.

Interakcija s Dataverse API-jevima

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

Koju metodu 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žanjem tipkanog modela objekta i metoda za provjeru autentičnosti.

Dodatne informacije: Korištenje usluge tvrtke ili ustanove

Kako se povezati?

Kako se povezati 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 s kojima možete komunicirati Dataverse.

Dodatne informacije:

Tablica tijeka rada

Tokovi oblaka pohranjuju se u tablicu Proces (tijek rada) koja je u web-API-ju predstavljena kao vrsta entiteta tijeka rada

Sljedeća tablica opisuje važne stupce u tablici tijeka rada:

Logički 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 - Tokovi poslovnih procesa.
5 - Moderni tok (automatizirani, trenutni ili planirani tokovi).
6 - Tokovi radne površine.
clientdata String JSON kodiran nizom definicije tijeka i njegove vezeReferences.
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 protok instaliran putem upravljano rješenje.
modifiedby Pretraživanje Posljednji korisnik koji je ažurirao tijek.
modifiedon DatumVrijeme Posljednji put kada je tijek ažuriran.
name String Zaslonsko ime koji ste dali protoku.
ownerid Pretraživanje Korisnik ili tim u čijem je vlasništvu tijek.
statecode Mogućnost odabira Status toka. Status može biti:
0 - Skica (isključeno)
1 - Aktivirano (uključeno)
2 -Zaustavljena.
type Mogućnost odabira Označava je li tijek tekući tijek ili predložak koji se može koristiti za stvaranje više tokova.
1 -Definicija
2 -Aktiviranje
3 -Predložak.
workflowid GUID Jedinstveni identifikator za protok oblaka u svim uvozima.
workflowidunique GUID Jedinstveni identifikator za ovu instalaciju tijeka.

Napomena

Pomoću web-API-ja vrijednosti pretraživanja su navigacijska svojstva s jednom vrijednošću koja se mogu proširiti da bi se dobili detalji iz povezanog zapisa.

Stupci pretraživanja imaju i odgovarajuća GUID svojstva pretraživanja 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 tokova oblaka, možete postaviti upit tablici tijeka rada. Sljedeći upit vraća prvi automatizirani, trenutni ili zakazani tijek koji je trenutno uključen:

Ova statička OutputFirstActiveFlow metoda zahtijeva klijent čija je autentičnost provjerena i implementira. IOrganizationService Koristi metodu IOrganizationService.RetrieveMultice.

/// <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 tokove su:, category, name,, type i primaryentity. clientdata Koristite none za primaryentity ove vrste tokova.

Ova statička metoda zahtijeva klijent čija je autentičnost provjerena i 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 usluge tvrtke ili ustanove

Od statecode svih tako stvorenih tokova postavljeni su na 0 (Skica ili 'Isključeno'). Protok mora biti omogućen prije korištenja.

Najvažnije svojstvo je clientdata, koje sadrži connectionReferences da protok koristi, i definiciju toka. su connectionReferences 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 oblaka

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

Ova statička metoda zahtijeva klijent čija je autentičnost provjerena i 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 osnovnog ažuriranja usluge > tvrtke ili ustanove

Brisanje toka oblaka

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

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

Nabavite sve korisnike s kojima se zajednički koristi protok oblaka

RetrieveSharedPrincipalsAndAccess Koristite poruku da biste dobili popis svih korisnika s kojima se zajednički koristi tijek oblaka.

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

Dodatne informacije: Dohvaćanje ravnatelja s pristupom zapisu

Zajedničko korištenje ili poništavanje zajedničkog korištenja tijeka oblaka

Podijelite tok oblaka kao i svaki drugi Dataverse zapis pomoću GrantAccess poruke. Sa SDK-om koristite GrantAccessRequest klasu , a s web API-jem akciju GrantAccess. Više informacija: GrantAccess primjer

Ako želite promijeniti prava pristupa koja dodjeljujete prilikom zajedničkog korištenja zapisa, koristite ModifyAccess poruku. Sa SDK-om koristite klasu ModifyAccessRequest i s web-API-jem akciju ModifyAccess . Dodatne informacije: Primjer izmjene pristupa

Da biste prekinuli zajedničko korištenje zapisa, koristite RevokeAccess poruku. Sa SDK-om koristite klasu RevokeAccessRequest i s web-API-jem koristite akciju RevokeAccess. Dodatne informacije: Opoziv pristupa

Izvoz tokova

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

Metoda statičkog ExportSolution primjera u nastavku koristi ExportSolutionRequest za dohvaćanje KOJA byte[] sadrži ZIP datoteku neupravljanog rješenja s 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;
}

Uvoz tokova

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

Prilikom uvoza tokova trebali biste postaviti sljedeće parametre:

Naziv svojstva Opis
OverwriteUnmanagedCustomizations Ako postoje slučajevi tih tijekova Dataverse, ovu zastavicu treba postaviti tako da true ih uveze. Inače neće biti prebrisani.
PublishWorkflows Označava hoće li se prilikom uvoza aktivirati klasični Dataverse tijekovi rada. Ta se postavka ne primjenjuje na druge vrste tijekova.
CustomizationFile Osnovna zip datoteka sa 64 kodirana koja sadrži rješenje.

Metoda statičkog ImportSolution uzorka pokazuje kako uvesti datoteku rješenja pomoću klase 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);
}

Pogledajte

Operacije klase entiteta koje koriste uslugu Organizacija
Izvođenje operacija pomoću web-API-ja
Zajedničko korištenje i dodjeljivanje
Provjera pristupa u kodu
Rad s rješenjima pomoću SDK-a Dataverse