कोड का उपयोग करके क्लाउड फ़्लो के साथ कार्य करें

सभी प्रवाह Dataverse में संग्रहीत हैं और आप उन्हें प्रबंधित करने के लिए .NET के लिए Dataverse SDK या वेब एपीआई का उपयोग कर सकते हैं।

यह आलेख समाधान टैब में शामिल प्रवाह के प्रबंधन को शामिल करता है। Power Automate वर्तमान में, मेरे प्रवाह के अंतर्गत प्रवाह प्रबंधन कोड के साथ समर्थित नहीं है।

Dataverse एपीआई के साथ इंटरैक्ट करें

Dataverse .NET या वेब एपीआई के लिए Dataverse SDK का उपयोग करके समतुल्य क्षमताएं प्रदान करता है।

मुझे कौन सी विधि का उपयोग करना चाहिए?

सर्वोत्तम विधि परियोजना प्रौद्योगिकी और आपके पास मौजूद कौशल पर निर्भर करती है।

यदि आपका प्रोजेक्ट .NET का उपयोग करता है, तो हम SDK का उपयोग करने की अनुशंसा करते हैं। एसडीके टाइप किए गए ऑब्जेक्ट मॉडल और प्रमाणित करने के तरीके प्रदान करके आपके विकास अनुभव को सरल बनाता है।

अधिक जानकारी: संगठन सेवा का उपयोग करें

कनेक्ट कैसे करें?

कैसे कनेक्ट करें यह इस बात पर निर्भर करता है कि आप .NET या वेब एपीआई के लिए Dataverse SDK का उपयोग कर रहे हैं या नहीं।

SDK के साथ, आपको IOrganizationService इंस्टेंस तक पहुंच प्राप्त करने के लिए क्लाइंट एप्लिकेशन से कनेक्ट होना होगा। IOrganizationService एक इंटरफ़ेस है जो ऐसे तरीके प्रदान करता है जिनका उपयोग आप Dataverse के साथ इंटरैक्ट करने के लिए कर सकते हैं।

और जानकारी:

कार्यप्रवाह तालिका

क्लाउड प्रवाह को प्रक्रिया (वर्कफ़्लो) तालिका में संग्रहित किया जाता है जिसे वेब एपीआई में वर्कफ़्लो EntityType के रूप में दर्शाया जाता है

निम्न तालिका वर्कफ़्लो तालिका में महत्वपूर्ण स्तंभों का वर्णन करती है:

तार्किक नाम प्रकार विवरण
category विकल्प प्रवाह की श्रेणी. यहां विभिन्न श्रेणियां हैं.
0 - क्लासिक Dataverse वर्कफ़्लोज़।
1 - क्लासिक Dataverse संवाद।
2 - व्यापार नियम।
3 - क्लासिक Dataverse कार्य।
4 - व्यवसाय प्रक्रिया प्रवाह.
5 - आधुनिक प्रवाह (स्वचालित, त्वरित या अनुसूचित प्रवाह)।
6 - डेस्कटॉप प्रवाह।
clientdata String प्रवाह परिभाषा और उसके कनेक्शन संदर्भ का एक स्ट्रिंग-एन्कोडेड JSON।
createdby लुकअप वह उपयोगकर्ता जिसने प्रवाह बनाया.
createdon तिथिसमय वह दिनांक जब प्रवाह बनाया गया था.
description String उपयोगकर्ता द्वारा प्रवाह का विवरण प्रदान किया गया।
ismanaged बूल इंगित करता है कि क्या प्रवाह प्रबंधित समाधान के माध्यम से स्थापित किया गया था।
modifiedby लुकअप अंतिम उपयोगकर्ता जिसने प्रवाह को अद्यतन किया.
modifiedon तिथिसमय पिछली बार प्रवाह अद्यतन किया गया था.
name String प्रदर्शन नाम जो आपने प्रवाह दिया है।
ownerid लुकअप उपयोगकर्ता या टीम जो प्रवाह का स्वामी है.
statecode विकल्प प्रवाह की स्थिति. स्थिति यह हो सकती है:
0 - ड्राफ्ट (बंद)
1 - सक्रिय (चालू)
2 - निलंबित।
type विकल्प इंगित करता है कि क्या प्रवाह एक चालू प्रवाह है, या एक टेम्पलेट है जिसका उपयोग अधिक प्रवाह बनाने के लिए किया जा सकता है।
1 - परिभाषा,
2 - सक्रियण
3 - टेम्पलेट.
workflowid Guid सभी आयातों में क्लाउड प्रवाह के लिए अद्वितीय पहचानकर्ता।
workflowidunique Guid प्रवाह की इस स्थापना के लिए विशिष्ट पहचानकर्ता.

नोट

वेब एपीआई के साथ, लुकअप मान एकल-मूल्यवान नेविगेशन गुण हैं जिन्हें संबंधित रिकॉर्ड से विवरण प्राप्त करने के लिए विस्तारित किया जा सकता है।

