Delo s tokovi za oblak z uporabo kode
Vsi tokovi so shranjeni v Dataverse in za njihovo upravljanje lahko uporabite Dataverse SDK za .NET ali spletni API.
Ta članek pokriva upravljanje tokov, vključenih na zavihek Rešitve v Power Automate. Trenutno upravljanje tokov pod Moji tokovi ni podprto s kodo.
Interakcija z Dataverse API-ji
Dataverse zagotavlja enakovredne zmogljivosti z uporabo Dataverse SDK za .NET ali Web API.
Katero metodo naj uporabim?
Najboljša metoda je odvisna od projektne tehnologije in veščin, ki jih imate.
Če vaš projekt uporablja .NET, priporočamo uporabo SDK. SDK poenostavlja vašo razvojno izkušnjo z zagotavljanjem vnesenega objektnega modela in metod za preverjanje pristnosti.
Več informacij: Uporabite storitev Organizacija
Kako se povezati?
Način povezovanja je odvisen od tega, ali uporabljate Dataverse SDK za .NET ali spletni API.
S SDK-jem se morate povezati z odjemalsko aplikacijo, da dobite dostop do primerka IOrganizationService .
IOrganizationService
je vmesnik, ki ponuja metode, ki jih lahko uporabite za interakcijo z Dataverse.
Več informacij:
Tabela poteka dela
Tokovi v oblaku so shranjeni v tabeli procesa (delovni tok) ki je v spletnem API-ju predstavljena kot delovni tok EntityType
Naslednja tabela opisuje pomembne stolpce v tabeli poteka dela:
Logično ime | Vnesi | Description |
---|---|---|
category |
Možnost | Kategorija toka. Tukaj so različne kategorije. 0 - Klasični Dataverse poteki dela.1 - Klasična Dataverse pogovorna okna. 2 - Poslovna pravila. 3 - Klasične Dataverse akcije. 4 - Tokovi poslovnih procesov. 5 - Modern Flow (avtomatizirani, takojšnji ali načrtovani tokovi).6 - Namizni tokovi. |
clientdata |
String | Z nizom kodiran JSON definicije toka in njegove povezave References. |
createdby |
Lookup | Uporabnik, ki je ustvaril tok. |
createdon |
Datum/ura | Datum, ko je bil tok ustvarjen. |
description |
String | Uporabniški opis toka. |
ismanaged |
Bool | Označuje, ali je bil tok nameščen prek upravljana rešitev. |
modifiedby |
Lookup | Zadnji uporabnik, ki je posodobil tok. |
modifiedon |
Datum/ura | Zadnjič je bil tok posodobljen. |
name |
String | Prikazno ime, ki ste ga dali tok. |
ownerid |
Lookup | Uporabnik ali ekipa, ki je lastnik toka. |
statecode |
Možnost | Stanje toka. Status je lahko:0 - Osnutek (izklopljeno)1 - Aktivirano (vklopljeno)2 - Suspendiran. |
type |
Možnost | Označuje, ali je tok tekoči tok ali predloga, ki jo je mogoče uporabiti za ustvarjanje več tokov. 1 - Opredelitev,2 - Aktivacija3 - Predloga. |
workflowid |
Guid | Enolični identifikator za tok za oblak pri vseh uvozih. |
workflowidunique |
Guid | Enolični identifikator za to namestitev toka. |
opomba,
Pri spletnem API-ju so iskalne vrednosti navigacijske lastnosti z eno vrednostjo ki jih je mogoče razširiti, da pridobijo podrobnosti iz povezanega zapisa.
Iskalni stolpci imajo tudi ustrezne GUID lastnosti iskanja ki jih je mogoče uporabiti v poizvedbah. Lastnosti iskanja imajo ta dogovor o poimenovanju: _<logical name>_value
. Za tip entitete poteka dela v spletnem API-ju se lahko sklicujete na te lastnosti iskanja: _createdby_value
, _modifiedby_value
in _ownerid_value
.
Prikaz tokov
Če želite pridobiti seznam tokov v oblaku, lahko poizvedujete po tabeli delovnega toka. Naslednja poizvedba vrne prvi samodejni, takojšnji ali načrtovani tok, ki je trenutno "vklopljen":
Ta statična OutputFirstActiveFlow
metoda zahteva overjenega odjemalca, ki izvaja IOrganizationService. Uporablja metodo 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"]}");
}
Če želite pridobiti več zapisov, odstranite omejitev TopCount .
Rezultat
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
Več informacij:
Ustvari tok za oblak
Zahtevane lastnosti za avtomatizirane, takojšnje in načrtovane tokove so: category
, name
, type
, primaryentity
in clientdata
. Uporabite none
za primaryentity
za te vrste tokov.
Ta statična metoda zahteva overjenega odjemalca, ki izvaja IOrganizationService. Uporablja metodo 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);
}
Več informacij: Ustvarite vrstice tabele s storitvijo Organisation Service
statecode
vseh tokov, ustvarjenih na ta način, so nastavljeni na 0
(Osnutek ali 'Izklopljeno'). Pretok mora biti omogočen, preden ga lahko uporabite.
Najpomembnejša lastnost je clientdata
, ki vsebuje connectionReferences
ki ga tok uporablja, in definicijo toka. connectionReferences
so preslikave za vsako povezavo, ki jo uporablja tok.
{
"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"
}
Posodobite tok za oblak
Če želite posodobiti tok, nastavite samo lastnosti, ki jih želite spremeniti.
Ta statična metoda zahteva overjenega odjemalca, ki izvaja IOrganizationService. Za posodobitev opisa toka in nastavitev lastnika uporablja metodo IOrganizationService.Update .
/// <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);
}
Več informacij: Posodobite in izbrišite vrstice tabele z uporabo organizacijske storitve > Osnovna posodobitev
Izbrišite tok za oblak
Naslednji primeri prikazujejo, kako izbrisati zapis delovnega toka, ki predstavlja tok za oblak.
Statična DeleteCloudFlow
metoda izbriše zapis poteka dela.
/// <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);
}
Več informacij: Izbrišite zapis s SDK
Pridobite vse uporabnike, s katerimi je tok za oblak v skupni rabi
Uporabite RetrieveSharedPrincipalsAndAccess
sporočilo, da dobite seznam vseh uporabnikov, s katerimi je tok za oblak v skupni rabi.
S SDK uporabite RetrieveSharedPrincipalsAndAccessRequest Class, s spletnim API-jem pa RetrieveSharedPrincipalsAndAccess Function.
Več informacij: Zagotovite ravnateljem dostop do zapisa
Delite ali prekličite skupno rabo tok za oblak
Delite tok za oblak kot vsak drug Dataverse zapis z uporabo GrantAccess
sporočila. S SDK uporabite GrantAccessRequest Class in s spletnim API-jem GrantAccess Action. Več informacij: Primer GrantAccess
Če želite spremeniti pravice dostopa, ki jih podelite, ko delite zapis, uporabite ModifyAccess
sporočilo. S SDK uporabite ModifyAccessRequest Class in s spletnim API-jem ModifyAccess Action. Več informacij: Primer ModifyAccess
Če želite preklicati skupno rabo zapisa, uporabite RevokeAccess
sporočilo. S SDK-jem uporabite razred RevokeAccessRequest in s spletnim API-jem uporabite dejanje RevokeAccess. Več informacij: Preklic dostopa
Izvozni tokovi
Ko je tok del rešitve, ga lahko izvozite tako, da izvozite rešitev, ki vsebuje tok, s sporočilom ExportSolution
.
Metoda statičnega ExportSolution
primera spodaj uporablja ExportSolutionRequest za pridobitev byte[]
ki vsebuje datoteko ZIP neupravljane rešitve z določeno 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
Ko imate ZIP datoteko rešitve, jo lahko uvozite s sporočilom ImportSolution
.
Ko uvažate tokove, morate nastaviti naslednje parametre:
Ime lastnosti | Description |
---|---|
OverwriteUnmanagedCustomizations |
Če v Dataverse obstajajo primerki teh tokov, je treba to zastavico nastaviti na true , da jih uvozite. V nasprotnem primeru ne bodo prepisani. |
PublishWorkflows |
Označuje, ali bodo pri uvozu aktivirani klasični Dataverse poteki dela. Ta nastavitev ne velja za druge vrste tokov. |
CustomizationFile |
Datoteka zip z osnovnim 64 kodiranjem, ki vsebuje rešitev. |
Statična ImportSolution
vzorčna metoda prikazuje, kako uvoziti datoteko rešitve z uporabo razreda 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);
}
Sorodne informacije
Operacije razreda entitet z uporabo storitve Organizacija
Izvajajte operacije z uporabo spletnega API-ja
Deljenje in dodeljevanje
Preverjanje dostopa v kodi
Delajte z rešitvami, ki uporabljajo Dataverse SDK