Работа с потоци за облак посредством код
Всички потоци се съхраняват и Dataverse можете да използвате Dataverse SDK за .NET или уеб API, за да ги управлявате.
Тази статия обхваща управлението на потоци, включени в раздела Решения Power Automate. Понастоящем управлението на потоци под "Моите потоци " не се поддържа с код.
Взаимодействие с Dataverse API
Dataverse предоставя еквивалентни възможности с помощта на Dataverse SDK за .NET или уеб API.
Кой метод да използвам?
Най-добрият метод зависи от технологията на проекта и уменията, които имате.
Ако вашият проект използва .NET, препоръчваме да използвате SDK. SDK опростява вашето изживяване при разработка, като предоставя типизиран обектен модел и методи за удостоверяване.
Повече информация: Използване на услугата "Организация"
Как да се свържа?
Начинът на свързване зависи от това дали използвате Dataverse SDK за .NET или уеб API.
С SDK трябва да се свържете с клиентско приложение, за да получите достъп до екземпляр на IOrganizationService . IOrganizationService
е интерфейс, който предоставя методи, които можете да използвате за взаимодействие Dataverse.
Допълнителна информация:
Таблица на работния поток
Потоците в облака се съхраняват в таблицата Процес (Работен поток), която е представена в уеб API като EntityType на работния поток
Следващата таблица описва важни колони в таблицата на работния поток:
Логическо име | Тип | Описание |
---|---|---|
category |
Възможност за избор | Категорията на потока. Ето различните категории. 0 - Класически Dataverse работни процеси.1 - Класически Dataverse диалози. 2 - Бизнес правила. 3 - Класически Dataverse действия. 4 - Потоци на бизнес процесите. 5 - Модерен поток (автоматизирани, незабавни или планирани потоци).6 - Потоци на работния плот. |
clientdata |
String | Кодиран в низове JSON на дефиницията на потока и неговата connectionReferences. |
createdby |
Справка | Потребителят, който е създал потока. |
createdon |
ДатаЧас | Датата, на която е създаден потокът. |
description |
String | Предоставеното от потребителя описание на потока. |
ismanaged |
Булева | Показва дали потокът е инсталиран чрез завършено решение. |
modifiedby |
Справка | Последният потребител, актуализирал потока. |
modifiedon |
ДатаЧас | Последният път, когато потокът беше актуализиран. |
name |
String | Показваното име, което сте дали на потока. |
ownerid |
Справка | Потребителят или екипът, който притежава потока. |
statecode |
Възможност за избор | Състоянието на потока. Статусът може да бъде:0 - Дранова (изключена)1 - Активиран (включен)2 -Спряно. |
type |
Възможност за избор | Показва дали потокът е текущ поток или шаблон, който може да се използва за създаване на повече потоци. 1 -Определение2 -Активиране3 -Шаблон. |
workflowid |
GUID | Уникалният идентификатор за поток за облак за всички вносни данни. |
workflowidunique |
GUID | Уникалният идентификатор за тази инсталация на потока. |
Бележка
С Web API справочните стойности са еднозначни свойства за навигация, които могат да бъдат разширени, за да се получат подробности от свързания запис.
Справочните колони също имат съответните свойства за справка в GUID , които могат да се използват в заявки. Свойствата за справка имат следната конвенция за именуване: _<logical name>_value
. За типа обект на работния поток в Web API можете да се обърнете към тези свойства за справка: _createdby_value
, _modifiedby_value
, и _ownerid_value
.
Изброяване на потоци
За да извлечете списък с потоци в облака, можете да направите заявка към таблицата на работния поток. Следната заявка връща първия автоматизиран, незабавен или планиран поток, който в момента е включен:
Този статичен OutputFirstActiveFlow
метод изисква удостоверен клиент, който имплементира. IOrganizationService Той използва метода IOrganizationService.RetrieveMulti .
/// <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
(Draft или 'Off'). Потокът трябва да бъде активиран, преди да може да се използва.
Най-важното свойство е 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, а с уеб API използвайте функцията RetrieveSharedPrincipalsAndAccess.
Повече информация: Получаване на възглавници с достъп до запис
Споделяне или прекратяване на споделянето на поток за облак
Споделете поток за облак като всеки друг Dataverse запис, използващ съобщението GrantAccess
. С SDK използвайте класа GrantAccessRequest, а с уеб API използвайте действието GrantAccess. Повече информация: Пример за GrantAccess
Ако искате да промените правата за достъп, които предоставяте, когато споделяте запис, използвайте ModifyAccess
съобщението. С SDK използвайте класа ModifyAccessRequest, а с уеб API използвайте действието ModifyAccess. Повече информация: Пример за ModifyAccess
За да прекратите споделянето на запис, използвайте съобщението RevokeAccess
. С SDK използвайте класа RevokeAccessRequest, а с уеб API използвайте действието RevokeAccess. Повече информация: Отмяна на достъпа
Експортни потоци
Когато потокът е част от решение, можете да го експортирате, като експортирате решението, което съдържа потока, като използвате ExportSolution
съобщението.
Следният статичен ExportSolution
примерен метод използва ExportSolutionRequest за извличане на byte[]
съдържащ ZIP файла на незавършеното решение с указаното 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;
}
Потоци на внос
Когато имате ZIP файл на решение, можете да го импортирате с помощта на ImportSolution
съобщението.
Когато импортирате потоци, трябва да зададете следните параметри:
Име на свойството | Описание |
---|---|
OverwriteUnmanagedCustomizations |
Ако има съществуващи екземпляри на тези потоци Dataverse, този флаг трябва да бъде зададен на true , за да ги импортира. В противен случай те не се презаписват. |
PublishWorkflows |
Показва дали класическите Dataverse работни потоци са активирани при импортиране. Тази настройка не се прилага за други типове потоци. |
CustomizationFile |
Базов 64-кодиран zip файл, който съдържа решението. |
Статичният 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