Práca s postupmi v cloude pomocou programovania
Všetky toky sú uložené v Dataverse a na ich správu môžete použiť súpravu Dataverse SDK for .NET alebo Web API.
Tento článok sa zaoberá správou tokov zahrnutých na karte Riešenia na karte Power Automate. V súčasnosti nie je kódom podporovaná správa tokov v časti Moje toky .
Interakcia s Dataverse API
Dataverse poskytuje ekvivalentné možnosti pomocou súpravy Dataverse SDK for .NET alebo Web API.
Akú metódu mám použiť?
Najlepšia metóda závisí od technológie projektu a vašich zručností.
Ak váš projekt používa .NET, odporúčame použiť SDK. SDK zjednodušuje vaše skúsenosti s vývojom tým, že poskytuje typizovaný objektový model a metódy autentifikácie.
Viac informácií: Využite službu Organizácia
Ako sa pripojiť?
Spôsob pripojenia závisí od toho, či používate Dataverse SDK for .NET alebo Web API.
Pomocou súpravy SDK sa musíte pripojiť ku klientskej aplikácii, aby ste získali prístup k inštancii IOrganizationService . IOrganizationService
je rozhranie, ktoré poskytuje metódy, ktoré môžete použiť na interakciu s Dataverse.
Ďalšie informácie:
Tabuľka pracovných postupov
Cloudové toky sú uložené v tabuľke Proces (Workflow) , ktorá je vo webovom rozhraní API reprezentovaná ako EntityType pracovného postupu
Nasledujúca tabuľka popisuje dôležité stĺpce v tabuľke pracovného toku:
Logický názov | Type | Description |
---|---|---|
category |
Voľba | Kategória postupu. Tu sú rôzne kategórie. 0 - Klasické Dataverse pracovné postupy.1 - Klasické Dataverse dialógy. 2 - Obchodné pravidlá. 3 - Klasické Dataverse akcie. 4 - Toky obchodných procesov. 5 - Moderný tok (automatické, okamžité alebo plánované toky).6 - Toky pracovnej plochy. |
clientdata |
String | Reťazec zakódovaný JSON definície toku a jeho odkazov na pripojenie. |
createdby |
Vyhľadávanie | Používateľ, ktorý vytvoril postup. |
createdon |
Dátum a čas | Dátum vytvorenia postupu. |
description |
String | Popis postupu zadaný používateľom. |
ismanaged |
Bool | Udáva, či bol postup nainštalovaný prostredníctvom spravovaného riešenia. |
modifiedby |
Vyhľadávanie | Posledný používateľ, ktorý aktualizoval postup. |
modifiedon |
Dátum a čas | Posledná aktualizácia postupu. |
name |
String | Zobrazovaný názov, ktorý ste zadali postupu. |
ownerid |
Vyhľadávanie | Používateľ alebo tím, ktorý vlastní tok. |
statecode |
Voľba | Stav postupu. Stav môže byť:0 - Koncept (vypnuté)1 - Aktivované (zapnuté)2 - Pozastavené. |
type |
Voľba | Označuje, či je tok bežiaci tok alebo šablóna, ktorú možno použiť na vytvorenie viacerých tokov. 1 - definícia,2 - Aktivácia3 - Šablóna. |
workflowid |
GUID | Jedinečný identifikátor postupu v cloude v rámci všetkých importov. |
workflowidunique |
GUID | Jedinečný identifikátor tejto inštalácie postupu. |
Poznámka
Pomocou webového rozhrania API sú hodnoty vyhľadávania jednohodnotové vlastnosti navigácie , ktoré možno rozšíriť a získať podrobnosti zo súvisiaceho záznamu.
Vyhľadávacie stĺpce majú tiež zodpovedajúce GUID vlastnosti vyhľadávania , ktoré možno použiť v dotazoch. Vyhľadávacie vlastnosti majú túto konvenciu pomenovania: _<logical name>_value
. Pre typ entity pracovného postupu vo webovom rozhraní API môžete odkazovať na tieto vyhľadávacie vlastnosti: _createdby_value
, _modifiedby_value
a _ownerid_value
.
Zobrazenie zoznamu postupov
Ak chcete získať zoznam cloudových tokov, môžete dotazovať tabuľku pracovných tokov. Nasledujúci dotaz vráti prvý automatický, okamžitý alebo naplánovaný tok, ktorý je momentálne „zapnutý“:
Táto statická OutputFirstActiveFlow
metóda vyžaduje autentifikovaného klienta, ktorý implementuje IOrganizationService. Používa metódu 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"]}");
}
Ak chcete získať viac záznamov, odstráňte limit TopCount .
Výstup
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
Ďalšie informácie:
Vytvorenie postupu v cloude
Požadované vlastnosti pre automatizované, okamžité a plánované toky sú: category
, name
, type
, primaryentity
a clientdata
. Pre tieto typy tokov použite none
pre primaryentity
.
Táto statická metóda vyžaduje autentifikovaného klienta, ktorý implementuje IOrganizationService. Používa metódu 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);
}
Ďalšie informácie: Vytvorte riadky tabuľky pomocou organizačnej služby
Všetky statecode
všetky toky vytvorené týmto spôsobom sú nastavené na 0
(Koncept alebo 'Vypnuté'). Pred použitím je potrebné povoliť tok.
Najdôležitejšou vlastnosťou je clientdata
, ktorá obsahuje connectionReferences
ktoré tok používa, a definíciu toku. connectionReferences
sú priradenia ku každému pripojeniu, ktoré tok používa.
{
"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"
}
Aktualizácia postupu v cloude
Ak chcete tok aktualizovať, nastavte iba vlastnosti, ktoré chcete zmeniť.
Táto statická metóda vyžaduje autentifikovaného klienta, ktorý implementuje IOrganizationService. Na aktualizáciu popisu toku a nastavenie vlastníka používa metódu 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);
}
Ďalšie informácie: Aktualizujte a odstráňte riadky tabuľky pomocou organizačnej služby > Základná aktualizácia
Odstránenie postupu v cloude
Nasledujúce príklady ukazujú, ako odstrániť záznam pracovného toku, ktorý predstavuje cloudový tok.
Statická metóda DeleteCloudFlow
vymaže záznam pracovného toku.
/// <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);
}
Ďalšie informácie: Odstráňte záznam pomocou súpravy SDK
Získajte zoznam všetkých používateľov, s ktorými zdieľate postup v cloude
Pomocou správy RetrieveSharedPrincipalsAndAccess
získate zoznam všetkých používateľov, s ktorými sa zdieľa cloudový tok.
So súpravou SDK použite triedu RetrieveSharedPrincipalsAndAccessRequest as webovým rozhraním API použite RetrieveSharedPrincipalsAndAccess Function.
Ďalšie informácie: Získajte riaditeľov s prístupom k záznamu
Zdieľanie postupu v cloude alebo zrušenie zdieľania
Zdieľajte cloudový tok ako každý iný Dataverse záznam pomocou GrantAccess
správy. So súpravou SDK použite triedu GrantAccessRequest a s webovým rozhraním API použite Akciu GrantAccess. Viac informácií: Príklad GrantAccess
Ak chcete zmeniť prístupové práva, ktoré udeľujete pri zdieľaní záznamu, použite správu ModifyAccess
. So súpravou SDK použite triedu ModifyAccessRequest a s webovým rozhraním API použite Akciu ModifyAccess. Viac informácií: Príklad ModifyAccess
Ak chcete zrušiť zdieľanie záznamu, použite správu RevokeAccess
. So súpravou SDK použite triedu RevokeAccessRequest a s webovým rozhraním API použite Akciu RevokeAccess. Ďalšie informácie: Odvolanie prístupu
Exportovanie postupov
Keď je tok súčasťou riešenia, môžete ho exportovať exportovaním riešenia, ktoré tok obsahuje, pomocou správy ExportSolution
.
Statická ExportSolution
príkladová metóda uvedená nižšie používa ExportSolutionRequest na získanie súboru byte[]
obsahujúceho súbor ZIP nespravovaného riešenia so zadaným Jedinečný názov.
/// <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;
}
Importovanie postupov
Keď máte súbor ZIP s riešením, môžete ho importovať pomocou správy ImportSolution
.
Pri importovaní tokov by ste mali nastaviť nasledujúce parametre:
Názov vlastnosti | Description |
---|---|
OverwriteUnmanagedCustomizations |
Ak existujú existujúce inštancie týchto tokov v Dataverse, tento príznak je potrebné nastaviť na true , aby sa mohli importovať. V opačnom prípade nebudú prepísané. |
PublishWorkflows |
Udáva, či budú klasické pracovné postupy v službe Dataverse po importovaní aktivované. Toto nastavenie sa nevzťahuje na iné typy postupov. |
CustomizationFile |
Súbor .zip s kódovaním base 64, ktorý obsahuje riešenie. |
Statická vzorová metóda ImportSolution
ukazuje, ako importovať súbor riešenia pomocou triedy 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);
}
Pozrite si tiež
Operácie triedy entít pomocou služby Organizácia
Vykonávajte operácie pomocou webového rozhrania API
Zdieľanie a priraďovanie
Overenie prístupu v kóde
Pracujte s riešeniami pomocou súpravy Dataverse SDK