Работа с потоци за облак посредством код
Всички потоци се съхраняват и 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 |
Bool | Показва дали потокът е инсталиран чрез завършено решение. |
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
Споделяне и възлагане
Проверка на достъпа в код
Работа с решения с помощта на Dataverse SDK