लुकअप कॉलम में संबंधित GUID लुकअप गुण भी होते हैं जिनका उपयोग प्रश्नों में किया जा सकता है। लुकअप गुणों में यह नामकरण परंपरा है: _<logical name>_value. वेब एपीआई में वर्कफ़्लो इकाई प्रकार के लिए आप इन लुकअप गुणों का संदर्भ दे सकते हैं: _createdby_value, _modifiedby_value, और _ownerid_value

प्रवाहों की सूची बनाएं

क्लाउड प्रवाह की सूची पुनः प्राप्त करने के लिए, आप वर्कफ़्लो तालिका को क्वेरी कर सकते हैं। निम्नलिखित क्वेरी पहला स्वचालित, त्वरित, या निर्धारित प्रवाह लौटाती है जो वर्तमान में 'चालू' है:

इस static 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);
}

अधिक जानकारी: संगठन सेवा का उपयोग करके तालिका पंक्तियों को अद्यतन करें और हटाएं > मूल अद्यतन

बादल प्रवाह हटाएँ

निम्नलिखित उदाहरण दिखाते हैं कि क्लाउड प्रवाह का प्रतिनिधित्व करने वाले वर्कफ़्लो रिकॉर्ड को कैसे हटाया जाए.

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

}

अधिक जानकारी: एसडीके का उपयोग करके रिकॉर्ड हटाएं

उन सभी उपयोगकर्ताओं को प्राप्त करें जिनके साथ क्लाउड प्रवाह साझा किया गया है

उन सभी उपयोगकर्ताओं की सूची प्राप्त करने के लिए RetrieveSharedPrincipalsAndAccess संदेश का उपयोग करें जिनके साथ क्लाउड प्रवाह साझा किया गया है।

SDK के साथ, RetrieveSharedPrincipalsAndAccessRequest Class का उपयोग करें, और वेब API के साथ RetrieveSharedPrincipalsAndAccess Function का उपयोग करें।

अधिक जानकारी: रिकॉर्ड तक पहुंच वाले प्रिंसिपल प्राप्त करें

क्लाउड प्रवाह को साझा करें या साझा न करें

Dataverse संदेश का उपयोग करके किसी अन्य GrantAccess रिकॉर्ड की तरह क्लाउड प्रवाह साझा करें। एसडीके के साथ, ग्रांटएक्सेस रिक्वेस्ट क्लास का उपयोग करें और वेब एपीआई के साथ ग्रांटएक्सेस एक्शन का उपयोग करें। अधिक जानकारी: ग्रांटएक्सेस उदाहरण

यदि आप रिकॉर्ड साझा करते समय दिए गए एक्सेस अधिकारों को बदलना चाहते हैं, तो ModifyAccess संदेश का उपयोग करें। SDK के साथ, ModifyAccessRequest Class का उपयोग करें और वेब API के साथ ModifyAccess Action का उपयोग करें। अधिक जानकारी: ModifyAccess उदाहरण

किसी रिकॉर्ड को अनशेयर करने के लिए, RevokeAccess संदेश का उपयोग करें। SDK के साथ, RevokeAccessRequest Class का उपयोग करें और वेब API के साथ RevokeAccess Action का उपयोग करें। अधिक जानकारी: पहुंच रद्द करना

निर्यात प्रवाह

जब प्रवाह किसी समाधान का हिस्सा होता है, तो आप ExportSolution संदेश का उपयोग करके प्रवाह वाले समाधान को निर्यात करके इसे निर्यात कर सकते हैं।

नीचे दी गई स्थिर ExportSolution उदाहरण विधि निर्दिष्ट के साथ अप्रबंधित समाधान की ज़िप फ़ाइल युक्त को पुनः प्राप्त करने के लिए ExportSolutionRequest 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;
}

आयात प्रवाह

जब आपके पास समाधान ज़िप फ़ाइल हो, तो आप ImportSolution संदेश का उपयोग करके इसे आयात कर सकते हैं।

जब आप प्रवाह आयात करते हैं, तो आपको निम्नलिखित पैरामीटर सेट करने चाहिए:

गुण का नाम विवरण
OverwriteUnmanagedCustomizations यदि Dataverse में इन प्रवाहों के मौजूदा उदाहरण हैं, तो उन्हें आयात करने के लिए इस ध्वज को true पर सेट करने की आवश्यकता है। अन्यथा उन्हें अधिलेखित नहीं किया जाएगा.
PublishWorkflows इंगित करता है कि आयात पर क्लासिक Dataverse वर्कफ़्लो सक्रिय किया जाएगा या नहीं। यह सेटिंग अन्य प्रकार के प्रवाहों पर लागू नहीं होती.
CustomizationFile एक आधार 64-एन्कोडेड ज़िप फ़ाइल जिसमें समाधान शामिल है।

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

भी देखें

संगठन सेवा का उपयोग करके इकाई वर्ग संचालन
वेब एपीआई का उपयोग करके संचालन करें
साझा करना और असाइन करना
कोड में पहुंच का सत्यापन किया जा रहा है
Dataverse SDK का उपयोग करके समाधानों के साथ कार्य करें