Jaa


Pilvityönkulkujen käsitteleminen koodin avulla

Kaikki työnkulut tallennetaan Dataverseeen, ja voit käyttää joko .NETin Dataverse SDK:ta tai verkko-ohjelmointirajapintaa niiden hallintaan.

Tämä artikkeli kattaa Power Automaten Ratkaisut-välilehteen sisältyvien työnkulkujen hallinnan. Tällä hetkellä Omat työnkulut -kohdassa ei tueta työnkulkujen hallintaa koodilla.

Vuorovaikutus Dataversen ohjelmointirajapintojen kanssa

Dataversen samat ominaisuudet ovat käytettävissä käyttäen joko .NETin Dataverse SDK:ta tai ohjelmointirajapintaa.

Mitä menetelmää minun pitäisi käyttää?

Paras menetelmä määräytyy projektin teknologian ja käytettävissä olevien osaamisalueiden mukaan.

Jos projektissa käytetään .NETiä, suosittelemme SDK:n käyttämistä. SDK yksinkertaistaa kehityskokemusta tarjoamalla kirjoitetun objektimallin ja todennustapoja.

Lisätietoja: Organisaation palvelun käyttäminen

Miten muodostan yhteyden?

Yhteyden muodostustapa määräytyy sen mukaan, käytetäänkö .NETin Dataverse SDK:ta vai verkko-ohjelmointirajapintaa.

SDK:ta käytettäessä on muodostettava yhteys asiakassovellukseen, jotta voi käyttää IOrganizationService-esiintymää. IOrganizationService on rajapinta, joka tarjoaa menetelmiä vuorovaikutukseen Dataversen kanssa.

Lisätietoja:

Työnkulkutaulukko

Pilvityönkulut tallennetaan Prosessin (työnkulun) taulukkoon, joka näkyy verkko-ohjelmointirajapinnassa työnkulun EntityType-arvona

Seuraavassa taulukossa kuvataan työnkulkutaulukon tärkeimmät sarakkeet:

Looginen nimi Type Description
category Valinta Työnkulun luokka. Alla esitellään eri luokat.
0 – perinteiset Dataverse-työnkulut.
1 – perinteiset Dataverse-valintaikkunat.
2 – liiketoimintasäännöt
3 – perinteiset Dataverse-toiminnot.
4 – liiketoimintatyönkulut.
5 – modernityönkulku (automatisoidut, pika- tai ajoitetut työnkulut).
6 – työpöytätyönkulut.
clientdata String Työnkulkumäärityksen merkkijono-koodattu JSON ja sen connectionReferences.
createdby Haku Käyttäjä, joka loi työnkulun.
createdon DateTime Päivämäärä, jolloin työnkulku luotiin.
description String Käyttäjän antama työnkulun kuvaus.
ismanaged Bool Ilmaisee, asennettiinko työnkulku hallitun ratkaisun kautta.
modifiedby Haku Viimeisin käyttäjä, joka päivitti työnkulkua.
modifiedon DateTime Työnkulku päivitetty viimeksi.
name String Työnkululle annettu näyttönimi.
ownerid Haku Työnkulun omistava käyttäjä tai ryhmä.
statecode Valinta Työnkulun tila. Tila voi olla:
0 – luonnos (pois)
1 – aktivoitu (päällä)
2 – keskeytetty.
type Valinta Ilmaisee, onko työnkulku suoritettava työnkulku vai malli, jolla voidaan luoda lisää työnkulkuja.
1 – määritys,
2 – aktivointi
3 – malli.
workflowid GUID-tunnus Pilvityönkulun yksilöllinen tunnus kaikissa tuonneissa.
workflowidunique GUID-tunnus Tämän työnkulkuasennuksen yksilöllinen tunnus.

Muistiinpano

Verkko-ohjelmointirajapinnassa hakuarvot ovat yksiarvoisia siirtymisominaisuuksia, joita voidaan laajentaa tietojen saamiseksi tähän liittyvästä tietueesta.

Hakusarakkeilla on myös vastaavat GUIDhakuominaisuudet, joita voi käyttää kyselyissä. Hakuominaisuuksien nimeämiskäytäntö on _<logical name>_value. Verkko-ohjelmointirajapinnan työkulun entiteettityypin osalta voi viitata näihin hakuominaisuuksiin. _createdby_value, _modifiedby_value ja _ownerid_value.

Luettele työnkulut

Voit noutaa luettelon pilvityönkuluista suorittamalla kyselyn työnkulkutaulukkoon. Seuraava kysely palauttaa ensimmäisen automatisoidun esiintymän tai ajoitetun työnkulun, joka kulloinkin on käytössä:

Tämä staattinen OutputFirstActiveFlow-menetelmä edellyttää todennettua asiakasohjelmaa, joka käyttää IOrganizationService-palvelua. Se käyttää IOrganizationService.RetrieveMultiple-menetelmää.

/// <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"]}");
}

Voit noutaa enemmän resursseja poistamalla TopCount-rajan.

Tuloste

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

Lisätietoja:

Pilvityönkulun luominen

Pakolliset ominaisuudet automaattisia, välittömiä ja ajoitettuja työnkulkuja varten: category, name, type, primaryentity ja clientdata. Käytä primaryentity-koodina koodia none näiden työnkulkutyyppien osalta.

