Zdieľať cez


Práca s postupmi v cloude pomocou programovania

Všetky postupy sú uložené v Dataverse a na ich správu môžete použiť buď Dataverse SDK pre .NET, alebo webové API.

Tento článok sa zaoberá správou postupov zahrnutých na karte Riešenia v . Power Automate Správa postupov v časti Moje postupy v súčasnosti nie je podporovaná kódom.

Interakcia s API Dataverse

Dataverse poskytuje ekvivalentné možnosti pomocou buď sady SDK pre .NET, alebo webového rozhrania API. Dataverse

Ktorú 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. Sada SDK zjednodušuje vývojársky proces tým, že poskytuje typovaný objektový model a metódy na autentifikáciu.

Viac informácií: Použite službu Organizácia

Ako sa pripojiť?

Spôsob pripojenia závisí od toho, či používate sadu SDK pre .NET alebo webové API. Dataverse

Pomocou SDK sa musíte pripojiť ku klientskej aplikácii, aby ste získali prístup k inštancii služby IOrganizationService. ... IOrganizationService je rozhranie, ktoré poskytuje metódy, ktoré môžete použiť na interakciu s Dataverse.

Ďalšie informácie:

Tabuľka pracovného postupu

Cloudové toky sú uložené v tabuľke Proces (Workflow) , ktorá je vo webovom API reprezentovaná ako typ entity workflow

Nasledujúca tabuľka popisuje dôležité stĺpce v tabuľke pracovného postupu:

Logický názov Type Description
category Voľba Kategória postupu. Tu sú rôzne kategórie.
0 - Klasické pracovné postupy. Dataverse
1 - Klasické dialógy. Dataverse
2 - Obchodné pravidlá.
3 - Klasické Dataverse akcie.
4 - Toky obchodných procesov.
5 - Modern Flow (Automatizované, okamžité alebo plánované toky).
6 - Postupy na pracovnej ploche.
clientdata String Súbor JSON s definíciou toku a jej odkazmi na pripojenie s kódovaním reťazca.
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 priradili toku.
ownerid Vyhľadávanie Používateľ alebo tím, ktorý vlastní tok.
statecode Voľba Stav postupu. Stav môže byť:
0 - Návrh (Vypnuté)
1 - Aktivované (Zapnuté)
2 - Pozastavené.
type Voľba Označuje, či je tok spustený tok alebo šablóna, ktorú možno použiť na vytvorenie ďalší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ú vyhľadávacie hodnoty jednohodnotové navigačné vlastnosti , ktoré je možné rozšíriť a získať tak podrobnosti zo súvisiaceho záznamu.

Vyhľadávacie stĺpce majú tiež zodpovedajúce vyhľadávacie vlastnosti GUID, 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 použiť 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 dopyt vráti prvý automatizovaný, okamžitý alebo plánovaný postup, ktorý je momentálne „zapnutý“:

Táto statická metóda vyžaduje overeného klienta, ktorý implementuje metódu OutputFirstActiveFlow . 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 načítať 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é postupy sú: category, name, type, primaryentity a clientdata. Pre tieto typy tokov použite none pre primaryentity .

Táto statická metóda vyžaduje overené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);
}

Viac informácií: Vytvorenie riadkov tabuľky pomocou služby Organization Service

Všetky takto vytvorené postupy sú nastavené na stav „Koncept“ alebo „Vypnuté“. statecode0 Pred použitím je potrebné povoliť tok.

Najdôležitejšou vlastnosťou je ** clientdata**, ktorá obsahuje **to, čo tok používa** a **definíciu** toku. connectionReferences... Sú to mapovania ku každému pripojeniu, ktoré tok používa. connectionReferences

{
  "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 aktualizovať postup, nastavte iba vlastnosti, ktoré chcete zmeniť.

Táto statická metóda vyžaduje overeného klienta, ktorý implementuje ` IOrganizationService`. Používa metódu IOrganizationService.Update na aktualizáciu popisu toku a nastavenie vlastníka.

/// <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);
}

Viac informácií: Aktualizácia a odstránenie riadkov tabuľky pomocou služby Organization Service > Základná aktualizácia

Odstránenie postupu v cloude

Nasledujúce príklady ukazujú, ako odstrániť záznam pracovného postupu, ktorý predstavuje cloudový tok.

Metóda static DeleteCloudFlow vymaže 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);

}

Viac informácií: Odstránenie záznamu pomocou SDK

Získajte zoznam všetkých používateľov, s ktorými zdieľate postup v cloude

Pomocou správy RetrieveSharedPrincipalsAndAccess zobrazíte zoznam všetkých používateľov, s ktorými je cloudový tok zdieľaný.

V prípade SDK použite triedu RetrieveSharedPrincipalsAndAccessRequest a v prípade webového API použite funkciu RetrieveSharedPrincipalsAndAccess.

Viac informácií: Získanie prístupu k záznamu pre riaditeľov

Zdieľanie postupu v cloude alebo zrušenie zdieľania

Zdieľajte cloudový tok ako akýkoľvek iný záznam pomocou správy. Dataverse GrantAccess V SDK použite triedu GrantAccessRequest a v rozhraní Web 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 . V SDK použite triedu ModifyAccessRequest a v webovom API použite akciu ModifyAccess. Viac informácií: Príklad ModifyAccess

Ak chcete zrušiť zdieľanie záznamu, použite správu. RevokeAccess V SDK použite triedu RevokeAccessRequest a v webovom API použite akciu RevokeAccess. Viac informácií: Zrušenie prístupu

Exportovanie postupov

Keď je tok súčasťou riešenia, môžete ho exportovať exportovaním riešenia, ktoré obsahuje tok, pomocou správy ExportSolution .

Nasledujúca statická metóda používa metódu ExportSolutionRequest na načítanie súboru obsahujúceho súbor ZIP nespravovaného riešenia so zadaným jedinečným názvom UniqueName. ExportSolution...byte[]...

/// <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 ZIP súbor s riešením, môžete ho importovať pomocou správy ImportSolution .

Pri importovaní postupov by ste mali nastaviť nasledujúce parametre:

Názov vlastnosti Description
OverwriteUnmanagedCustomizations Ak existujú inštancie týchto postupov v Dataverse, tento príznak je potrebné nastaviť na true , aby sa dali importovať. Inak sa neprepíšu.
PublishWorkflows Označuje, či sú pri importe aktivované klasické pracovné postupy. Dataverse Toto nastavenie sa nevzťahuje na iné typy postupov.
CustomizationFile Súbor .zip s kódovaním base 64, ktorý obsahuje riešenie.

Statická ukážková metóda ukazuje, ako importovať súbor riešenia pomocou triedy ImportSolutionRequest ImportSolution...

/// <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?

API na adrese api.flow.microsoft.com nie je podporované. Zákazníci by namiesto toho mali používať webové rozhrania API, ktoré sú uvedené v tomto článku. Dataverse Power Automate

Zákazníci môžu alternatívne použiť konektory pre správu: Power Automate Správa alebo Power Automate Pre správcov.

Zákazníci môžu používať nepodporované rozhrania API na vlastné riziko. api.flow.microsoft.com Tieto API sa môžu zmeniť, takže môžu nastať závažné zmeny.

Operácie triedy entít pomocou služby Organizácia
Vykonávanie operácií pomocou webového rozhrania API
Zdieľanie a priradenie
Overenie prístupu v kóde
Práca s riešeniami pomocou súpravy SDK Dataverse