Кодировка URI для имен столбцов SQL в приложениях логики Azure

#azure #encoding #azure-logic-apps

Вопрос:

У меня есть несколько приложений логики, которые в основном выполняют следующее:

При срабатывании триггера времени вызывается набор хранимых процедур SQL, затем выполняется серия инструкций Select, которые передаются в таблицу CSV, которая затем отправляется по электронной почте получателям отчета.

Процесс отлично работает с одной проблемой — в ряде столбцов SQL есть пробелы.

Когда я запускаю a select [column 1] from table в SQL, он работает правильно.

Когда я запускаю один и тот же выбор в приложениях логики — вывод был изменен, как я полагаю, пример кодировки URI:

 Column_x0020_1  
result1  
result2  
result3  
etc.
 

Когда я запускаю отладку, я вижу, что это генерируется при выводе запроса Execute SQL, а не при создании таблицы CSV, и я не вижу возможности либо избежать пробелов, чтобы они не кодировались в формате URI, либо что-то программно изменить имена столбцов/данные в кодировке URI на «обычную» кодировку.

Так что, пожалуйста, помогите?

Ответ №1:

Вы можете использовать приведенное ниже выражение для преобразования имени столбца с кодировкой URI в обычный формат

  replace(string(body('Execute_a_SQL_query_(V2)')),'_x0020_',' ')
 

Вот пример выходных данных для справки

введите описание изображения здесь

введите описание изображения здесь

  • Используется для удаления имени столбца, закодированного в URI, до обычного имени

введите описание изображения здесь

обновление кода приложения логики:

 {
    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
            "Compose": {
                "inputs": "@json(replace(string(body('Execute_a_SQL_query_(V2)')),'_x0020_',' '))",
                "runAfter": {
                    "Execute_a_SQL_query_(V2)": [
                        "Succeeded"
                    ]
                },
                "type": "Compose"
            },
            "Create_CSV_table": {
                "inputs": {
                    "format": "CSV",
                    "from": "@variables('array')"
                },
                "runAfter": {
                    "For_each": [
                        "Succeeded"
                    ]
                },
                "type": "Table"
            },
            "Execute_a_SQL_query_(V2)": {
                "inputs": {
                    "body": {
                        "query": "select [column 1] from [dbo].[test]"
                    },
                    "host": {
                        "connection": {
                            "name": "@parameters('$connections')['sql_1']['connectionId']"
                        }
                    },
                    "method": "post",
                    "path": "/v2/datasets/@{encodeURIComponent(encodeURIComponent('default'))},@{encodeURIComponent(encodeURIComponent('default'))}/query/sql"
                },
                "runAfter": {},
                "type": "ApiConnection"
            },
            "For_each": {
                "actions": {
                    "Append_to_array_variable": {
                        "inputs": {
                            "name": "array",
                            "value": "@body('Parse_JSON')"
                        },
                        "runAfter": {},
                        "type": "AppendToArrayVariable"
                    }
                },
                "foreach": "@body('Parse_JSON')?['ResultSets']?['Table1']",
                "runAfter": {
                    "Initialize_variable": [
                        "Succeeded"
                    ]
                },
                "type": "Foreach"
            },
            "Initialize_variable": {
                "inputs": {
                    "variables": [
                        {
                            "name": "array",
                            "type": "array"
                        }
                    ]
                },
                "runAfter": {
                    "Parse_JSON": [
                        "Succeeded"
                    ]
                },
                "type": "InitializeVariable"
            },
            "Parse_JSON": {
                "inputs": {
                    "content": "@outputs('Compose')",
                    "schema": {
                        "properties": {
                            "OutputParameters": {
                                "properties": {},
                                "type": "object"
                            },
                            "ResultSets": {
                                "properties": {
                                    "Table1": {
                                        "items": {
                                            "properties": {
                                                "column 1": {
                                                    "type": "string"
                                                }
                                            },
                                            "required": [
                                                "column 1"
                                            ],
                                            "type": "object"
                                        },
                                        "type": "array"
                                    }
                                },
                                "type": "object"
                            }
                        },
                        "type": "object"
                    }
                },
                "runAfter": {
                    "Compose": [
                        "Succeeded"
                    ]
                },
                "type": "ParseJson"
            }
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {
            "$connections": {
                "defaultValue": {},
                "type": "Object"
            }
        },
        "triggers": {
            "Recurrence": {
                "recurrence": {
                    "frequency": "Minute",
                    "interval": 3
                },
                "type": "Recurrence"
            }
        }
    },
    "parameters": {
        "$connections": {
            "value": {
                "sql_1": {
                    "connectionId": "/subscriptions/<subscription-id>/resourceGroups/<resource gourp >/providers/Microsoft.Web/connections/sql-9",
                    "connectionName": "sql-9",
                    "id": "/subscriptions/<subscription-id>/providers/Microsoft.Web/locations/northcentralus/managedApis/sql"
                }
            }
        }
    }
}
 

Ссылка на статью «Вопросы и ответы»

Комментарии:

1. У меня возникли некоторые проблемы с настройкой этого — не могли бы вы уточнить, в каких операциях с данными определена замена (…)? Кроме того, когда я проверял это, попытка вывести его в CSV теперь терпит неудачу, говоря, что это строка, а не массив

2. @TheDemonLord — обновил ответ с помощью просмотра логического кода и дополнительных скриншотов.

3. Спасибо! Это должно дать мне все, что мне нужно