2016年9月25日日曜日

LogicFlow で並列動作を記述する

もともと初期のスキーマより提供されている並列動作ですが、現在のスキーマ形式に切り替わってからはデザイナで対応されていないのもあり、あまり触れることがなかったのですが、気が付いたらデザイナ上でも並列動作を表示できるようになっていたので確認してみました。

「表示できるように」と書いたように、現時点ではデザイナ上から並列動作を指定することはできません。利用するには CodeView 上で JSON を直接編集する必要があります。

image

サンプルとしてこのような LogicFlow を作成します。これを CodeView で見ると次のようになります。

{
    "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
    "actions": {
        "応答": {
            "inputs": {
                "body": "TEST",
                "statusCode": 200
            },
            "runAfter": {},
            "type": "Response"
        }
    },
    "contentVersion": "1.0.0.0",
    "outputs": {},
    "parameters": {},
    "triggers": {
        "manual": {
            "inputs": {
                "schema": {}
            },
            "kind": "Http",
            "type": "Request"
        }
    }
}

この json 定義を次のように書き換えます。

{
    "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
    "actions": {
        "応答": {
            "inputs": {
                "body": "TEST",
                "statusCode": 200
            },
            "runAfter": {},
            "type": "Response"
        },
        "応答_2": {
            "inputs": {
                "body": "TEST",
                "statusCode": 200
            },
            "runAfter": {},
            "type": "Response"
        }
    },
    "contentVersion": "1.0.0.0",
    "outputs": {},
    "parameters": {},
    "triggers": {
        "manual": {
            "inputs": {
                "schema": {}
            },
            "kind": "Http",
            "type": "Request"
        }
    }
}

応答_2 というアクションを追加したものです。単純に追加しただけですが、この状態でデザイナを表示すると次のようになります。

image

このように単純に追加しただけでも並列動作となりますが、これは先程の JSON 定義にて、各コネクタの値に runAfter という箇所が影響しています。この値は「直前に実行されるコネクタ」についての情報を設定するもので、ここが同一の値のコネクタは並列に実行されることとなります。今回のサンプルでいえば、runAfter が未指定のもの同士(トリガ後すぐに実行するもの)が並列に並べられることとなります。

なお、現時点の制限かどうかは不明ですが、片方の並列動作アクションにだけ後続のアクションを定義して言った場合、デザイナ上で新規アクション追加を行うと想定している動きと違う動きとなります。

image

このようにどちらかのアクションに対しての後続アクション追加となるのですが、並列動作するアクションが同一数の場合はこのようになります。

image

試しに Compose コネクタを導入すると、JSON 定義は以下のように記載されます。

{
    "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
    "actions": {
        "作成": {
            "inputs": "",
            "runAfter": {
                "応答": [
                    "Succeeded"
                ],
                "応答_2": [
                    "Succeeded"
                ]
            },
            "type": "Compose"
        },
        "応答": {
            "inputs": {
                "body": "TEST",
                "statusCode": 200
            },
            "runAfter": {},
            "type": "Response"
        },
        "応答_2": {
            "inputs": {
                "body": "TEST",
                "statusCode": 200
            },
            "runAfter": {},
            "type": "Response"
        }
    },
    "contentVersion": "1.0.0.0",
    "outputs": {},
    "parameters": {},
    "triggers": {
        "manual": {
            "inputs": {
                "schema": {}
            },
            "kind": "Http",
            "type": "Request"
        }
    }
}

Compose コネクタの runAfter 値に二つのアクションが成功したら、という感じに設定されているのがわかると思います。このように記載して、並列動作するアクションが同一数である場合は、先ほどのようにデザイナ上でも正しく線が引かれますが、同一数ではない場合はデザイナ上でアクション追加を行った場合と同様、どちらか片方のアクションに対してのみつながった状態となり、意図した動きと異なる結果となりますので注意が必要です。

0 件のコメント:

コメントを投稿