Arbeta med molnflöden med hjälp av kod
Alla flöden lagras i Dataverse och du kan hantera dem med antingen Dataverse SDK för .NET eller webb-API.
Denna artikel omfattar hanteringen av flöden som finns med på fliken Lösningar i Power Automate. För närvarande hanterar flöden under Mina flöden stöds inte med kod.
Interagera med Dataverse API:er
Dataverse har likvärdiga funktioner med antingen Dataverse SDK för .NET eller webb-API.
Vilken metod ska jag använda?
Den bästa metoden beror på projekttekniken och dina kunskaper.
Om ditt projekt använder .NET rekommenderar vi att du använder SDK. SDK:n förenklar din utvecklingsupplevelse genom att tillhandahålla en maskinskriven objektmodell och metoder för autentisering.
Mer information: Använda organisationstjänsten
Anslut så här?
Hur du ansluter beror på om du använder Dataverse SDK för .NET eller webb-API.
Med SDK måste du ansluta till ett klientprogram för att få åtkomst till en IOrganizationService-instans. IOrganizationService
är ett gränssnitt som innehåller metoder som du kan använda för att interagera med Dataverse.
Mer information:
Arbetsflödestabell
Molnflöden lagras i Process (arbetsflöde) tabell som representeras i webb-API:t som arbetsflöde EntityType
Följande tabell beskriver viktiga kolumner i arbetsflödestabellen:
Logiskt namn | Typ | Beskrivning |
---|---|---|
category |
Alternativ | Kategori för flödet. Här är de olika kategorierna. 0 – Klassiska Dataverse-arbetsflöden.1 – Klassiska Dataverse-dialogrutor. 2 – Affärsregler. 3 – Klassiska Dataverse-åtgärder. 4 – Affärsprocessflöden. 5 – Modernt flöde (automatiserade, omedelbara eller schemalagda flöden).6 – Datorflöden. |
clientdata |
String | En strängkodad JSON för flödesdefinitionen och dess connectionReferences. |
createdby |
Sökning | Den användare som skapade flödet. |
createdon |
Datum/tid | Datum när flödet skapades. |
description |
String | Användarens beskrivning av flödet. |
ismanaged |
Bool | Anger om flödet installerades via en hanterad lösning. |
modifiedby |
Sökning | Den senaste användaren som uppdaterade flödet. |
modifiedon |
Datum/tid | Den senaste tidpunkten då flödet uppdaterades. |
name |
String | Visningsnamnet som du tilldelade till flödet. |
ownerid |
Sökning | Användaren eller teamet som äger flödet. |
statecode |
Alternativ | Status för flödet. Statusen kan vara: 0 – Utkast (Av) 1 – Aktiverad (På)2 – Pausat. |
type |
Alternativ | Anger om flödet är ett löpande flöde eller en mall som kan användas för att skapa ytterligare flöden. 1 – Definition 2 – Aktivering 3 – Mall. |
workflowid |
GUID | Den unika identifieraren för ett molnflöde för alla importer. |
workflowidunique |
GUID | Den unika identifieraren för den här installationen av flödet. |
Kommentar
Med webb-API är uppslagsvärden är enkelvärderade navigeringsegenskaper som kan expanderas för att få information från den relaterade posten.
Uppslagskolumner har också motsvarande GUID egenskaper för uppslag som kan användas i frågor. Uppslagsegenskaper har den här namnkonvention: _<logical name>_value
. För arbetsflödesentitetstypen i Webb-API kan du referera till dessa uppslagsegenskaper: _createdby_value
_modifiedby_value
och _ownerid_value
.
Lista flöden
Om du vill hämta en lista över molnflöden kan du fråga i arbetsflödestabellen. Följande fråga returnerar det första automatiska, omedelbara eller schemalagda flödet som för närvarande är ”på”:
Denna statiska OutputFirstActiveFlow
metoden kräver en autentiserad klient som implementerar IOrganizationService. Den använder metoden 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"]}");
}
Om du vill hämta fler poster tar du bort TopCount-gränsen.
Output
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
Mer information:
Skapa ett molnflöde
De nödvändiga egenskaperna för automatiserade, omedelbara och schemalagda flöden är: category
, name
, type
, primaryentity
och clientdata
. Använd none
för primaryentity
för dessa typer av flöden.
Denna statiska metoden kräver en autentiserad klient som implementerar IOrganizationService. Den använder metoden 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);
}
Mer information: Skapa tabellrader med organisationstjänsten
För statecode
alla flöden som skapas på det här sättet anges 0
(Utkast eller Av). Flödet måste aktiveras innan det kan användas.
Den viktigaste egenskapen är clientdata
, som innehåller connectionReferences
som flödet använder och definition i flödet. connectionReferences
är mappningar för varje anslutning som flödet använder.
{
"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"
}
Uppdatera ett molnflöde
För att uppdatera ett flöde, ställ bara in de egenskaper du vill ändra.
Denna statiska metoden kräver en autentiserad klient som implementerar IOrganizationService. Den använder metoden IOrganizationService.Update metod för att uppdatera en flödesbeskrivning och ställa in ägaren.
/// <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);
}
Mer information: Uppdatera och ta bort tabellrader med hjälp av organisationstjänsten > enkel uppdatering
Ta bort ett molnflöde
Följande exempel visar hur du tar bort en arbetsflödespost som representerar ett molnflöde.
Den statiska DeleteCloudFlow
metoden tar bort en arbetsflödespost.
/// <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);
}
Mer information: Ta bort en post med SDK
Hämta alla användare som ett molnflöde delas med
Använd RetrieveSharedPrincipalsAndAccess
meddelandet om du vill visa en lista över alla användare som ett molnflöde delas med.
Med SDK, använd RetrieveSharedPrincipalsAndAccessRequest-klass och med webb-API:n använd RetrieveSharedPrincipalsAndAccess-funktion.
Mer information: Skaffa huvudkonto med tillgång till ett register
Dela eller sluta dela ett molnflöde
Dela ett molnflöde som andra Dataverse poster med hjälp av GrantAccess
meddelandet. Med SDK, använd GrantAccessRequest-klass och med Webb-API använd GrantAccess-åtgärd. Mer information: GrantAccess-exempel
Om du vill ändra dina åtkomsträttigheter när du delar en post använder du ModifyAccess
meddelandet. Med SDK, använd ModifyAccessRequest-klass och med Webb-API använd ModifyAccess-åtgärd. Mer information: ModifyAccess-exempel
Om du vill sluta dela en post använder du RevokeAccess
meddelandet. Med SDK, använd RevokeAccessRequest-klass och med Webb-API använd RevokeAccess-åtgärd. Mer information: Återkallar åtkomst
Exportera flöden
När ett flöde är en del av en lösning kan du exportera det genom att exportera lösningen som innehåller flödet med hjälp av ExportSolution
-meddelandet.
Följande statiska ExportSolution
-exempelmetod använder ExportSolutionRequest för att hämta ett byte[]
som innehåller ZIP-filen för den ohanterade lösningen med angivet 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;
}
Importera flöden
När du har en ZIP-fil i en lösning kan du importera den med hjälp av ImportSolution
meddelandet.
När du importerar flöden ska du ange följande parametrar:
Egenskapsnamn | Beskrivning |
---|---|
OverwriteUnmanagedCustomizations |
Om det finns befintliga instanser av dessa flöden i Dataverse, måste den här flaggan anges till true för att de ska kunna importeras. Annars skrivs de inte över. |
PublishWorkflows |
Anger om klassiska Dataverse-arbetsflöden aktiveras under import. Den här inställningen gäller inte för andra typer av flöden. |
CustomizationFile |
En base 64-kodad zip-fil som innehåller lösningen. |
Den statiska ImportSolution
exempelmetoden visar hur du importerar en lösningsfil med hjälp av ImportSolutionRequest-klass
/// <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);
}
Vanliga frågor och svar
Hur är det med API:t på api.flow.microsoft.com?
API:t på api.flow.microsoft.com stöds inte. Kunder bör i stället använda webb-API:erna för Dataverse för Power Automate som dokumenterats tidigare i den här artikeln.
Kunder kan också använda hanteringsanslutningsprogrammen: Power Automate-hantering eller Power Automate för administratörer.
Kunder kan använda API:er som inte stöds på api.flow.microsoft.com
på egen risk. Dessa API:er kan komma att ändras, varför icke-bakåtkompatibla ändringar kan inträffa.
Relaterad information
Entitetsklassåtgärder med hjälp av organisationstjänsten
Utföra åtgärder med hjälp av webb-API
Dela och tilldela
Verifiera åtkomst i kod
Arbeta med lösningar med hjälp av Dataverse SDK