Εργασία με ροές cloud με χρήση κώδικα

Όλες οι ροές αποθηκεύονται στο Dataverse και μπορείτε να χρησιμοποιήσετε το Dataverse SDK για .NET ή Web API για να τις διαχειριστείτε.

Αυτό το άρθρο καλύπτει τη διαχείριση των ροών που περιλαμβάνονται στην καρτέλα Λύσεις στο Power Automate. Προς το παρόν, η διαχείριση ροών στην περιοχή Οι ροές μου δεν υποστηρίζεται με κώδικα.

Αλληλεπίδραση με Dataverse API

Το Dataverse παρέχει ισοδύναμες δυνατότητες χρησιμοποιώντας το Dataverse SDK για .NET ή Web ΑΡΙ.

Ποια μέθοδο πρέπει να χρησιμοποιήσω;

Η καλύτερη μέθοδος εξαρτάται από την τεχνολογία έργων και τις δεξιότητες που έχετε.

Εάν το έργο σας χρησιμοποιεί το .NET, συνιστούμε να χρησιμοποιήσετε το SDK. Το SDK απλοποιεί την εμπειρία ανάπτυξης παρέχοντας ένα μοντέλο αντικειμένου τύπου και μεθόδους για τον έλεγχο ταυτότητας.

Περισσότερες πληροφορίες: Χρήση της υπηρεσίας οργανισμού

Πώς να συνδεθείτε;

Ο τρόπος σύνδεσης εξαρτάται από το αν χρησιμοποιείτε το Dataverse SDK για .NET ή Web API.

Με το SDK, θα πρέπει να συνδεθείτε με μια εφαρμογή-πελάτη για να αποκτήσετε πρόσβαση σε μια παρουσία IOrganizationService. Το IOrganizationService είναι μια διασύνδεση που παρέχει μεθόδους τις οποίες μπορείτε χρησιμοποιήσετε για να αλληλεπιδράσετε με το Dataverse.

Περισσότερες πληροφορίες:

Πίνακας ροής εργασιών

Οι ροές cloud αποθηκεύονται στον πίνακα διεργασίας (Ροή εργασιών) που αντιπροσωπεύεται στο Web API ως τύπος οντότητας ροής εργασιών

Ο παρακάτω πίνακας περιγράφει σημαντικές στήλες στον πίνακα ροής εργασιών:

Λογικό όνομα Type Description
category Επιλογή Η κατηγορία της ροής. Ακολουθούν οι διάφορες κατηγορίες.
0 - Κλασικές ροές εργασιών Dataverse.
1 - Κλασικά παράθυρα διαλόγου Dataverse.
2 - Επιχειρηματικοί κανόνες.
3 - Κλασικές ενέργειες Dataverse.
4 - Ροές επιχειρηματικής διαδικασίας.
5 - Σύγχρονη ροή (Αυτοματοποιημένες, στιγμιαίες ή προγραμματισμένες ροές).
6 - Ροές επιφάνειας εργασίας.
clientdata Συμβλοσειρά Ένα JSON με κωδικοποίηση συμβολοσειράς του ορισμού ροής και των connectionReferences του.
createdby Αναζήτηση Ο χρήστης που δημιούργησε τη ροή.
createdon Ημερομηνία/ώρα Η ημερομηνία που δημιουργήθηκε η ροή.
description Συμβλοσειρά Η περιγραφή της ροής από τον χρήστη.
ismanaged Bool Υποδεικνύει εάν η ροή εγκαταστάθηκε μέσω μιας διαχειριζόμενης λύσης.
modifiedby Αναζήτηση Ο τελευταίος χρήστης που ενημέρωσε τη ροή.
modifiedon Ημερομηνία/ώρα Η τελευταία φορά που ενημερώθηκε η ροή.
name Συμβλοσειρά Το εμφανιζόμενο όνομα που έχετε δώσει στη ροή.
ownerid Αναζήτηση Ο χρήστης ή η ομάδα στην οποία ανήκει η ροή.
statecode Επιλογή Η κατάσταση της ροής. Η κατάστασή της μπορεί να είναι:
0 - Προσχέδιο (Ανενεργό)
1 - Ενεργοποιήθηκε (Ενεργό)
2 - Αναστολή.
type Επιλογή Υποδεικνύει εάν η ροή είναι μια ροή εκτέλεσης ή ένα πρότυπο που μπορεί να χρησιμοποιηθεί για τη δημιουργία περισσότερων ροών.
1 - Ορισμός,
2 - Ενεργοποίηση
3 - Πρότυπο.
workflowid Guid Το μοναδικό αναγνωριστικό για μια ροή cloud σε όλες τις εισαγωγές.
workflowidunique Guid Το μοναδικό αναγνωριστικό για αυτή την εγκατάσταση της ροής.

Σημείωμα

Με το Web API, οι τιμές αναζήτησης είναι ιδιότητες περιήγησης μίας τιμής που μπορούν να αναπτυχθούν για να πάρουν λεπτομέρειες από τη σχετική καρτέλα.

