如何在Azure Logic App中解析BLOB文件的内容

时间:2019-04-10 11:44:39

标签: azure azure-logic-apps

我正在使用Azure逻辑应用程序,该应用程序每次将JSON文件添加到BLOB存储时都会触发。 JSON文件包含一个CustomerId,根据这个ID,我想使用HTTP请求将JSON文件的内容发送到另一个端点。

我的Azure Logic应用当前看起来像这样; enter image description here

整个上午,我一直在研究和尝试很多事情,但我对此一无所知。我已经尝试过类似的事情

json(body('Get_blob_content_using_path'))

decodeBase64(body('Get_blob_content_using_path'))

,只有默认选项,如屏幕快照中所示。但是我不知道该怎么做。我想要的只是根据CustomerId向左或向右移动。

为清楚起见。问题出在Logic App的条件步骤之内。我可以从存储中检索BLOB文件,但是问题在于从JSON解析CustomerId,因此我可以在条件内对其进行验证。有人知道我该如何解决吗?

1 个答案:

答案 0 :(得分:1)

最后,我能够通过在条件之前和步骤之后添加一个组合步骤来解决该问题,该步骤将使我获得BLOB文件的内容。撰写的内容是blob文件的内容,然后我可以针对所需的CustomerId进行验证。 This主题为我提供了正确的解决方案。

更新:

最终的逻辑应用程序如下所示; enter image description here

从以下逻辑应用程序代码开始创建;

