#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. Спасибо! Это должно дать мне все, что мне нужно