Рад са токовима у облаку коришћењем кода

Сви токови се чувају и Dataverse можете користити СДК Dataverse за .НЕТ или Веб АПИ да бисте њима управљали.

Овај чланак покрива управљање токовима укљученим на картици Решења у Power Automate. Тренутно, управљање токовима под Ми токови нису подржани кодом.

Интеракција са Dataverse АПИ-јима

Dataverse пружа еквивалентне Dataverse могућности користећи било СДК за .НЕТ или Веб АПИ.

Који метод треба да користим?

Најбољи начин зависи од технологије пројекта и вештина које имате.

Ако ваш пројекат користи .НЕТ, препоручујемо да користите СДК. СДК поједностављује ваше развојно искуство пружајући откуцани модел објекта и методе за аутентификацију.

Више информација: Користите услугу организације

Како се повезати?

Како се повезати зависи од тога да ли користите Dataverse СДК за .НЕТ или Веб АПИ.

Са СДК-ом, потребно је да се повежете са клијентском апликацијом да бисте добили приступ инстанци ИОрганизатионСервице . IOrganizationService је интерфејс који пружа методе које можете користити за интеракцију Dataverse.

Више информација:

Табела тока посла

Токови облака се чувају у табели Процесс (Воркфлов) која је представљена у Веб АПИ-ју као ток посла ЕнтиТипе

Следећа табела описује важне колоне у табели тока посла:

Логичко име Тип Опис
category Избор Категорија тока. Ево различитих категорија.
0 - Класични Dataverse радни токови.
1 - Класични Dataverse дијалози.
2 - Пословна правила.
3 - Класичне Dataverse акције.
4 - Токови пословних процеса.
5 - Модерни проток (аутоматизовани, инстант или планирани токови).
6 - Токови на радној површини.
clientdata String ЈСОН кодиран стрингом дефиниције тока и његове цоннецтионРеференцес.
createdby Lookup Корисник који је створио ток.
createdon Датум/време Датум када је ток креиран.
description String Опис тока који је обезбедио корисник.
ismanaged Булова Означава да ли је проток инсталиран преко < ДИЦТ__комплетно решење > манагед солутион.
modifiedby Lookup Последњи корисник који је ажурирао ток.
modifiedon Датум/време Последњи пут када је ток ажуриран.
name String < ДИЦТ__име за приказ >дисплаy наме који сте дали проток.
ownerid Lookup Корисник или тим који је власник тока.
statecode Избор Статус тока. Статус може бити:
0 - Нацрт (искључен)
1 - Активиран (укључено)
2 -Суспендован.
type Избор Означава да ли је ток текући ток, или шаблон који се може користити за креирање више токова.
1 -Дефиниција
2 -Активација
3 -Предложак.
workflowid GUID Јединствени идентификатор за < ДИЦТ__ток у облаку > цлоуд флоw у свим увозима.
workflowidunique GUID Јединствени идентификатор за ову инсталацију тока.

Белешка

Са Веб АПИ-јем, вредности претраге су особине навигације са једном вредношћу које се могу проширити да би се добили детаљи из повезаног записа.

Колоне претраге такође имају одговарајуће особине ГУИД претраге које се могу користити у упитима. Особине претраге имају ову конвенцију именовања: _<logical name>_value. За ентитетипе тока посла у Веб АПИ-ју можете упутити на ове особине претраге: _createdby_value,, _modifiedby_value и _ownerid_value.

Списак токова

Да бисте преузели листу токова облака, можете упитати табелу тока посла. Следећи упит враћа први аутоматизовани, тренутни или планирани ток који је тренутно "укључен":

Овај статички OutputFirstActiveFlow метод захтева аутентификованог клијента који имплементира IOrganizationService. Користи ИОрганизатионСервице.РетриевеМултипле метод.

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

Да бисте преузели више записа, уклоните ограничење ТопЦоунт .

