Rad sa tokovima u oblaku korišćenjem koda

Svi tokovi su uskladišteni i Dataverse možete da koristite Dataverse SDK za .NET ili Web API za upravljanje njima.

Ovaj članak pokriva upravljanje tokovima koji su uključeni na kartici " Rešenja " u programu Power Automate. Trenutno upravljanje tokovima u okviru "Moji tokovi " nije podržano kodom.

Interakcija sa Dataverse API-jem

Dataverse obezbeđuje ekvivalentne mogućnosti koristeći Dataverse SDK za .NET ili Web API.

Koji metod da koristim?

Najbolji metod zavisi od projektne tehnologije i veština koje imate.

Ako vaš projekat koristi .NET, preporučujemo da koristite SDK. SDK pojednostavljuje vaše iskustvo u razvoju obezbeđivanjem otkucanog objektnog modela i metoda za potvrdu identiteta.

Više informacija:Korišćenje usluge organizacije

Kako se povezati?

Kako da se povežete zavisi od toga da li koristite Dataverse SDK za .NET ili Web API.

Pomoću SDK-a je potrebno da se povežete sa klijentskom aplikacijom da biste dobili pristup instanci IOrganizationService . IOrganizationService je interfejs koji obezbeđuje metode koje možete koristiti za interakciju Dataverse.

Još informacija:

Tabela toka posla

Tokovi oblaka se skladište u tabeli Proces (tok posla) koja je predstavljena u Web API-u kao tip entiteta toka posla

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 tokovi posla.
1 - Klasični Dataverse dijalozi.
2 - Poslovna pravila.
3 - Klasične Dataverse akcije.
4 - Tokovi poslovnog procesa.
5 - Savremeni tok (automatizovani, trenutni ili planirani tokovi).
6 - Radna površina teče.
clientdata String JSON definicije toka kodiran nizom i njene vezeReferences.
createdby Pronalaženje Korisnik koji je kreirao tok.
createdon Datum i vreme Datum kreiranja toka.
description String Opis toka koji je obezbedio korisnik.
ismanaged Bool Označava da li je tok 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 To ime za prikaz da si dao tok.
ownerid Pronalaženje Korisnik ili tim koji poseduje tok.
statecode Izbor Status toka. Status može biti:
0 - Radna verzija (isključeno)
1 - Aktivirano (na)
2 -Suspendovan.
type Izbor Označava da li je tok tekući tok ili predložak koji se može koristiti za kreiranje više tokova.
1 -Definicija
2 -Aktivacija
3 -Predložak.
workflowid GUID Jedinstveni identifikator za protok oblaka u svim uvozima.
workflowidunique GUID Jedinstveni identifikator za ovu instalaciju toka.

Belešku

Pomoću Web API-ja vrednosti za pronalaženje su svojstva navigacije sa jednom vrednosom koja se mogu proširiti da bi se dobili detalji iz povezanog zapisa.

Kolone za pronalaženje takođe imaju odgovarajuća GUID svojstva za pronalaženje koja se mogu koristiti u upitima. Svojstva pronalaženja imaju ovu konvenciju imenovanja: _<logical name>_value. Za tip entiteta toka posla u Web API-u možete da referencisete ova svojstva pronalaženja: _createdby_value, _modifiedby_value, i _ownerid_value.

Spisak tokova

Da biste preuzeli listu tokova oblaka, možete da izvršite upit nad tabelom toka posla. Sledeći upit vraća prvi automatizovani, trenutni ili planirani tok koji je trenutno "na programu":

Ovaj statički OutputFirstActiveFlow metod zahteva klijenta za potvrdu identiteta koji primenjuje IOrganizationService. Koristi metod IOrganizationService.RetrieveMultiple .

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

Uklonite ograničenje topcount zapisa da biste preuzeli još zapisa.

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

Potrebna svojstva za automatizovane, instant i planirane tokove su: category, name, type,, primaryentity i clientdata. Koristite none za primaryentity ove tipove tokova.

Ovaj statički metod zahteva klijenta za potvrdu identiteta koji primenjuje IOrganizationService. On koristi metod 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);
}

Više informacija:Kreiranje redova tabele pomoću usluge organizacije

Svi statecode tokovi kreirani na ovaj način su postavljeni na 0 (Radna verzija ili "Isključeno"). Potrebno je omogućiti tok da bi mogao da se koristi.

Najvažnije svojstvo je clientdata ono koje sadrži tok connectionReferences koji koristi i definiciju toka. To connectionReferences su mapiranja za svaku vezu koju tok 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 toka oblaka

Da biste ažurirali tok, postavite samo svojstva koja želite da promenite.

Ovaj statički metod zahteva klijenta za potvrdu identiteta koji primenjuje IOrganizationService. On koristi metod IOrganizationService.Update da bi ažurirao opis toka i postavio 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);
}

Više informacija:Ažuriranje i brisanje redova tabele pomoću osnovne ispravke usluge > organizacije

Brisanje toka oblaka

Sledeći primeri prikazuju kako se briše zapis toka posla koji predstavlja tok oblaka.

Statički metod DeleteCloudFlow 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);

}

Više informacija: Brisanje zapisa pomoću SDK-a

Nabavite sve korisnike sa kojima se deli tok oblaka

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

Pomoću SDK-a koristite RetrieveSharedPrincipalsAndAccessRequest klasu, a uz Web API koristite funkciju RetrieveSharedPrincipalsAndAccess.

Više informacija: Nabavite direktore sa pristupom zapisu

Deljenje ili deljenje toka oblaka

Delite tok oblaka kao i svaki drugi Dataverse zapis koristeći poruku GrantAccess . Pomoću SDK-a koristite GrantAccessRequest klasu i sa Web API-jem koristite Radnju GrantAccess. Više informacija: GrantAccess primer

Ako želite da promenite prava pristupa koja dodeljujete prilikom deljenja zapisa, koristite je ModifyAccess . Pomoću SDK-a koristite ModifyAccessRequest klasu i sa Web API-jem koristite radnju ModifyAccess. Više informacija: ModifyAccess primer

Koristite poruku da biste ošišali zapis RevokeAccess . Pomoću SDK-a koristite klasu RevokeAccessRequest i pomoću Web API-ja koristite radnju "RevokeAccess". Više informacija: Ukidanje pristupa

Izvoz tokova

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

Dolenavedeni metod statičkog ExportSolution primera koristi ExportSolutionRequest za byte[] preuzimanje ZIP datoteke nekonstaliranog rešenja sa navedenim jedinstvenim imenom.

/// <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 rešenja, možete da je uvezete pomoću ImportSolution poruke.

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

Naziv svojstva Opis
OverwriteUnmanagedCustomizations Ako postoje postojeće instance ovih tokova, ova zastavica Dataverse mora biti postavljena tako da ih true uvozi. U suprotnom neće biti zamenjeni.
PublishWorkflows Označava da li će klasični Dataverse tokovi posla biti aktivirani prilikom uvoza. Ova postavka se ne primenjuje na druge tipove tokova.
CustomizationFile Osnovna zip datoteka sa 64 koda koja sadrži rešenje.

Metod statičnog ImportSolution uzorka pokazuje kako se uvozi datoteka reš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 i ovo

Operacije klase entiteta pomoću usluge organizacije
Izvršavanje operacija pomoću Web API-ja
Deljenje i dodeljivanje
Verifikacija pristupa u kodu
Rad sa rešenjima pomoću Dataverse SDK-a