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.
Gerelateerde informatie
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