Излаз

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. Користи методу ИОрганизатионСервице.Цреате .

/// <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"
}

Ажурирајте < ДИЦТ__ток у облаку > цлоуд флоw

Да бисте ажурирали ток, подесите само особине које желите да промените.

Овај статички метод захтева аутентификованог клијента који имплементира IOrganizationService. Користи метод ИОрганизатионСервице.Упдате за ажурирање описа тока и постављање власника.

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

Додатне информације: Ажурирање и брисање редова табеле коришћењем основног ажурирања Организационе службе >

Избриши < ДИЦТ__ток у облаку > цлоуд флоw

Следећи примери показују како да избришете запис тока посла који представља < ДИЦТ__ток у облаку > цлоуд флоw.

Статички 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);

}

Додатне информације: Обришите запис користећи СДК

Набавите све кориснике са којима се дели < ДИЦТ__ток у облаку > цлоуд флоw

Користите RetrieveSharedPrincipalsAndAccess поруку да бисте добили листу свих корисника са којима се < ДИЦТ__ток у облаку > цлоуд флоw дели.

Са СДК-ом користите класу РетриевеСхаредПринципалсАндАццессРеqуест, а помоћу Веб АПИ-ја користите функцију РетриевеСхаредПринципалсАндАццесс.

Више информација: Набавите директоре са приступом запису

Поделите или поништите дељење < ДИЦТ__ток у облаку > цлоуд флоw

Поделите < ДИЦТ__ток у облаку > цлоуд флоw као и било који други Dataverse запис користећи GrantAccess поруку. Са СДК-ом користите класу ГрантАццессРеqуест и са Веб АПИ-јем користите акцију ГрантАццесс. Више информација: ГрантАццесс пример

Ако желите да промените права приступа која додељујете када делите запис, користите ModifyAccess поруку. Са СДК-ом, користите класу МодифиАццессРекуест и са Веб АПИ-јем користите акцију МодифиАццесс. Више информација: Пример измене Аццесс-а

Да бисте поништили дељење записа, користите RevokeAccess поруку. Са СДК-ом користите класу РевокеАццессРекуест и са Веб АПИ-јем користите акцију РевокеАццесс. Више информација: Укидање приступа

Извозни токови

Када је ток део решења, можете га извести извозом решења које садржи ток користећи ExportSolution поруку.

Следећи статички ExportSolution пример метода користи ЕкпортСолутионРеqуест да преузме ЗИП датотеку byte[] која садржи неуправљано решење са наведеним УниqуеНаме.

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

Увозни токови

Када имате решење ЗИП фајл, можете га увести помоћу ImportSolution поруке.

Када увозите токове, требало би да подесите следеће параметре:

Назив својства Опис
OverwriteUnmanagedCustomizations Ако постоје постојеће инстанце ових токова у Dataverse, ова застава треба да буде подешена да true их увезе. У супротном се не преписују.
PublishWorkflows Означава да ли су класични Dataverse токови посла активирани приликом увоза. Ова поставка се не примењује на друге врсте токова.
CustomizationFile База 64-кодирана зип датотека која садржи решење.

Метода статичког 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);
}

Најчешћа питања

Шта је са АПИ-јем на #пии_ијфидејз?

АПИ на # пии_ијфидеаз није подржан. Купци би уместо тога требало да користе Dataverse Веб АПИ-је за Power Automate документовано претходно у овом чланку.

Алтернативно, корисници могу да користе конекторе за управљање: Power Automate менаџмент или Power Automate за администраторе.

Корисници могу да користе неподржане АПИ-је на api.flow.microsoft.com сопствени ризик. Ови АПИ-ји су подложни променама, тако да може доћи до пробијања промена.

Операције ентитетске класе користећи услугу организације
Обављање операција помоћу Веб АПИ-ја
Дељење и додељивање
Провера приступа у коду
Рад са решењима користећи Dataverse СДК