Поділитися через


Робота з хмарними циклами за допомогою коду

Усі потоки зберігаються в, Dataverse і ви можете використовувати Dataverse SDK для .NET або Web API для керування ними.

У цій статті ми розглянемо керування потоками, які містяться на вкладці «Рішення » Power Automate. Наразі керування ланцюжками в розділі «Мої ланцюжки » не підтримується за допомогою коду.

Взаємодія з Dataverse API

Dataverse надає еквівалентні Dataverse можливості з використанням SDK для .NET або Web API.

Який метод слід використовувати?

Найкращий метод залежить від технології проекту та навичок, якими ви володієте.

Якщо ваш проект використовує .NET, ми рекомендуємо використовувати SDK. SDK спрощує процес розробки, надаючи типізовану об’єктну модель і методи для автентифікації.

Докладніше: Скористайтесь послугою «Організація»

Як підключити?

Спосіб підключення залежить від того, Dataverse чи використовуєте ви SDK для .NET або Web API.

За допомогою SDK вам потрібно підключитися до клієнтської програми, щоб отримати доступ до екземпляра IOrganizationService . IOrganizationService — це інтерфейс, який надає методи, з Dataverse якими ви можете взаємодіяти.

Додаткові відомості:

Таблиця документообігу

Хмарні потоки зберігаються в таблиці Process (Workflow), яка представлена у веб-API як тип сутності робочого процесу

У наведеній нижче таблиці описано важливі стовпці в таблиці робочих процесів:

Логічне ім’я Ввести Опис
category Вибір Категорія протікання. Ось різні категорії.
0 - Класичні Dataverse робочі процеси.
1 - Класичні Dataverse діалоги.
2 - Правила ведення бізнесу.
3 - Класичні Dataverse дії.
4 - Потоки бізнес-процесів.
5 - Сучасний потік (автоматичні, миттєві або заплановані потоки).
6 - Настільні потоки.
clientdata String Закодований рядком JSON визначення потоку та його посилання на з’єднання.
createdby Підстановка Користувач, який створив потік.
createdon DateTime Дата створення потоку.
description String Опис потоку, наданий користувачем.
ismanaged Логічне значення Вказує, чи потік було встановлено через кероване рішення.
modifiedby Підстановка Останній користувач, який оновив потік.
modifiedon DateTime Востаннє потік оновлювався.
name String Відображуване ім’я, яке ви дали потоку.
ownerid Підстановка Користувач або команда, яка володіє потоком.
statecode Вибір Статус потоку. Статус може бути:
0 - Чернетка (Вимк.)
1 - Активовано (Увімкнено)
2 - Підвішено.
type Вибір Вказує, чи є потік поточним або шаблоном, який можна використовувати для створення додаткових потоків.
1 - Визначення,
2 - Активація
3 - Шаблон.
workflowid GUID Унікальний ідентифікатор для хмарний цикл для всіх імпортованих даних.
workflowidunique GUID Унікальний ідентифікатор для цієї установки потоку.

Нотатка

З веб-інтерфейсом API значення пошуку є властивості навігації з одним значенням який можна розгорнути, щоб отримати деталі з відповідного запису.

Стовпці пошуку також мають відповідний GUID властивості пошуку які можна використовувати в запитах. Властивості підстановки мають такі імена: _<logical name>_value. Для типу сутності робочого циклу у веб-інтерфейсі API можна посилатися на такі властивості пошуку: _createdby_value, _modifiedby_value, і _ownerid_value.

Створити список циклів

Щоб отримати список хмарних потоків, ви можете запитати таблицю робочих процесів. Наступний запит повертає перший автоматизований, миттєвий або запланований потік, який наразі «увімкнено»:

Ця статика OutputFirstActiveFlow для методу потрібен автентифікований клієнт, який реалізує IOrganizationService. Він використовує 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"]}");
}

Щоб отримати більше записів, видаліть TopCount обмеження.

Вихід

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

Додаткові відомості:

Створити хмарний цикл

Необхідні властивості для автоматизованих, миттєвих і запланованих потоків: category, name, type, primaryentity, і clientdata. використання none для primaryentity для цих типів потоків.

Для цього статичного методу потрібен автентифікований клієнт, який реалізує IOrganizationService. Він використовує 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);
}

