Delen via


Werken met cloudstromen met behulp van code

Alle stromen worden opgeslagen in Dataverse en u kunt de Dataverse SDK voor .NET of Web-API gebruiken om ze te beheren.

Dit artikel bevat informatie over het beheren van stromen op het tabblad Oplossingen in Power Automate. Op dit moment wordt het beheren van stromen onder Mijn stromen niet ondersteund met code.

Communiceren met Dataverse-API's

Dataverse biedt gelijkwaardige mogelijkheden met behulp van de Dataverse SDK voor .NET of Web-API.

Welke methode moet ik gebruiken?

De beste methode hangt af van de projecttechnologie en de vaardigheden waarover u beschikt.

Als uw project .NET gebruikt, raden we u aan de SDK te gebruiken. De SDK vereenvoudigt uw ontwikkelingservaring door een getypeerd objectmodel en verificatiemethoden te bieden.

Meer informatie: De organisatieservice gebruiken

Hoe kan ik verbinding maken?

Hoe u verbinding maakt, is afhankelijk van of u de Dataverse SDK voor .NET of Web-API gebruikt.

Met de SDK moet u verbinding maken met een clienttoepassing om toegang te krijgen tot een IOrganizationService-exemplaar. IOrganizationService is een interface die methoden biedt die u kunt gebruiken om te communiceren met Dataverse.

Meer informatie:

Werkstroomtabel

Cloudstromen worden opgeslagen in de tabel Proces (werkstroom) die in de Web-API wordt weergegeven als het EntityType werkstroom

In de volgende tabel worden belantgrijke kolommen in de werkstroomtabel beschreven:

Logische naam Type Omschrijving
category Keuze De categorie van de stroom. Hier zijn de verschillende categorieën.
0 - Klassieke Dataverse-werkstromen.
1 - Klassieke Dataverse-dialoogvensters.
2 - Bedrijfsregels.
3 - Klassieke Dataverse-acties.
4 - Bedrijfsprocesstromen.
5 - Moderne stroom (geautomatiseerde, directe of geplande stromen).
6 - Bureaubladstromen.
clientdata String Een tekenreeksgecodeerde JSON van de stroomdefinitie en de bijbehorende verbindingsreferenties.
createdby Zoekopdracht De gebruiker die de stroom heeft gemaakt.
createdon Datum en tijd De datum waarop de stroom is gemaakt.
description String De door de gebruiker opgegeven beschrijving van de stroom.
ismanaged Bool Geeft aan of de stroom is geïnstalleerd via een beheerde oplossing.
modifiedby Zoekopdracht De laatste gebruiker die de stroom heeft bijgewerkt.
modifiedon Datum en tijd De laatste keer dat de stroom is bijgewerkt.
name String De weergavenaam die u de stroom hebt gegeven.
ownerid Zoekopdracht De gebruiker die of het team dat eigenaar is van de stroom.
statecode Keuze De status van de stroom. De status kan het volgende zijn:
0 - Concept (Uit)
1 - Geactiveerd (Aan)
2 - Onderbroken.
type Keuze Geeft aan of een stroom actief is, of dat het een sjabloon is dat kan worden gebruikt voor het maken van meer stromen.
1 - Definitie.
2 - Activering
3 - Sjabloon.
workflowid GUID De unieke id voor een cloudstroom bij alle imports.
workflowidunique GUID De unieke id voor deze installatie van de stroom.

Notitie

Met Web-API zijn opzoekwaarden navigatie-eigenschappen met één waarde die kunnen worden uitgebreid om details uit de gerelateerde record op te halen.

Opzoekkolommen hebben ook overeenkomstige opzoekeigenschappen voor GUID's die kunnen worden gebruikt in query's. Opzoekeigenschappen hebben deze naamgevingsconventie: _<logical name>_value. Voor het werkstroomentiteitstype in Web-API kunt u verwijzen naar deze opzoekeigenschappen: _createdby_value, _modifiedby_value en _ownerid_value.

Stromen weergeven

Als u een lijst met cloudstromen wilt ophalen, kunt u de werkstroomtabel opvragen. Met de volgende query wordt de eerste geautomatiseerde, directe of geplande stroom geretourneerd die momenteel is ingesteld op 'aan':

Deze statische OutputFirstActiveFlow-methode vereist een geverifieerde client die de IOrganizationService implementeert. Het gebruikt de IOrganizationService.RetrieveMultiple-methode.

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

Verwijder de TopCount-limiet als u meer records wilt ophalen.

Uitvoer

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

Meer informatie:

Een cloudstroom maken

De vereiste eigenschappen voor geautomatiseerde, direct uit te voeren en geplande stromen zijn: category, name, type, primaryentity en clientdata. Gebruik none voor de primaryentity van stromen van dit type.

Deze statische methode vereist een geverifieerde client die de IOrganizationService implementeert. Het gebruikt de IOrganizationService.Create-methode.

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

