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 -Definicija2 -Aktivacija3 -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