Кодты пайдаланып бұлттық ағындармен жұмыс істеу

Барлық ағындар Dataverse ішінде сақталады және оларды басқару үшін .NET немесе Web API үшін Dataverse SDK пайдалана аласыз.

Бұл мақала Шешімдер қойындысындағы ағындарды басқаруды қамтиды Power Automate. Қазіргі уақытта Менің ағындарым астындағы ағындарды басқаруға кодпен қолдау көрсетілмейді.

Dataverse API-мен әрекеттесу

Dataverse .NET немесе Web API үшін Dataverse SDK көмегімен баламалы мүмкіндіктерді қамтамасыз етеді.

Қандай әдісті қолдануым керек?

Ең жақсы әдіс жоба технологиясына және сізде бар дағдыларға байланысты.

Жобаңыз .NET пайдаланса, SDK пайдалануды ұсынамыз. SDK терілген нысан үлгісін және аутентификация әдістерін қамтамасыз ету арқылы әзірлеу тәжірибеңізді жеңілдетеді.

Қосымша ақпарат: Ұйым қызметін пайдаланыңыз

Қалай қосылуға болады?

Қосылу жолы .NET немесе Web API үшін Dataverse SDK қолданып жатқаныңызға байланысты.

SDK көмегімен IOrganizationService данасына кіру үшін клиенттік қолданбаға қосылу керек. IOrganizationService — бұл Dataverse әрекеттесу үшін пайдалануға болатын әдістерді қамтамасыз ететін интерфейс.

Қосымша ақпарат:

Жұмыс барысы кестесі

Бұлт ағындары Web API интерфейсінде жұмыс процесі EntityType ретінде ұсынылған Процесс (жұмыс процесі) кестесінде сақталады.

Келесі кесте жұмыс процесі кестесіндегі маңызды бағандарды сипаттайды:

Логикалық атауы Түр Сипаттама
category Таңдау Ағын категориясы. Мұнда әртүрлі санаттар берілген.
0 - Классикалық Dataverse жұмыс процестері.
1 - Классикалық Dataverse диалогтар.
2 - Іскерлік ережелер.
3 - Классикалық Dataverse әрекеттер.
4 - Бизнес-процестердің ағымдары.
5 - Заманауи ағын (Автоматтандырылған, жедел немесе жоспарланған ағындар).
6 - Жұмыс үстелі ағындары.
clientdata String Ағын анықтамасының жолды кодталған JSON және оның байланысыСілтемелер.
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.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 класын және Web API интерфейсімен RetrieveSharedPrincipalsAndAccess функциясын пайдаланыңыз.

Қосымша ақпарат: Жазбаға рұқсаты бар жетекшілерді алыңыз

Бұлт ағынын бөлісіңіз немесе бөлісіңіз

Бұлт ағынын кез келген басқа Dataverse жазба сияқты GrantAccess хабарлама арқылы бөлісіңіз. SDK көмегімен GrantAccessRequest класын және Web API интерфейсімен GrantAccess әрекетін пайдаланыңыз. Қосымша ақпарат: GrantAccess мысалы

Жазбаны ортақ пайдаланған кезде берілген кіру құқықтарын өзгерткіңіз келсе, ModifyAccess хабарламасын пайдаланыңыз. SDK көмегімен ModifyAccessRequest класын және Web API интерфейсімен ModifyAccess әрекетін пайдаланыңыз. Қосымша ақпарат: ModifyAccess мысалы

Жазбаны бөлісуден бас тарту үшін RevokeAccess хабарламасын пайдаланыңыз. SDK көмегімен RevokeAccessRequest класын және Web 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 Шешімі бар негізгі 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);
}

Келесіні де қараңыз:

Ұйым қызметін пайдаланатын нысан класының операциялары
Web API арқылы әрекеттерді орындаңыз
Бөлу және тағайындау
Кодтағы рұқсатты тексеру
Dataverse SDK көмегімен шешімдермен жұмыс жасаңыз