Как анализировать содержимое BLOB-файла в Azure Logic App

Я работаю над приложением Azure Logic, которое запускается каждый раз, когда файл JSON добавляется в хранилище BLOB. JSON-файл содержит CustomerId, и на основе этого идентификатора я хочу отправить содержимое JSON-файла в другую конечную точку с помощью HTTP-запроса.

В настоящее время мое приложение Azure Logic выглядит следующим образом: Как анализировать содержимое BLOB-файла в Azure Logic App

Я исследовал и пробовал много вещей все утро, но я не могу понять это. Я пробовал такие вещи, как;

json(body('Get_blob_content_using_path'))

а также

decodeBase64(body('Get_blob_content_using_path'))

и просто опция по умолчанию, как видно на скриншоте. Но я не могу понять, как это сделать. Все, что я хочу, это идти влево или вправо в зависимости от CustomerId.

Так для ясности. Проблема заключается в шаге условия приложения логики. Я могу получить BLOB-файл из хранилища, но проблема заключается в анализе CustomerId из JSON, чтобы я мог проверить его в рамках условия. Кто-нибудь знает, как я могу это исправить?

Для ясности, проблема заключается в извлечении содержимого или в получении значения из содержимого, которое вы успешно извлекли?

Johns-305 10.04.2019 15:04

@ Johns-305 Хороший вопрос! Я обновлю тему, надеюсь, это внесет больше ясности. Проблема заключается в разборе JSON внутри условия, чтобы я мог его проверить. Это после получения содержимого.

Rob 10.04.2019 15:12
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
2
2
6 715
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В конце концов я смог решить проблему, добавив шаг создания перед условием и после шагов, которые дадут мне содержимое BLOB-файла. Compose получает содержимое blob-файла, который я затем могу проверить на соответствие CustomerId, который мне нужен. Тема Этот привела меня в правильном направлении для моего решения.

Обновлено:

Окончательное приложение логики выглядит следующим образом.

Который начинается со следующего кода приложения логики;

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

Другие вопросы по теме