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 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 koje 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 -Definicija2 -Aktiviranje3 -Predložak. |
workflowid |
GUID | Jedinstveni identifikator za tok oblaka u svim uvozima. |
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 tok oblaka
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 tok oblaka
Sljedeći primjeri pokazuju kako izbrisati zapis tijeka rada koji predstavlja tok 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
Saznajte sve korisnike s kojima se dijeli tok oblaka
Upotrijebite RetrieveSharedPrincipalsAndAccess
poruku da biste dobili popis svih korisnika s kojima se dijeli tok oblaka.
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 tok oblaka
Podijelite tok oblaka 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. Sa SDK-om koristite klasu ModifyAccessRequest, a s web-API-jem koristite akciju ModifyAccess. Dodatne informacije: Primjer izmjene programa Access
Da biste poništili dijeljenje zapisa, upotrijebite RevokeAccess
poruku. Sa SDK-om koristite klasu RevokeAccessRequest, a s web-API-jem koristite akciju RevokeAccess. Dodatne informacije: Opoziv pristupa
Izvozni tokovi
Kada je tijek dio rješenja, možete ga izvesti izvozom rješenja koje sadrži tijek pomoću ExportSolution
poruke.
Sljedeći statički ExportSolution
primjer metode koristi ExportSolutionRequest za dohvaćanje datoteke byte[]
koja 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;
}
Uvozni tokovi
Kada imate ZIP datoteku rješenja, možete je uvesti pomoću ImportSolution
poruke.
Kada uvozite tijekove, trebali biste postaviti sljedeće parametre:
Naziv svojstva | Opis |
---|---|
OverwriteUnmanagedCustomizations |
Ako postoje instance tih tokova Dataverse, ovu zastavicu treba postaviti na da true biste ih uvezli. Inače se ne prepisuju. |
PublishWorkflows |
Označava jesu li klasični Dataverse tijekovi rada aktivirani prilikom uvoza. Ta se postavka ne primjenjuje na druge vrste tijekova. |
CustomizationFile |
Osnovna zip datoteka kodirana 64 koja sadrži rješenje. |
Metoda statičkog ImportSolution
ogleda 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);
}
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 Dataverse web-API-je za Power Automate prethodno dokumentirane u ovom članku.
Alternativno, korisnici mogu koristiti upravljačke poveznike: Power Automate Upravljanje ili Power Automate za administratore.
Korisnici mogu koristiti nepodržane API-je na api.flow.microsoft.com
vlastitu odgovornost. Ti su API-ji podložni promjenama, pa se mogu pojaviti prijelomne promjene.
Povezane informacije
Operacije klase entiteta pomoću servisa tvrtke ili ustanove
Izvođenje operacija pomoću web-API-ja
Dijeljenje i dodjeljivanje
Provjera pristupa u kodu
Rad s rješenjima pomoću SDK-a Dataverse