0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

C#でDataverseのクラウドフロー(Power Automate)の設定情報を出力してみた

Last updated at Posted at 2023-02-13

はじめに

PowerAppsのモデル駆動の設定が面倒なのでC#からDataverseを操作してみたくなった。
今回はクラウドフロー(Power Automate)の設定情報を確認するC#のコードを動かしてみる。

前提

参照ライブラリやCreateCrmService関数の中身は以前の以下の記事を参考に

C#でDataverseに接続してテーブル一覧を表示してみた
https://qiita.com/akihiroe_/items/2db8e2634d7962ef0df7

コード

dataverseで管理されているクラウドフローはworkflowテーブル上に保持されています。このテーブルにはクラウドフロー以外の情報(レコード)も保存されており、どのような情報(レコード)かはcategory属性で判断する必要があります。実際の設定内容はclientdata属性にJSON形式で保存されています。この設定には接続情報やトリガーの情報、実際の処理の情報などが含まています。今回はトリガー部分のJSONを出力しています。

var organizationService = CreateCrmService(user, password, url);

var tableName = "workflow";
var columns = new string[] { "name", "clientdata", "category" };

QueryExpression query = new QueryExpression(tableName);
query.ColumnSet.AddColumns(columns);
ConditionExpression condition = new ConditionExpression();
condition.AttributeName = "category";
condition.Operator = ConditionOperator.Equal;
condition.Values.Add(5); //	Modern Flow

FilterExpression filter = new FilterExpression();
filter.Conditions.Add(condition);
query.Criteria.AddFilter(filter);

var entities = organizationService.RetrieveMultiple(query);
foreach (var entity in entities.Entities)
{
    var name = entity.GetAttributeValue<string>("name");
    var clientdata = entity.GetAttributeValue<string>("clientdata");
    var jsonNode = System.Text.Json.JsonDocument.Parse(clientdata);
    var properties = jsonNode?.RootElement.GetProperty("properties");
    var definition = properties?.GetProperty("definition");
    var triggers = definition?.GetProperty("triggers");

    Console.WriteLine(name);
    if (triggers != null)
    {
        var formattedJSON = System.Text.Json.JsonSerializer.Serialize(triggers,
            new JsonSerializerOptions
            {
                WriteIndented = true,
                Encoder = JavaScriptEncoder.Create(UnicodeRanges.All)
            });
        Console.WriteLine(formattedJSON);
    }
    Console.WriteLine();
}

クラウドフローのJSONサンプル

以下はDataverseのテーブルが追加・変更・削除された場合のトリガーの情報で、subscriptionRequest/entitynameに対象のテーブル名が記載されています。

{
  "行が追加、変更、または削除された場合": {
    "metadata": {
      "operationMetadataId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx"
    },
    "type": "OpenApiConnectionWebhook",
    "inputs": {
      "host": {
        "connectionName": "shared_commondataserviceforapps",
        "operationId": "SubscribeWebhookTrigger",
        "apiId": "/providers/Microsoft.PowerApps/apis/shared_commondataserviceforapps"
      },
      "parameters": {
        "subscriptionRequest/message": 3,
        "subscriptionRequest/entityname": "test_process_change",
        "subscriptionRequest/scope": 4,
        "subscriptionRequest/filteringattributes": "test_app_status",
        "subscriptionRequest/filterexpression": "test_app_status eq 100000001"
      },
      "authentication": "@parameters(\u0027$authentication\u0027)"
    }
  }
}

おわりに

クラウドフローの情報が保存されているworkflowテーブルにはビジネスルールやビジネスフローなどいろいろな振る舞いに関する情報が保存されています。クラシックフローはxaml形式であったり、種類ごとに設定情報が保存されている属性や形式が異なる点は注意してください。

参照情報

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?