Arbejde med cloudflow ved hjælp af kode
Alle flows gemmes i Dataverse, og du kan enten bruge Dataverse SDK til .NET eller web-API'en til at administrere dem.
Dette indhold dækker administrationen af flows, som er inkluderet på fanen Løsninger i Power Automate. I øjeblikket understøttes administrationsflows under Mine flows ikke med kode.
Interagere med Dataverse API'er
Dataverse indeholder tilsvarende funktioner, der enten bruger Dataverse SDK til .NET eller Web-API.
Hvilken metode skal jeg bruge?
Den bedste metode afhænger af projektteknologien og de færdigheder, du har.
Hvis der bruges .NET i projektet, anbefales det, at du bruger SDK. SDK forenkler din udviklingsoplevelse ved at levere en type objektmodel og metoder til godkendelse.
Flere oplysninger: Brug af tjenesten Organisation
Hvordan oprettes der forbindelse?
Hvordan du opretter forbindelse, afhænger af, om du bruger Dataverse SDK til .NET eller Web-API.
Med SDK skal du oprette forbindelse til et klientprogram for at få adgang til en forekomst af IOrganizationService. IOrganizationService
er en brugergrænseflade, der indeholder metoder, du kan bruge til at arbejde med Dataverse.
Flere oplysninger:
Arbejdsprocestabel
Cloudflows lagres i den procestabel (arbejdsproces), der er repræsenteret i web-API'en som arbejdsprocesobjekttypen
I tabellen nedenfor beskrives vigtige kolonner i arbejdsprocestabellen:
Logisk navn | Type | Beskrivelse |
---|---|---|
category |
Choice | Kategorien for flowet. Her er de forskellige kategorier. 0 - Klassiske Dataverse arbejdsprocesser.1 - Klassiske Dataverse-dialoger. 2 - Forretningsregler. 3 - Klassiske Dataverse-handlinger. 4 - Forretningsprocesflows. 5 - Moderne flow (Automatiseret, Øjeblikkeligt eller Planlagt).6 – Skrivebordsflows. |
clientdata |
String | En strengkodet JSON af flowdefinitionen og dens connectionReferences. |
createdby |
Søg | Den bruger, som oprettede flowet. |
createdon |
Datetime | Den dato, hvor flowet blev oprettet. |
description |
String | Den brugerangivne beskrivelsen af flowet. |
ismanaged |
Bool | Angiver, om flowet blev installeret via en administreret løsning. |
modifiedby |
Søg | Den sidste bruger, som opdaterede flowet. |
modifiedon |
Datetime | Den sidste gang, flowet blev opdateret. |
name |
String | Det viste navn, du gav flowet. |
ownerid |
Søg | Bruger eller tema, der ejer flowet. |
statecode |
Choice | Status af flowet. Status kan være:0 - Kladde (fra) 1 - Aktiveret (til)2 - Afbrudt. |
type |
Choice | Angiver, om flowet er et kørende flow eller en skabelon, der kan bruges til at oprette yderligere flows. 1 - Definition, 2 - Aktivering 3 - Skabelon. |
workflowid |
GUID | Det entydige id for et cloudflow på tværs af alle importer. |
workflowidunique |
GUID | Det entydige id for denne installation af flowet. |
Bemærk
Med Web-API er opslagsværdier navigationsegenskaber med en enkelt værdi, der kan udvides for at få detaljer fra den relaterede post.
Opslagskolonner har også tilsvarende egenskaber for GUID-opslag -egenskaber, der kan bruges i forespørgsler. Opslagsegenskaber har denne navngivningskonvention: _<logical name>_value
. I forbindelse med arbejdsprocesobjekttypen i web-API'en kan du referere til følgende opslagsegenskaber: _createdby_value
, _modifiedby_value
og _ownerid_value
.
Vis liste over flows
Hvis du vil hente en liste over cloudflows, kan du forespørge om arbejdsprocestabellen. Følgende forespørgsel returnerer først de automatiserede, øjeblikkelige eller planlagte flows, der i øjeblikket er slået til:
Denne statiske OutputFirstActiveFlow
metode kræver en godkendt klient, der implementerer IOrganizationService. Den bruger 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"]}");
}
Hvis du vil hente flere poster, skal du fjerne grænsen for TopCount.
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
Flere oplysninger:
Opret et cloudflow
De krævede egenskaber for automatiserede, øjeblikkelige og planlagte flows er: category
, name
, type
, primaryentity
og clientdata
. Brug none
som primaryentity
for disse typer flows.
Denne statiske metode kræver en godkendt klient, der implementerer IOrganizationService. Den bruger 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);
}
Flere oplysninger: Oprettelse af tabelrækker ved hjælp af organisationstjenesten
De statecode
af alle strømme, der oprettes på denne måde, er angivet til 0
(Kladde eller Fra). Flowet skal aktiveres, før det kan bruges.
Den vigtigste egenskab er clientdata
, der indeholder connectionReferences
, som flowet bruger, og flowets definition. connectionReferences
er tilknytningerne til hver forbindelse, som flowet bruger.
{
"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"
}
Opdatere et cloudflow
Hvis du vil opdatere et flow, skal du kun angive de egenskaber, du vil ændre.
Denne statiske metode kræver en godkendt klient, der implementerer IOrganizationService. Den bruger metoden IOrganizationService.Update til at opdatere en flowbeskrivelse og angive ejeren.
/// <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);
}
Flere oplysninger: Opdatere og slette tabelrækker ved hjælp af opdateringen Grundlæggende om > organisationstjenesten
Slette et cloudflow
I følgende eksempler kan du se, hvordan du kan slette den arbejdsprocespost, der repræsenterer et cloudflow.
Ved den statiske DeleteCloudFlow
metode slettes en arbejdsprocespost.
/// <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);
}
Flere oplysninger: Slette en post med SDK
Se alle brugere, som et cloudflow er delt med
Brug meddelelsen RetrieveSharedPrincipalsAndAccess
til at få vist en liste over alle de brugere, som et cloudflow deles med.
I SDK skal du bruge RetrieveSharedPrincipalsAndAccessRequest-klassen, og med Web-API skal du bruge funktionen RetrieveSharedPrincipalsAndAccess.
Flere oplysninger: Få sikkerhedskonto med adgang til en post
Dele eller annullere deling af et cloudflow
Del et cloudflow som enhver anden Dataverse-post ved hjælp af GrantAccess
-meddelelsen. I SDK skal du bruge GrantAccessRequest Class, og med Web-API skal du bruge funktionen GrantAccess Action. Flere oplysninger: GrantAccess-eksempel
Hvis du vil ændre de adgangsrettigheder, du tildeler, når du deler en post, skal du bruge ModifyAccess
meddelelsen. I SDK skal du bruge ModifyAccessRequest Class, og med Web-API skal du bruge funktionen ModifyAccess Action. Flere oplysninger: ModifyAccess-eksempel
Hvis du vil ophæve delingen af en post, skal du bruge RevokeAccess
meddelelsen. I SDK skal du bruge RevokeAccessRequest Class, og med Web-API skal du bruge funktionen RevokeAccess Action. Flere oplysninger: Tilbagekalde adgang
Eksporter flows
Når et flow er en del af en løsning, kan du eksportere den ved at eksportere den løsning, der indeholder flowet, ved hjælp af ExportSolution
meddelelsen.
I følgende statiske ExportSolution
eksempelmetode bruges ExportSolutionRequest til at hente byte[]
, der indeholder ZIP-filen for den ikke-administrerede løsning med det angivne 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;
}
Importer flows
Når du har en ZIP-fil med løsninger, kan du importere den ved hjælp af ImportSolution
meddelelsen.
Når du importerer flow, skal du angive følgende parametre:
Egenskabsnavn | Beskrivelse |
---|---|
OverwriteUnmanagedCustomizations |
Hvis der findes forekomster af disse flows i Dataverse, skal dette flag angives til true for at importere dem. Ellers overskrives de ikke. |
PublishWorkflows |
Angiver, om klassiske arbejdsprocesser i Dataverse aktiveres ved import. Denne indstilling gælder ikke for andre typer af flows. |
CustomizationFile |
En grundlæggende 64-kodet zip-fil, der indeholder løsningen. |
Den statiske ImportSolution
eksempelmetode viser, hvordan du importerer en løsningsfil ved hjælp af ImportSolutionRequest Class
/// <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);
}
OFTE STILLEDE SPØRGSMÅL
Hvad med API'en på api.flow.microsoft.com?
API'en på api.flow.microsoft.com understøttes ikke. Kunderne skal i stedet bruge Dataverse web-API'erne til Power Automate, som tidligere er dokumenteret i denne artikel.
Kunderne kan også bruge connectors til styring: Power Automate Administration eller Power Automate til administratorer.
Kunder kan bruge de ikke-understøttede API'er api.flow.microsoft.com
på egen risiko. Disse API'er kan ændres, så der kan forekomme ændringer, der bryder funktionaliteten.
Relaterede oplysninger
Handlinger til objektklasse ved hjælp af tjenesten Organisation
Udføre handlinger ved hjælp af Web-API'en
Deling og tildeling
Kontrol af adgang i kode
Arbejde med løsninger ved hjælp af Dataverse-SDK