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ích procesů.
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 – Aktivace.
3 – Š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.

Statická ukázková metoda ExportSolution níže používá ExportSolutionRequest k načtení byte[] obsahujícího soubor ZIP nespravovaného řešení se zadanou hodnotou 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);
}

Viz také

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