Більше інформації: Створення рядків таблиці за допомогою організації служби

Для statecode усіх створених таким чином потоків встановлено значення 0 (Чернетка або «Вимк.»). Потік потрібно ввімкнути, перш ніж його можна буде використовувати.

Найважливішою властивістю є clientdata, яка містить connectionReferences , який використовує потік, і визначення потоку. 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"
}

Оновіть хмарний цикл

Щоб оновити потік, установіть лише властивості, які потрібно змінити.

Для цього статичного методу потрібен автентифікований клієнт, який реалізує IOrganizationService. Він використовує метод 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);
}

Додаткова інформація: Оновлення та видалення рядків таблиці за допомогою служби організації > Основне оновлення

Видалити хмарний цикл

У наведених нижче прикладах показано, як видалити запис робочого процесу, який представляє хмарний цикл.

Статичний DeleteCloudFlow метод видаляє запис робочого процесу.

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

}

Додаткова інформація: Видалити запис за допомогою SDK

Отримати всіх користувачів, яким надано спільний доступ до хмарний цикл

Використовуйте RetrieveSharedPrincipalsAndAccess повідомлення, щоб отримати список усіх користувачів, яким надано спільний доступ до хмарний цикл.

З SDK використовуйте RetrieveSharedPrincipalsAndAccessRequest Class, а з веб-API використовуйте функцію RetrieveSharedPrincipalsAndAccess.

Додаткова інформація: Отримайте директорів із доступом до запису

Поділіться або скасуйте спільний доступ до хмарний цикл

Поділіться хмарний цикл як будь-який інший Dataverse запис за допомогою GrantAccess повідомлення. З SDK використовуйте GrantAccessRequest Class а з Web API використовуйте GrantAccess Action. Додаткова інформація: Приклад GrantAccess

Якщо ви хочете змінити права доступу, які ви надаєте під час спільного доступу до запису, скористайтеся повідомленням ModifyAccess . У SDK використовуйте клас ModifyAccessRequest, а у веб-API використовуйте дію ModifyAccess. Додаткові відомості: Приклад ModifyAccess

Щоб скасувати спільний доступ до запису, скористайтеся повідомленням RevokeAccess . У SDK використовуйте клас RevokeAccessRequest, а у веб-API – дію RevokeAccess. Додаткові відомості: Відкликання доступу

Експорт потоків

Якщо потік є частиною рішення, ви можете експортувати його, експортувавши рішення, яке містить потік, за допомогою ExportSolution повідомлення.

Наведений нижче статичний приклад методу ExportSolution використовує ExportSolutionRequest для отримання файлу , що містить ZIP-файл некерованого рішення з вказаним 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;
}

Імпорт потоків

Якщо у вас є ZIP-файл рішення, ви можете імпортувати його за допомогою ImportSolution повідомлення.

При імпорті ланцюжків необхідно задати такі параметри:

Ім’я властивості Опис
OverwriteUnmanagedCustomizations Якщо існують екземпляри цих потоків Dataverse, для їх імпорту потрібно встановити true цей прапорець. В іншому випадку вони не перезаписуються.
PublishWorkflows Указує, чи активовано класичні Dataverse робочі процеси під час імпорту. Цей параметр не застосовується до інших типів потоків.
CustomizationFile Zip-файл із кодуванням base 64, який містить рішення.

Метод статичного ImportSolution зразка показує, як імпортувати файл рішення за допомогою класу 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);
}

Поширені запитання

А як щодо API на api.flow.microsoft.com?

API at api.flow.microsoft.com не підтримується. Замість цього клієнти повинні використовувати Dataverse веб-API, задокументовані Power Automate раніше в цій статті.

Крім того, клієнти можуть використовувати конектори керування: Power Automate Управління або Power Automate для адміністраторів.

Клієнти можуть використовувати непідтримувані API на api.flow.microsoft.com свій страх і ризик. Ці API можуть змінюватися, тому можуть виникнути несумісні зміни.

Операції класу сутності за допомогою служби Організація
Виконуйте операції за допомогою веб-API
Спільне використання та призначення
Перевірка доступу в коді
Робота з розчинами за допомогою Dataverse SDK