Meer informatie: Tabelrijen maken met behulp van de organisatieservice

De statecode van alle op deze manier gemaakte stromen is ingesteld op 0 (Concept of 'Uit'). De stroom moet worden ingeschakeld voordat deze kan worden gebruikt.

De belangrijkste eigenschap is de clientdata. Deze bevat de connectionReferences waarvan de stroom gebruikmaakt en de definitie van de stroom. De connectionReferences zijn de toewijzingen van elke verbinding waarvan de stroom gebruikmaakt.

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

Een cloudstroom bijwerken

Als u een ​​stroom wilt bijwerken, stelt u alleen de eigenschappen in die u wilt wijzigen.

Deze statische methode vereist een geverifieerde client die de IOrganizationService implementeert. Het gebruikt de IOrganizationService.Update-methode om een stroombeschrijving bij te werken en de eigenaar in te stellen.

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

Meer informatie: Tabelrijen bijwerken en verwijderen met behulp van de organisatieservice > Basisupdate

Een cloudstroom verwijderen

De volgende voorbeelden laten zien hoe u de werkstroomrecord verwijdert die een cloudstroom vertegenwoordigt.

De statische DeleteCloudFlow-methode verwijdert een werkstroomrecord.

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

}

Meer informatie: Een record verwijderen met behulp van de SDK

Alle gebruikers ophalen met wie een cloudstroom wordt gedeeld

Gebruik het RetrieveSharedPrincipalsAndAccess-bericht om een lijst op te halen van alle gebruikers waarmee een cloudstroom wordt gedeeld.

Gebruik met de SDK de RetrieveSharedPrincipalsAndAccessRequest-klasse en gebruik met de Web API de RetrieveSharedPrincipalsAndAccess-functie.

Meer informatie: Principals ophalen met toegang tot een record

Een cloudstroom delen of het delen ongedaan maken

Deel een cloudstroom zoals elke andere Dataverse-record met behulp van het GrantAccess-bericht. Gebruik met de SDK de GrantAccessRequest-klasse en gebruik met de Web-API de GrantAccess-actie. Meer informatie: Voorbeeld van GrantAccess

Gebruik het ModifyAccess-bericht als u de toegangsrechten wilt wijzigen die u verleent wanneer u een record deelt. Gebruik met de SDK de ModifyAccessRequest-klasse en gebruik met de Web-API de ModifyAccess-actie. Meer informatie: Voorbeeld van ModifyAccess

Gebruik het RevokeAccess-bericht om het delen van een record ongedaan te maken. Gebruik met de SDK de RevokeAccessRequest-klasse en gebruik met de Web-API de RevokeAccess-actie. Meer informatie: Toegang intrekken

Stromen exporteren

Als een stroom deel uitmaakt van een oplossing, kunt u deze exporteren door de oplossing die de stroom bevat te exporteren met behulp van het ExportSolution-bericht.

De volgende statische ExportSolution-voorbeeldmethode gebruikt ExportSolutionRequest om een byte[] op te halen dat het ZIP-bestand van de niet-beheerde oplossing met de opgegeven UniqueName bevat.

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

Stromen importeren

Als u een ZIP-bestand met een oplossing hebt, kunt u dit importeren met behulp van het ImportSolution-bericht.

Wanneer u stromen importeert, moet u de volgende parameters instellen:

Eigenschapsnaam Omschrijving
OverwriteUnmanagedCustomizations Als er bestaande exemplaren van deze stromen aanwezig zijn in Dataverse, moet deze markering op true worden ingesteld om ze te importeren. Anders worden ze niet overschreven.
PublishWorkflows Hiermee wordt aangegeven of er klassieke Dataverse-werkstromen worden geactiveerd bij het importeren. Deze instelling geldt niet voor andere typen stromen.
CustomizationFile Een op basis van base 64 gecodeerd ZIP-bestand dat de oplossing bevat.

De statische ImportSolution-voorbeeldmethode laat zien hoe u een oplossingsbestand importeert met behulp van de ImportSolutionRequest-klasse

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

Veelgestelde vragen

Hoe zit het met de API op api.flow.microsoft.com?

De API via api.flow.microsoft.com wordt niet ondersteund. Klanten moeten in plaats daarvan de web-API´s van Dataverse voor Power Automate gebruiken, die eerder in dit artikel zijn beschreven.

Als alternatief kunnen klanten de beheerconnectoren gebruiken: Power Automate-beheer of Power Automate voor beheerders.

Klanten kunnen de niet-ondersteunde API's via api.flow.microsoft.com op eigen risico gebruiken. Deze API's zijn onderhevig aan wijzigingen, waardoor er wijzigingen kunnen optreden die fouten veroorzaken.

Entiteitsklassebewerkingen met behulp van de organisatieservice
Bewerkingen uitvoeren met de web-API
Delen en toewijzen
Toegang verifiëren in code
Werken met oplossingen via de Dataverse-SDK