Kod kullanarak bulut akışları ile çalışma

Tüm akışlar Dataverse'te depolanır ve bunları yönetmek üzere .NET için Dataverse SDK veya Web API'si kullanabilirsiniz.

Bu makalede, Power Automate'in Çözümler sekmesinde yer alan akışların yönetimi kapsanmaktadır. Şu anda Akışlarım altındaki kod bulunan akışların yönetilmesi desteklenmemektedir.

Dataverse API'leriyle etkileşim kurma

Dataverse, .NET için Dataverse SDK veya Web API'sini kullanarak eşdeğer özellikler sağlar.

Hangi yöntemi kullanmam gerekir?

En iyi yöntem, proje teknolojisine ve sahip olduğunuz becerilere bağlıdır.

Projenizde .NET kullanılıyorsa SDK kullanmayı öneririz. SDK, yazılı bir nesne modeli ve kimlik doğrulama yöntemleri sağlayarak geliştirme deneyiminizi basitleştirir.

Daha fazla bilgi: Kuruluş hizmetini kullanma

Nasıl bağlanılır?

Bağlanma biçimi, .NET için Dataverse SDK veya Web API'sini kullanıp kullanmadığınıza bağlıdır.

SDK ile, IOrganizationService kurulumuna erişim elde etmek için bir istemci uygulamasıyla bağlanmanız gerekir. IOrganizationService, Dataverse ile etkileşim kurmak için kullanabileceğiniz yöntemler sağlayan bir arabirimdir.

Daha fazla bilgi:

İş akışı tablosu

Bulut akışları, iş akışı EntityType olarak Web API'sinde temsil edilen İşlem (İş Akışı) tablosunda depolanır

Aşağıdaki tabloda, iş akışı tablosundaki önemli sütunlar açıklanmaktadır:

Mantıksal Ad Türü Veri Akışı Açıklaması
category Seçenek Akışın kategorisi. Burada farklı kategorileri bulabilirsiniz.
0 - Klasik Dataverse iş akışları.
1 - Klasik Dataverse iletişim kutuları.
2 - İş kuralları.
3 - Klasik Dataverse eylemleri.
4 - İş süreci akışları.
5 - Modern Akış (Otomatik, anlık veya zamanlanan akışlar).
6 - Masaüstü akışları.
clientdata String Akış tanımı ve connectionReferences için dize olarak kodlanmış JSON.
createdby Arama Akışı oluşturan kullanıcı.
createdon DateTime Akışın oluşturulduğu tarih.
description String Akışın kullanıcı tarafından sağlanan açıklaması.
ismanaged Boole Akışın bir yönetilen çözüm yoluyla yüklendiğini belirtir.
modifiedby Arama Akışı son güncelleştiren kullanıcı.
modifiedon DateTime Akışın son güncelleştirildiği zaman.
name String Akışa sizin verdiğiniz görünen ad.
ownerid Arama Akışın sahibi olan kullanıcı veya takım.
statecode Seçenek Akışın durumu. Durum aşağıdaki gibi olabilir:
0 - Taslak (Kapalı)
1 - Etkinleştirildi (Açık)
2 - Askıya alındı.
type Seçenek Akışın çalışan bir akış mı yoksa daha fazla akış oluştururken kullanılacak bir şablon mu olduğunu belirtir.
1 - Tanım,
2 - Etkinleştirme
3 - Şablon.
workflowid GUID Tüm içeri aktarmalar genelinde bulut akışına ilişkin benzersiz tanımlayıcı.
workflowidunique GUID Akışın bu yüklemesine ilişkin benzersiz tanımlayıcı.

Not

Web API'si ile Arama değerleri, ilgili kayıttaki ayrıntıları edinmek için genişletilebilen tek değerli gezinti özellikleridir.

Arama sütunlarında ayrıca sorgularda kullanılabilen ilgili GUID arama özellikleri vardır. Arama özelliklerinde bu arama kuralı vardır: _<logical name>_value. Web API'sinde arama entitytype için bu arama özelliklerine başvurabilirsiniz: _createdby_value, _modifiedby_value ve _ownerid_value.

Akışları listele

Bulut akışlarının listesini almak için iş akışı tablosunu sorgulayabilirsiniz. Aşağıdaki sorguda, şu anda "açık" olan ilk otomatik, anlık veya zamanlanan akış döndürülür:

Bu statik OutputFirstActiveFlow yöntem için IOrganizationService'ı uygulayan kimliği doğrulanmış bir istemci gerekir. Burada IOrganizationService.RetrieveMultiple yöntemi kullanılır.

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

Daha fazla kayıt almak için TopCount sınırını kaldırın.

Çıkış

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

Daha fazla bilgi:

Bulut akışı oluşturma

