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 |
Diize | Akışa 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.
Çıktı
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öntemi, belirtilen UniqueName ile yönetilmeyen çözümün ZIP dosyasını içeren bir byte[]
almak için ExportSolutionRequest'i kullanı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);
}
SSS
api.flow.microsoft.com'daki API ne olacak?
api.flow.microsoft.com API'si desteklenmiyor. Müşteriler bunun yerine bu makalede daha önce belgelenen Power Automate için Dataverse Web API'lerini kullanmalıdır.
Alternatif olarak, müşteriler yönetim bağlayıcılarını kullanabilir: Power Automate Yönetim veya Yöneticiler için Power Automate.
Müşteriler, api.flow.microsoft.com
adresindeki desteklenmeyen API'leri kendi riskleri altında kullanabilirler. Bu API'ler değiştirilebilir, bu nedenle hataya neden olan değişiklikler meydana gelebilir.
İlgili bilgiler
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