{
    "$connections": {
        "value": {
            "azureblob": {
                "connectionId": "<snip>",
                "connectionName": "azureblob",
                "id": "<snip>"
            },
            "slack": {
                "connectionId": "<snip>",
                "connectionName": "slack",
                "id": "<snip>"
            }
        }
    },
    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
            "Compose": {
                "inputs": "@base64ToString(body('Get_blob_content').$content)",
                "runAfter": {
                    "Get_blob_content": [
                        "Succeeded"
                    ]
                },
                "type": "Compose"
            },
            "Condition_2": {
                "actions": {
                    "Condition_3": {
                        "actions": {
                            "Delete_blob_3": {
                                "inputs": {
                                    "host": {
                                        "connection": {
                                            "name": "@parameters('$connections')['azureblob']['connectionId']"
                                        }
                                    },
                                    "method": "delete",
                                    "path": "/datasets/default/files/@{encodeURIComponent(encodeURIComponent(triggerBody()?['Id']))}"
                                },
                                "runAfter": {},
                                "type": "ApiConnection"
                            }
                        },
                        "else": {
                            "actions": {
                                "Copy_blob_2": {
                                    "inputs": {
                                        "host": {
                                            "connection": {
                                                "name": "@parameters('$connections')['azureblob']['connectionId']"
                                            }
                                        },
                                        "method": "post",
                                        "path": "/datasets/default/copyFile",
                                        "queries": {
                                            "destination": "/<some-blob-container>/@{triggerBody()?['Name']}",
                                            "overwrite": false,
                                            "queryParametersSingleEncoded": true,
                                            "source": "@triggerBody()?['Path']"
                                        }
                                    },
                                    "runAfter": {
                                        "Post_message_2": [
                                            "Succeeded"
                                        ]
                                    },
                                    "type": "ApiConnection"
                                },
                                "Delete_blob_4": {
                                    "inputs": {
                                        "host": {
                                            "connection": {
                                                "name": "@parameters('$connections')['azureblob']['connectionId']"
                                            }
                                        },
                                        "method": "delete",
                                        "path": "/datasets/default/files/@{encodeURIComponent(encodeURIComponent(triggerBody()?['Id']))}"
                                    },
                                    "runAfter": {
                                        "Copy_blob_2": [
                                            "Succeeded"
                                        ]
                                    },
                                    "type": "ApiConnection"
                                },
                                "Post_message_2": {
                                    "inputs": {
                                        "host": {
                                            "connection": {
                                                "name": "@parameters('$connections')['slack']['connectionId']"
                                            }
                                        },
                                        "method": "post",
                                        "path": "/chat.postMessage",
                                        "queries": {
                                            "channel": "<snip>",
                                            "text": "<some-message>"
                                        }
                                    },
                                    "runAfter": {},
                                    "type": "ApiConnection"
                                }
                            }
                        },
                        "expression": {
                            "or": [
                                {
                                    "equals": [
                                        "@outputs('HTTP_2')['statusCode']",
                                        200
                                    ]
                                },
                                {
                                    "equals": [
                                        "@outputs('HTTP_2')['statusCode']",
                                        202
                                    ]
                                }
                            ]
                        },
                        "runAfter": {
                            "HTTP_2": [
                                "Succeeded",
                                "Failed"
                            ]
                        },
                        "type": "If"
                    },
                    "HTTP_2": {
                        "inputs": {
                            "authentication": {
                                "password": "<some-password>",
                                "type": "Basic",
                                "username": "<some-username>"
                            },
                            "body": "@outputs('Compose')",
                            "headers": {
                                "Content-Type": "application/json"
                            },
                            "method": "POST",
                            "uri": "<some-url>"
                        },
                        "runAfter": {},
                        "type": "Http"
                    }
                },
                "else": {
                    "actions": {
                        "Condition_4": {
                            "actions": {
                                "Delete_blob_5": {
                                    "inputs": {
                                        "host": {
                                            "connection": {
                                                "name": "@parameters('$connections')['azureblob']['connectionId']"
                                            }
                                        },
                                        "method": "delete",
                                        "path": "/datasets/default/files/@{encodeURIComponent(encodeURIComponent(triggerBody()?['Id']))}"
                                    },
                                    "runAfter": {},
                                    "type": "ApiConnection"
                                }
                            },
                            "else": {
                                "actions": {
                                    "Copy_blob_3": {
                                        "inputs": {
                                            "host": {
                                                "connection": {
                                                    "name": "@parameters('$connections')['azureblob']['connectionId']"
                                                }
                                            },
                                            "method": "post",
                                            "path": "/datasets/default/copyFile",
                                            "queries": {
                                                "destination": "/<some-blob-container>/@{triggerBody()?['Name']}",
                                                "overwrite": false,
                                                "queryParametersSingleEncoded": true,
                                                "source": "@triggerBody()?['Path']"
                                            }
                                        },
                                        "runAfter": {
                                            "Post_message_3": [
                                                "Succeeded"
                                            ]
                                        },
                                        "type": "ApiConnection"
                                    },
                                    "Delete_blob_6": {
                                        "inputs": {
                                            "host": {
                                                "connection": {
                                                    "name": "@parameters('$connections')['azureblob']['connectionId']"
                                                }
                                            },
                                            "method": "delete",
                                            "path": "/datasets/default/files/@{encodeURIComponent(encodeURIComponent(triggerBody()?['Id']))}"
                                        },
                                        "runAfter": {
                                            "Copy_blob_3": [
                                                "Succeeded"
                                            ]
                                        },
                                        "type": "ApiConnection"
                                    },
                                    "Post_message_3": {
                                        "inputs": {
                                            "host": {
                                                "connection": {
                                                    "name": "@parameters('$connections')['slack']['connectionId']"
                                                }
                                            },
                                            "method": "post",
                                            "path": "/chat.postMessage",
                                            "queries": {
                                                "channel": "<snip>",
                                                "text": "<some-message>"
                                            }
                                        },
                                        "runAfter": {},
                                        "type": "ApiConnection"
                                    }
                                }
                            },
                            "expression": {
                                "or": [
                                    {
                                        "equals": [
                                            "@outputs('HTTP_3')['statusCode']",
                                            200
                                        ]
                                    },
                                    {
                                        "equals": [
                                            "@outputs('HTTP_3')['statusCode']",
                                            202
                                        ]
                                    }
                                ]
                            },
                            "runAfter": {
                                "HTTP_3": [
                                    "Succeeded"
                                ]
                            },
                            "type": "If"
                        },
                        "HTTP_3": {
                            "inputs": {
                                "authentication": {
                                    "password": "<some-password>",
                                    "type": "Basic",
                                    "username": "<some-username>"
                                },
                                "body": "@outputs('Compose')",
                                "headers": {
                                    "Content-Type": "application/json"
                                },
                                "method": "POST",
                                "uri": "<some-url>"
                            },
                            "runAfter": {},
                            "type": "Http"
                        }
                    }
                },
                "expression": {
                    "and": [
                        {
                            "contains": [
                                "@outputs('Compose')",
                                "\"CustomerId\":\"00000000-0000-0000-0000-000000000000\""
                            ]
                        }
                    ]
                },
                "runAfter": {
                    "Compose": [
                        "Succeeded"
                    ]
                },
                "type": "If"
            },
            "Get_blob_content": {
                "inputs": {
                    "host": {
                        "connection": {
                            "name": "@parameters('$connections')['azureblob']['connectionId']"
                        }
                    },
                    "method": "get",
                    "path": "/datasets/default/files/@{encodeURIComponent(encodeURIComponent(triggerBody()?['Path']))}/content",
                    "queries": {
                        "inferContentType": true
                    }
                },
                "runAfter": {},
                "type": "ApiConnection"
            }
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {
            "$connections": {
                "defaultValue": {},
                "type": "Object"
            }
        },
        "triggers": {
            "When_a_blob_is_added_or_modified_(properties_only)": {
                "inputs": {
                    "host": {
                        "connection": {
                            "name": "@parameters('$connections')['azureblob']['connectionId']"
                        }
                    },
                    "method": "get",
                    "path": "/datasets/default/triggers/batch/onupdatedfile",
                    "queries": {
                        "folderId": "<some-generated-folderid>",
                        "maxFileCount": 100
                    }
                },
                "metadata": {
                    "<some-generated-folderid>": "/<some-blob-container>"
                },
                "recurrence": {
                    "frequency": "Minute",
                    "interval": 1
                },
                "splitOn": "@triggerBody()",
                "type": "ApiConnection"
            }
        }
    }
}