Очень короткая версия
Как включить переменную ADF в запрос POST JSON, в веб-активность в ADF? Я чувствую, что это должна быть очень простая конкатенация строк, но я не могу заставить ее работать
Detail
У нас есть требование для запуска запроса / SPro c из ADF, который вернет строку, содержащую сообщение об ошибке. Затем эта строка должна быть передана через веб-активность в ADF в приложение Logi c, чтобы отключить электронное письмо с ошибкой.
Настройка приложения logi c скопирована отсюда:
https://www.mssqltips.com/sqlservertip/5718/azure-data-factory-pipeline-email-notification--part-1/
, а затем здесь (часть 2)
https://www.mssqltips.com/sqlservertip/5962/send-notifications-from-an-azure-data-factory-pipeline--part-2/
В ADF я использовал действие Lookup , чтобы выполнить запрос, который возвращает ошибку (кажется, работает, предварительный просмотр возвращает правильную строку) Затем я использую Set Variable активность, чтобы получить вывод поиска и сохранить его в переменной.
Последний шаг - отключить POST, используя Web Activity.
С этим код (слегка подправленный, чтобы удалить личные данные) в моей веб-активности, все работает нормально, и я получаю электронное письмо
{
"DataFactoryName": "@{pipeline().DataFactory}",
"PipelineName": "@{pipeline().Pipeline}",
"Subject": "Pipeline finished!",
"ErrorMessage": "Everything is okey-dokey!",
"EmailTo": "me@myEmail.com"
}
Но любая попытка поместить содержимое переменной в субъектную часть не удалась.
Это (например) отправляет мне электронное письмо с темой буквально @ variable ('Emai lSubject ')
{
"DataFactoryName": "@{pipeline().DataFactory}",
"PipelineName": "@{pipeline().Pipeline}",
"Subject": "@variables('EmailSubject')",
"ErrorMessage": "Everything is okey-dokey!",
"EmailTo": "me@myEmail.com"
}
Но я также пробовал различные другие решения, которые приводят к ошибкам или к теме письма, в которой содержится только буквальная вещь, которую я там вставил (например, + @variables (' EmailSubject ') +).
Я также попытался сохранить всю переменную JSON в переменной, а затем в веб-операции использовал только переменную, которая не возвращала ошибок, но также не отправляла электронное письмо.
Это попытка:
{
"DataFactoryName": "@{pipeline().DataFactory}",
"PipelineName": "@{pipeline().Pipeline}",
"Subject": "@{variables('EmailSubject')}",
"ErrorMessage": "Everything is okey-dokey!",
"EmailTo": "me@myEmail.com"
}
В результате этого ввода в веб-активности - которая фактически включает в себя текст ошибки, который является бонусом ... (текст = Предупреждение о продолжительности работы):
{
"url": "https://azureLogicAppsSiteHere",
"method": "POST",
"headers": {
"Content-Type": "application/json"
},
"body": "{\n \"DataFactoryName\": \"DFNAMEHERE\",\n \"PipelineName\": \"pipeline1\",\n \"Subject\": \"{\"firstRow\":{\"\":\"Job Duration Warning\"},\"effectiveIntegrationRuntime\":\"DefaultIntegrationRuntime (West Europe)\",\"billingReference\":{\"activityType\":\"PipelineActivity\",\"billableDuration\":[{\"meterType\":\"AzureIR\",\"duration\":0.016666666666666666,\"unit\":\"DIUHours\"}]},\"durationInQueue\":{\"integrationRuntimeQueue\":0}}\",\n \"ErrorMessage\": \"Everything is okey-dokey!\",\n \"EmailTo\": \"me@myEmail.com\"\n}\t"
}
Но затем возникла эта ошибка:
{
"errorCode": "2108",
"message": "{\"error\":{\"code\":\"InvalidRequestContent\",\"message\":\"The request content is not valid and could not be deserialized: 'After parsing a value an unexpected character was encountered: f. Path 'Subject', line 4, position 17.'.\"}}",
"failureType": "UserError",
"target": "Web1",
"details": []
}
[Редактировать] ПРЕДПРОСМОТР из операции поиска - это текст: Предупреждение о продолжительности работы НО, когда я отладить конвейер, он позволяет мне увидеть фактический вывод, который выглядит следующим образом:
{
"count": 1,
"value": [
{
"": "Job Duration Warning"
}
],
"effectiveIntegrationRuntime": "DefaultIntegrationRuntime (West Europe)",
"billingReference": {
"activityType": "PipelineActivity",
"billableDuration": [
{
"meterType": "AzureIR",
"duration": 0.016666666666666666,
"unit": "DIUHours"
}
]
},
"durationInQueue": {
"integrationRuntimeQueue": 0
}
}
Так что, похоже, проблема в том, что вывод «Вывод» не тот, о котором я думал, поэтому переменная может не может использоваться в веб-активности, так как она содержит неподдерживаемые символы или что-то в этом духе.
Я только что проверил это, и все заработало:
- Создайте строковый параметр со значением Предупреждение о продолжительности работы
- Установите значение переменной равным @ pipeline (). Parameters.ParamSubject
- Включите переменную в веб-активность с @ перед ней
Затем я получаю ожидаемое письмо с нужной темой. Я просто не знаю, как получить строковый вывод моего запроса в переменную / параметр, чтобы я мог использовать его в веб-активности.