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 |
Booleovský | 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 dali toku. |
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
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: Aktualizácia a odstránenie riadkov 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 postup v cloude.
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 postup v cloude zdieľa.
So súpravou SDK použite triedu RetrieveSharedPrincipalsAndAccessRequest a s 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 postup v cloude 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
.
Nasledujúca statická ExportSolution
príkladová metóda používa ExportSolutionRequest na načítanie 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 importe 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 nie sú prepísané. |
PublishWorkflows |
Označuje, či sú pri importe aktivované klasické Dataverse pracovné postupy. 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);
}
Najčastejšie otázky
A čo API na api.flow.microsoft.com?
Rozhranie API na adrese api.flow.microsoft.com nie je podporované. Zákazníci by namiesto toho mali používať Dataverse Webové rozhrania API pre Power Automate zdokumentované vyššie v tomto článku.
Zákazníci môžu prípadne použiť konektory na správu: Power Automate Správa alebo Power Automate pre správcov.
Zákazníci môžu používať nepodporované rozhrania API na api.flow.microsoft.com
na vlastné riziko. Tieto rozhrania API podliehajú zmenám, takže môže dôjsť k zlomovým zmenám.
Súvisiace informácie
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