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 dialogbokser i Dataverse.
2 – Forretningsregler.
3 – Klassiske handlinger i Dataverse.
4 – Forretningsprosessflyter.
5 – Moderne flyt (automatiske, direkte eller planlagte flyter).
6 – Skrivebordsflyter.
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 gitt 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 – Suspendert.
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.

Den statiske ExportSolution-eksempelmetoden nedenfor 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);
}

Se også

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