Zdieľať cez


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ácia
3 - Š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