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