Tämä staattinen -menetelmä edellyttää todennettua asiakasohjelmaa, joka käyttää IOrganizationService-palvelua. Se käyttää IOrganizationService.Create-menetelmää.

/// <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);
}

Lisätietoja: Rivien luominen organisaation palvelun avulla

Kaikkien tällä tavalla luotujen työnkulkujen statecode-arvoksi määritetään 0 (luonnos tai pois). Työnkulku on otettava käyttöön, ennen kuin sitä voidaan käyttää.

Tärkein ominaisuus on clientdata, joka sisältää connectionReferences-viitteet, joita työnkulku käyttää, sekä työnkulun määritelmää. connectionReferences-viitteet on yhdistetty kuhunkin työnkulun käyttämään yhteyteen.

{
  "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"
}

Pilvityönkulun päivittäminen

Jos haluat päivittää työnkulun, määritä vain ominaisuudet, jotka haluat muuttaa.

Tämä staattinen -menetelmä edellyttää todennettua asiakasohjelmaa, joka käyttää IOrganizationService-palvelua. Se käyttää IOrganizationService.Update-menetelmää päivittääkseen työnkulkukuvauksen ja määrittääkseen omistajan.

/// <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);
}

Lisätietoja: Päivitä ja poista taulukkorivejä käyttämällä organisaation palvelua ja > peruspäivitystä

Pilvityönkulun poistaminen

Seuraavissa esimerkeissä näkyy, miten poistetaan pilvityönkulkua edustava työnkulkutietue.

Staattinen DeleteCloudFlow-menetelmä poistaa työnkulkutietueen.

/// <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);

}

Lisätietoja: Tietueen poistaminen SDK:n avulla

Hae kaikki käyttäjät, joille pilvityönkulku on jaettu

RetrieveSharedPrincipalsAndAccess-sanoman avulla voit saada luettelon kaikista käyttäjistä, joille pilvityönkulku on jaettu.

Käytä SDK:n kanssa RetrieveSharedPrincipalsAndAccessRequest-luokkaa ja verkko-ohjelmointirajapinnan kanssa RetrieveSharedPrincipalsAndAccess-funktiota.

Lisätietoja Hae objektit, joilla on käyttöoikeus tietueeseen

Pilvityönkulun jakaminen tai jakamisen poistaminen

Jaa pilvityönkulku kuin mikä tahansa muu Dataverse-tietue käyttämällä GrantAccess-sanomaa. Käytä SDK:n kanssa GrantAccessRequest-luokkaa ja verkko-ohjelmointirajapinnan kanssa GrantAccess-toimintoa. Lisätietoja: GrantAccess-esimerkki

Jos haluat muuttaa käyttöoikeuksia, jotka myönnät jakaessasi tietueen, käytä ModifyAccess-sanomaa. Käytä SDK:n kanssa ModifyAccessRequest-luokkaa ja verkko-ohjelmointirajapinnan kanssa ModifyAccess-toimintoa. Lisätietoja: ModifyAccess-esimerkki

Voit poistaa tietueen jakamisen käyttämällä RevokeAccess-sanomaa. Käytä SDK:n kanssa RevokeAccessRequest-luokkaa ja verkko-ohjelmointirajapinnan kanssa RevokeAccess-toimintoa. Lisätietoja: Käyttöoikeuksien peruuttaminen

Työnkulkujen vieminen

Kun työnkulku on osa ratkaisua, voit viedä sen viemällä ratkaisun, joka sisältää työnkulun, joka käyttää ExportSolution-sanomaa.

Alla oleva staattinen ExportSolution-esimerkkimenetelmä käyttää ExportSolutionRequest-pyyntöä noutaakseen byte[]-koodin, joka sisältää sen hallitsemattoman ratkaisun ZIP-tiedoston, jolla on määritetty 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;
}

Työnkulkujen tuominen

Kun sinulla on ratkaisun ZIP-tiedosto, voit tuoda sen käyttäen ImportSolution-sanomaa.

Kun tuot työnkulkuja, määritä seuraavat parametrit:

Ominaisuuden nimi Description
OverwriteUnmanagedCustomizations Jos näiden työnkulkujen esiintymiä on Dataverse, tämän merkinnän arvoksi on määritettävä true niiden tuomiseksi. Muussa tapauksessa niitä ei korvata.
PublishWorkflows Ilmaisee, aktivoidaanko perinteiset Dataverse -työnkulut tuotaessa. Tämä asetus ei koske muuntyyppisiä työnkulkuja.
CustomizationFile Perus-64-koodattu zip-tiedosto, joka sisältää ratkaisun.

Staattinen ImportSolution-esimerkkimenetelmä näyttää, miten ratkaisutiedosto tuodaan käyttäen ImportSolutionRequest-luokkaa

/// <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);
}

Organisaation palvelua käyttävät entiteettiluokan toiminnot
Toimintojen suorittaminen verkko-ohjelmointirajapinnan avulla
Jakaminen ja määrittäminen
Käyttöoikeuksien vahvistaminen koodissa
Ratkaisujen käsitteleminen Dataverse SDK:ta käyttäen