Otomatik, anlık ve zamanlanan akışlar için gerekli özellikler: category, name, type, primaryentity ve clientdata. Bu akış türlerinde primaryentity için none kullanın.

Bu statik yöntem için IOrganizationService'ı uygulayan kimliği doğrulanmış bir istemci gerekir. Burada IOrganizationService.Create yöntemi kullanılır.

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

Daha fazla bilgi: Kuruluş Hizmetini kullanarak tablo satırları oluşturma

Tüm akışlarda bu yolla oluşturulan statecode, 0 olarak ayarlanır (Taslak veya "Kapalı"). Akışın kullanılabilmesi için etkinleştirilmesi gerekir.

En önemli özellik, akışın kullandığı connectionReferences öğesini ve akışın tanımını içeren clientdata'dır. connectionReferences, akışın kullandığı her bağlantı için eşlemelerdir.

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

Bulut akışını güncelleştirme

Akışı güncelleştirmek için yalnızca değiştirmek istediğiniz özellikleri ayarlayın.

Bu statik yöntem için IOrganizationService'ı uygulayan kimliği doğrulanmış bir istemci gerekir. Burada, akış açıklamasını güncelleştirmek ve sahibi ayarlamak için IOrganizationService.Update yöntemi kullanılır.

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

Daha fazla bilgi: Kuruluş Hizmeti > Temel güncelleştirmesini kullanarak tablo satırlarını güncelleştirme ve silme

Bulut akışını silme

Aşağıdaki örneklerde bir bulut akışını temsil eden iş akışı kaydının nasıl silineceği gösterilmektedir.

Statik DeleteCloudFlow yönteminde iş akışı kaydı silinir.

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

}

Daha fazla bilgi: SDK'yı kullanarak kayıt silme

Bulut akışının paylaşıldığı tüm kullanıcıları alma

Bulut akışının paylaşıldığı tüm kullanıcıların listesini edinmek için RetrieveSharedPrincipalsAndAccess iletisini kullanın.

SDK ile RetrieveSharedPrincipalsAndAccessRequest Sınıfını ve Web API'si ile RetrieveSharedPrincipalsAndAccess İşlevini kullanın.

Daha fazla bilgi: Kayda erişimi olan sorumluları edinme

Bulut akışı paylaşma veya paylaşımını kaldırma

GrantAccess iletisini kullanarak diğer Dataverse kayıtları gibi bir bulut akışını paylaşın. SDK ile GrantAccessRequest Sınıfını ve Web API'si ile GrantAccess Eylemini kullanın. Daha fazla bilgi: GrantAccess örneği

Kayıt paylaştığınızda verdiğiniz erişim haklarını değiştirmek isterseniz ModifyAccess iletisini kullanın. SDK ile ModifyAccessRequest Sınıfını ve Web API'si ile ModifyAccess Eylemini kullanın. Daha fazla bilgi: ModifyAccess örneği

Kaydın paylaşımını kaldırmak için RevokeAccess iletisini kullanın. SDK ile RevokeAccessRequest Sınıfını ve Web API'si ile RevokeAccess Eylemini kullanın. Daha fazla bilgi: Erişimi iptal etme

Akışları dışarı aktarma

Akış çözümün parçası olduğunda ExportSolution iletisini kullanıp akışı içeren çözümü dışarı aktararak akışı dışarı aktarabilirsiniz.

Aşağıdaki statik ExportSolution örnek yönteminde, belirtilen UniqueName ile yönetilmeyen çözümün ZIP dosyasını içeren bir byte[] almak için ExportSolutionRequest öğesi kullanılmaktadır.

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

Akışları içeri aktarma

Çözüm ZIP dosyanız olduğunda bunu ImportSolution iletisini kullanarak içeri aktarabilirsiniz.

Akışları içeri aktardığınızda aşağıdaki parametreleri ayarlamanız gerekir:

Özellik adı Veri Akışı Açıklaması
OverwriteUnmanagedCustomizations Dataverse'te bu akışların örnekleri varsa, bunları içeri aktarmak için bu bayrağın true olarak ayarlanması gerekir. Aksi takdirde bunlar üzerine yazılmaz.
PublishWorkflows Dataverse iş akışlarının içeri aktarıldığında etkinleştirileceğini belirtir. Bu ayar, diğer iş akışı türlerinde geçerli değildir.
CustomizationFile Çözümü içeren base 64 kodlamalı bir zip dosyası.

Statik ImportSolution örnek yönteminde, ImportSolutionRequest Sınıfını kullanarak bir çözüm dosyasının nasıl içeri aktarılacağı gösterilmektedir

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

Ayrıca bkz.

Kuruluş hizmetini kullanarak yapılan varlık sınıfı işlemleri
Web API'sini kullanarak işlemler gerçekleştirme
Paylaşma ve atama
Kodda erişimi doğrulama
Dataverse SDK kullanarak çözümlerle çalışma