Οι στήλες αναζήτησης διαθέτουν επίσης αντίστοιχες ιδιότητες αναζήτησης GUID που μπορούν να χρησιμοποιηθούν σε ερωτήματα. Οι ιδιότητες αναζήτησης έχουν αυτήν τη σύμβαση ονομασίας: _<logical name>_value. Για τον τύπο οντότητας ροής εργασιών στο Web API, μπορείτε να δημιουργήσετε αναφορές σε αυτές τις ιδιότητες αναζήτησης: _createdby_value, _modifiedby_value και _ownerid_value.

Ροές λίστας

Για ανάκτηση μιας λίστας ροών cloud, μπορείτε να υποβάλετε ερωτήματα στον πίνακα ροής εργασιών. Το ακόλουθο ερώτημα επιστρέφει την πρώτη αυτοματοποιημένη, στιγμιαία ή προγραμματισμένη ροή που είναι αυτή τη στιγμή "ενεργή":

Αυτή η στατική μέθοδος 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

Περισσότερες πληροφορίες:

Δημιουργία μιας ροής cloud

Οι απαιτούμενες ιδιότητες για τις αυτοματοποιημένες, τις άμεσες και τις προγραμματισμένες ροές είναι: 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"
}

Ενημέρωση μιας ροής cloud

Για να ενημερώσετε μια ροή, ορίστε μόνο τις ιδιότητες που θέλετε να αλλάξετε.

Αυτή η στατική μέθοδος απαιτεί ένα πρόγραμμα-πελάτη που έχει υποβληθεί σε έλεγχο ταυτότητας και υλοποιεί το 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);
}

Περισσότερες πληροφορίες: Ενημέρωση και διαγραφή γραμμών πίνακα χρησιμοποιώντας τη Βασική ενημέρωση υπηρεσίας οργανισμού >

Διαγραφή μιας ροής cloud

Τα παρακάτω παραδείγματα δείχνουν τον τρόπο διαγραφής της καρτέλας ροής εργασιών που αντιπροσωπεύει μια ροή cloud.

Η στατική μέθοδος 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

Παράθεση όλων των χρηστών με τους οποίους γίνεται κοινή χρήση μιας ροής cloud

Χρησιμοποιήστε το μήνυμα RetrieveSharedPrincipalsAndAccess για να λάβετε μια λίστα με όλους τους χρήστες με τους οποίο γίνεται κοινή χρήση μιας ροής cloud.

Με το SDK, χρησιμοποιήστε την κατηγορία RetrieveSharedPrincipalsAndAccessRequest και με το Web API τη συνάρτηση RetrieveSharedPrincipalsAndAccess.

Περισσότερες πληροφορίες: Λήψη αρχών σχετικά με την πρόσβαση σε μια καρτέλα

Κοινή χρήση ή κατάργηση κοινής χρήσης μιας ροής cloud

Μοιραστείτε μια ροή cloud όπως οποιαδήποτε άλλη καρτέλα Dataverse χρησιμοποιώντας το μήνυμα GrantAccess. Με το SDK, χρησιμοποιήστε την κατηγορία GrantAccessRequest και με το Web API την ενέργεια GrantAccess. Περισσότερες πληροφορίες: Παράδειγμα GrantAccess

Εάν θέλετε να αλλάξετε τα δικαιώματα πρόσβασης που εκχωρείτε όταν χρησιμοποιείτε από κοινού μια καρτέλα, χρησιμοποιήστε το μήνυμα ModifyAccess. Με το SDK, χρησιμοποιήστε την κατηγορία ModifyAccessRequest και με το Web API την ενέργεια ModifyAccess. Περισσότερες πληροφορίες: Παράδειγμα ModifyAccess

Για να κατάργηση της κοινής χρήσης μιας καρτέλας, χρησιμοποιήστε το μήνυμα RevokeAccess. Με το SDK, χρησιμοποιήστε την κατηγορία RevokeAccessRequest και με το Web 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.

Όταν εισάγετε ροές, πρέπει να ορίσετε τις παρακάτω παραμέτρους:

Όνομα ιδιότητας Description
OverwriteUnmanagedCustomizations Εάν δεν υπάρχουν υπάρχουσες παρουσίες αυτών των ροών στο Dataverse για εφαρμογές, πρέπει να οριστεί αυτή η σημαία σε true για την εισαγωγή τους. Σε αντίθετη περίπτωση, δεν θα αντικατασταθούν.
PublishWorkflows Υποδεικνύει αν θα ενεργοποιηθεί οι κλασικές ροές εργασίας Dataverse κατά την εισαγωγή. Αυτή η ρύθμιση δεν ισχύει για άλλους τύπους ροών.
CustomizationFile Ένα βασικό αρχείο zip με κωδικοποίηση 64 που περιέχει τη λύση.

Η στατική μέθοδος δείγματος 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
Κοινή χρήση και ανάθεση
Επαλήθευση πρόσβασης στον κώδικα
Εργασία με λύσεις με χρήση του SDK Dataverse