Arbeid med skyflyter ved hjelp av kode
Alle flyter lagres i Dataverse, og du kan bruke enten Dataverse SDK for .NET eller nett-API for å administrere dem.
Denne artikkelen innholdet dekker administrasjonen av flyter som er inkludert på Løsninger-fanen i Power Automate. Administrasjon av flyter under Mine flyter støttes for øyeblikket ikke med kode.
Samhandle med Dataverse-API-er
Dataverse inneholder ekvivalente funksjoner som bruker enten Dataverse SDK for .NET eller nett-API.
Hvilken metode bør jeg bruke?
Den beste metoden avhenger av prosjektteknologien og ferdighetene du har.
Hvis prosjektet bruker .NET, anbefaler vi å bruke SDK. SDK forenkler utviklingsopplevelsen ved å tilby en typebasert objektmodell og metoder for godkjenning.
Mer informasjon: Bruk organisasjonstjenesten
Hvordan koble til?
Hvordan du kobler til, avhenger av om du bruker Dataverse SDK for .NET eller nett-API.
Med SDK må du koble til en klientapp for å få tilgang til en IOrganizationService-forekomst. IOrganizationService
er et grensesnitt som inneholder metoder du kan bruke til å samhandle med Dataverse.
Mer informasjon:
Arbeidsflyttabell
Skyflyter lagres i tabellen Prosess (arbeidsflyt), som representeres i nett-API-en som arbeidsflyten EntityType
Tabellen nedenfor beskriver viktige kolonner i arbeidsflyttabellen:
Logisk navn | Type | Bekrivelse |
---|---|---|
category |
Valg | Kategorien for flyten. Her er de ulike kategoriene. 0 - Klassiske Dataverse-arbeidsflyter.1 – Klassiske Dataverse-dialogbokser. 2 - Forretningsregler. 3 – Klassiske Dataverse-handlinger. 4 - Prosessflyter. 5 – Moderne flyt (automatiske, direkte eller planlagte flyter).6 – skrivebordsflyt. |
clientdata |
String | En strengkodet JSON for flytdefinisjonen og connectionReferences. |
createdby |
Lookup | Brukeren som opprettet flyten. |
createdon |
Date/klokkeslett | Datoen da flyten ble opprettet. |
description |
String | Brukerens beskrivelse av flyten. |
ismanaged |
Boolsk | Angir om flyten ble installert via en administrert løsning. |
modifiedby |
Lookup | Den siste brukeren som oppdaterte flyten. |
modifiedon |
Date/klokkeslett | Sist gang flyten ble oppdatert. |
name |
String | Visningsnavnet du har gav flyten. |
ownerid |
Lookup | Brukeren eller teamet som eier flyten. |
statecode |
Valg | Statusen for flyten. Statusen kan være følgende: 0 - Utkast (av) 1 – Aktivert (på)2 - Deaktivert. |
type |
Valg | Angir om flyten er en kjørende flyt eller en mal som kan brukes til å opprette flere flyter. 1 - Definisjon, 2 - Aktivering 3 - Mal. |
workflowid |
GUID | Den unike identifikatoren for en skyflyt på tvers av alle importer. |
workflowidunique |
GUID | Den unike identifikatoren for denne installasjonen av flyten. |
Merk
Med nett-API er oppslagsverdier navigasjonsegenskaper med én verdi som kan utvides for å hente detaljer fra den relaterte oppføringen.
Oppslagskolonner har også tilsvarende GUID-oppslagsegenskaper som kan brukes i spørringer. Oppslagsegenskaper har denne navnekonvensjonen: _<logical name>_value
. For arbeidsflyte entitytype i nett-API-en kan du referere til disse oppslagsegenskapene: _createdby_value
, _modifiedby_value
og _ownerid_value
.
Vis flyter
Du kan hente en liste over skyflyter ved å spørre arbeidsflyttabellen. Følgende spørring returnerer den første automatiserte, øyeblikkelige eller planlagte flyten som for øyeblikket er på:
Denne statiske OutputFirstActiveFlow
-metoden krever en godkjent klient som implementerer IOrganizationService. Den bruker IOrganizationService.RetrieveMultiple-metoden.
/// <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 oppføringer, fjerner du TopCount-grensen.
Utdata
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 informasjon:
Opprette en skyflyt
De obligatoriske egenskapene for automatiske, direkte og planlagte flyter er: category
, name
, type
, primaryentity
og clientdata
. Bruk none
for primaryentity
for disse flyttypene.
Denne statiske metoden krever en godkjent klient som implementerer IOrganizationService. Den bruker IOrganizationService.Create-metoden.
/// <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 informasjon: Opprett tabellrader ved hjelp av organisasjonstjenesten
statecode
for alle flyter som er opprettet på denne måten, er angit til 0
(utkast eller "av"). Flyten må aktiveres før den kan brukes.
Den viktigste egenskapen er clientdata
, som inneholder connectionReferences
som flyten bruker, og definisjonen av flyten. connectionReferences
er tilordningene til hver forbindelse som flyten bruker.
{
"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"
}
Oppdatere en skyflyt
Hvis du vil oppdatere en flyt, angir du bare egenskapene du vil endre.
Denne statiske metoden krever en godkjent klient som implementerer IOrganizationService. Den bruker metoden IOrganizationService.Update til å oppdatere en flytbeskrivelse og angi eieren.
/// <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 informasjon: Oppdater og slett tabellrader ved hjelp av Organisasjonstjeneste > Grunnleggende oppdatering
Slette en skyflyt
Eksemplene nedenfor viser hvordan du sletter arbeidsflytoppføringen som representerer en skyflyt.
Den statiske DeleteCloudFlow
-metoden sletter en arbeidsflytoppføring.
/// <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 informasjon: Slett en oppføring ved hjelp av SDK
Hent alle brukere som en skyflyt deles med
Bruk RetrieveSharedPrincipalsAndAccess
-meldingen til å hente en liste over alle brukerne som en skyflyt deles med.
Med SDK bruker du RetrieveSharedPrincipalsAndAccessRequest-klassen, og med Nett-API bruker du RetrieveSharedPrincipalsAndAccess-funksjonen.
Mer informasjon: Hent sikkerhetskontohavere med tilgang til en oppføring
Del eller opphev deling av en skyflyt
Del en skyflyt som enhver annen Dataverse-oppføring ved hjelp av GrantAccess
-meldingen. Med SDK bruker du GrantAccessRequest-klassen, og med Nett-API bruker du GrantAccess-handlingen. Mer informasjon: GrantAccess-eksempelet
Hvis du vil endre tilgangsrettighetene du gir når du deler en oppføring, bruker du ModifyAccess
-meldingen. Med SDK bruker du ModifyAccessRequest-klassen, og med Nett-API bruker du ModifyAccess-handlingen. Mer informasjon: ModifyAccess-eksempelet
Hvis du vil oppheve deling av en oppføring, bruker du RevokeAccess
-meldingen. Med SDK bruker du RevokeAccessRequest-klassen, og med Nett-API bruker du RevokeAccess-handlingen. Mer informasjon: Oppheving av tilgang
Eksportering av flyter
Når en flyt er en del av en løsning, kan du eksportere den ved å eksportere løsningen som inneholder flyten, ved hjelp av ExportSolution
-meldingen.
Følgende statiske ExportSolution
-eksempelmetode bruker ExportSolutionRequest til å hente en byte[]
som inneholder ZIP-filen for den uadministrerte løsningen med det angitte 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;
}
Import av flyter
Når du har en ZIP-løsningsfil, kan du importere den ved å bruke ImportSolution
-meldingen.
Når du importerer flyter, må du angi følgende parametere:
Egenskapsnavn | Bekrivelse |
---|---|
OverwriteUnmanagedCustomizations |
Hvis det finnes eksisterende forekomster av disse flytene i Dataverse, må dette flagget være satt til true for å importere dem. Ellers blir de ikke overskrevet. |
PublishWorkflows |
Angir om klassiske Dataverse-arbeidsflyter blir aktivert ved import. Denne innstillingen gjelder ikke for andre typer flyter. |
CustomizationFile |
En base 64-kodet ZIP-fil som inneholder løsningen. |
Den statiske ImportSolution
-eksempelmetoden viser hvordan du importerer en løsningsfil ved hjelp av ImportSolutionRequest-klassen
/// <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);
}
VANLIGE SPØRSMÅL
Hva med API på api.flow.microsoft.com?
API-en på api.flow.microsoft.com støttes ikke. Kunder bør i stedet bruke web-API-ene for Dataverse for Power Automate dokumentert tidligere i denne artikkelen.
Kunder kan også bruke administrasjonskoblingene: Power Automate Administrasjon eller Power Automate for administratorer.
Kunder kan bruke API-ene som ikke støttes, på api.flow.microsoft.com
på egen risiko. Disse API-ene kan endres, så det kan forekomme ødeleggende endringer.
Relatert informasjon
Enhetsklasseoperasjoner ved hjelp av organisasjonstjenesten
Utfør operasjoner ved hjelp av nett-API
Deling og tilordning
Verifisering av tilgang i kode
Arbeid med løsninger ved hjelp av Dataverse SDK