Práce s cloudovými toky pomocí kódu
Všechny toky jsou uloženy v Dataverse a k jejich správě můžete použít sadu Dataverse SDK pro .NET nebo webové rozhraní API.
Tato část se zabývá správou toků, které jsou v Power Automate na kartě Řešení. V současnosti platí, že správu toků v sekci Moje toky nelze provádět pomocí kódu.
Interakce s rozhraními Dataverse API
Dataverse poskytuje ekvivalentní možnosti pomocí sady Dataverse SDK pro .NET nebo webového rozhraní API.
Kterou metodu mám použít?
Nejlepší metoda závisí na technologii projektu a dovednostech, které máte.
Pokud váš projekt používá .NET, doporučujeme použít SDK. Sada SDK zjednodušuje vývojové prostředí tím, že poskytuje typizovaný objektový model a metody ověřování.
Další informace: Použití služby organizace
Jak se připojit?
Způsob připojení závisí na tom, zda používáte sadu Dataverse SDK pro .NET nebo webové rozhraní API.
Pomocí sady SDK se musíte připojit ke klientské aplikaci, abyste získali přístup k instanci IOrganizationService. IOrganizationService
je rozhraní, které poskytuje metody, které můžete použít k interakci s Dataverse.
Další informace:
Tabulka pracovního postupu
Cloudové toky jsou uloženy v tabulce Proces (pracovní postup), která je ve webovém rozhraní API reprezentována jako EntityType pracovního postupu.
Následující tabulka popisuje důležité sloupce v tabulce pracovního postupu:
Logický název | Type | Description |
---|---|---|
category |
Výběr | Kategorie toku. Zde jsou různé kategorie. 0 - Klasické pracovní postupy Dataverse.1 – Klasická dialogová okna Dataverse. 2 - Obchodní pravidla. 3 – Klasické akce Dataverse. 4 - Toky obchodního procesu. 5 – Moderní tok (automatizovaný, okamžitý nebo plánovaný).6 - Desktopové toky. |
clientdata |
Řetězcové | Řetězcem zakódovaný JSON definice toku a jeho connectionReferences. |
createdby |
Vyhledání | Uživatel, který tok vytvořil. |
createdon |
DateTime | Datum vytvoření toku. |
description |
Řetězcové | Popis toku zadaný uživatelem. |
ismanaged |
Bool | Znamená, že tok byl nainstalovaný prostřednictvím spravovaného řešení. |
modifiedby |
Vyhledání | Poslední uživatel, který tok aktualizoval. |
modifiedon |
DateTime | Čas poslední aktualizace toku. |
name |
Řetězcové | Zobrazovaný název, který jste toku dali. |
ownerid |
Vyhledání | Uživatel nebo tým, který vlastní tento tok. |
statecode |
Výběr | Stav toku. Stav může být:0 – Koncept (vypnuto).1 – Aktivováno (zapnuto)2 - pozastaveno. |
type |
Výběr | Určuje, jestli je tok spuštěný nebo se jedná o šablonu, kterou můžete použít k vytvoření dalších toků. 1 - Definice,2 – Aktivace3 - Šablona. |
workflowid |
Identifikátor GUID | Jedinečný identifikátor cloudového toku ve všech importech. |
workflowidunique |
Identifikátor GUID | Jedinečný identifikátor této instalace toku. |
Poznámka:
S webovým rozhraní API jsou hodnoty vyhledávání jednohodnotové navigační vlastnosti, které lze rozšířit a získat podrobnosti ze souvisejícího záznamu.
Vyhledávací sloupce mají také odpovídající vlastnosti vyhledávání identifikátoru GUID, které lze použít v dotazech. Vyhledávací vlastnosti mají tuto konvenci pojmenování: _<logical name>_value
. Pro entitytype pracovního postupu ve webovém rozhraní API můžete odkazovat na tyto vyhledávací vlastnosti: _createdby_value
, _modifiedby_value
a _ownerid_value
.
Zobrazit toky
Chcete-li načíst seznam cloudových toků, můžete se dotazovat na tabulku pracovních postupů. Následující dotaz vrátí první automatický, okamžitý nebo plánovaný tok, který je momentálně „zapnutý“:
Tato statická metoda OutputFirstActiveFlow
vyžaduje ověřeného klienta, který implementuje IOrganizationService. Využívá metodu 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"]}");
}
Chcete-li načíst více záznamů, odstraň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
Další informace:
Vytvoření cloudového toku
Požadované vlastnosti u automatických, okamžitých a plánovaných toků jsou: category
, name
, type
, primaryentity
a clientdata
. U těchto typů toků nastavte vlastnost none
na primaryentity
.
Tato statická metoda vyžaduje ověřeného klienta, který implementuje IOrganizationService. Využívá 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);
}
Další informace: Vytváření řádek tabulky pomocí služby organizace
Parametr statecode
všech toků vytvořených tímto způsobem je nastaven na 0
(Koncept nebo „Vypnuto“). Před použitím je třeba tok povolit.
Nejdůležitější vlastností je clientdata
, která obsahuje connectionReferences
používanou tokem, a definici toku. Položka connectionReferences
mapuje každé připojení, které tok používá.
{
"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"
}
Aktualizace cloudového toku
Chcete-li tok aktualizovat, nastavte pouze vlastnosti, které chcete změnit.
Tato statická metoda vyžaduje ověřeného klienta, který implementuje IOrganizationService. K aktualizaci popisu toku a nastavení vlastníka používá metodu 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);
}
Další informace: Aktualizace a odstranění řádků tabulky pomocí voleb Služba organizace > Základní aktualizace
Odstranění cloudového toku
Následující příklady ukazují, jak odstranit záznam pracovního postupu, který představuje cloudový tok.
Statická metoda DeleteCloudFlow
odstraní záznam pracovního postupu.
/// <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);
}
Další informace: Odstranění záznamu pomocí sady SDK
Získání všech uživatelů se kterými je cloudový tok sdílen
Pomocí zprávy RetrieveSharedPrincipalsAndAccess
získáte seznam všech uživatelů, se kterými je cloudový tok sdílen.
Se sadou SDK použijte třídu RetrieveSharedPrincipalsAndAccessRequest a s webovým rozhraním API použijte funkci RetrieveSharedPrincipalsAndAccess.
Další informace: Získání objektů zabezpečení s přístupem k záznamu
Sdílení cloudového toku a zrušení jeho sdílení
Sdílejte cloudový tok jako každý jiný záznam Dataverse pomocí zprávy GrantAccess
. Se sadou SDK použijte třídu GrantAccessRequest a s webovým rozhraním API použijte akci GrantAccess. Další informace: Příklad funkce GrantAccess
Pokud chcete změnit přístupová práva, která udělujete při sdílení záznamu, použijte zprávu ModifyAccess
. Se sadou SDK použijte třídu ModifyAccessRequest a s webovým rozhraním API použijte akci ModifyAccess. Další informace: Příklad funkce ModifyAccess
Chcete-li zrušit sdílení záznamu, použijte zprávu RevokeAccess
. Se sadou SDK použijte třídu RevokeAccessRequest a s webovým rozhraním API použijte akci RevokeAccess. Další informace: Odejmutí přístupu
Export toků
Když je tok součástí řešení, můžete jej exportovat exportováním řešení, které tok obsahuje, pomocí zprávy ExportSolution
.
Následující statická ukázková metoda ExportSolution
používá ExportSolutionRequest k načtení byte[]
obsahujícího soubor ZIP nespravovaného řešení se zadaným 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;
}
Import toků
Když máte soubor ZIP řešení, můžete jej importovat pomocí zprávy ImportSolution
.
Při importu toků byste měli nastavit následující parametry:
Název vlastnosti | Description |
---|---|
OverwriteUnmanagedCustomizations |
Pokud existují instance toků ve službě Dataverse, musí být tento příznak nastaven na hodnotu true , aby bylo možné je importovat. Jinak se toky nepřepíší. |
PublishWorkflows |
Znamená, že se při importu aktivují klasické pracovní postupy Dataverse. U jiných typů toků se toto nastavení nepoužije. |
CustomizationFile |
Soubor ZIP v kódování Base 64, který obsahuje řešení. |
Statická ukázková metoda ImportSolution
ukazuje, jak importovat soubor řešení pomocí třídy 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);
}
Často kladené dotazy
A co rozhraní API v api.flow.microsoft.com?
Rozhraní API v api.flow.microsoft.com není podporováno. Zákazníci by místo toho měli používat webová rozhraní API Dataverse pro Power Automate zdokumentované výše v tomto článku.
Alternativně mohou zákazníci použít konektory pro správu: Správa Power Automate nebo Power Automate pro správce.
Zákazníci mohou používat nepodporovaná rozhraní API na api.flow.microsoft.com
na vlastní nebezpečí. Tato rozhraní API se můžou změnit, takže může dojít k zásadním změnám.
Související informace
Operace třídy entit pomocí služby organizace
Provádění operací pomocí webového rozhraní API
Sdílení a přiřazování
Ověření přístupu v kódu
Práce s řešeními pomocí sady Dataverse SDK