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 -Definicija2 -Aktivacija3 -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.
Srodne informacije
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