Проблемы с телом веб-крючка фабрики данных Azure

#azure-data-factory

#azure-data-factory

Вопрос:

Итак, у меня возникли некоторые проблемы с Azure Data Factory. У меня есть стандартный конвейер, в котором я пытаюсь реализовать webhook для последующих обратных вызовов, но тело сообщения webhook, похоже, не работает.

(Заранее: извините за URL-адреса изображений -> я недостаточно авторитетен, чтобы публиковать изображения)

Итак, вот что я ввел в «тело» службы Webhook: https://imagizer.imageshack.com/img922/3765/ApbiRN.jpg

Затем я проверяю, что шаблон выглядит правильно: https://imagizer.imageshack.com/img924/5448/vN82Vp.jpg

И, наконец, я отлаживаю конвейер только для того, чтобы найти это как вывод из веб-узла: https://imagizer.imageshack.com/img923/3697/AEDzOT.jpg

Как вы можете видеть, он откуда-то берет {«Ключ»:»Значение»}. Теперь я сохранил конвейер; Я опубликовал конвейер; я перезапустил ADF .. Все еще.

Итак, первая проблема заключается в том, что я не могу отправить тело, которое я хочу. Вторая проблема заключается в том, что я хотел бы параметризовать тело (когда это будет устранено):

 {
  "key1":"@{pipeline().parameters.param1}",
  "key2":"@{pipeline().parameters.param2}",
  "key3":"@{pipeline().parameters.param3}"
}
  

Я тоже не смог решить этот последний, так что, если какие-нибудь добрые души будут так добры.. премного благодарен!

Редактировать: кроме того, я не смог обнаружить «callBackUri», который обещает документация: https://learn.microsoft.com/en-us/azure/data-factory/control-flow-webhook-activity

Есть какие-либо идеи по этой проблеме?

Ответ №1:

Я пробовал много раз и, наконец, добился успеха.
В вашем случае вы можете использовать выражение следующим образом:

 @json(concat(concat('{"key1":"',pipeline().parameters.param1,'",'),concat('"key2":"',pipeline().parameters.param2,'",'),concat('"key3":"',pipeline().parameters.param3,'"}')))
  

Результат выглядит следующим образом:

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

  1. Во-первых, нам нужно объединить строку запроса.
  2. Затем нам нужно использовать @json() для преобразования строкового типа в тип json.

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

1. Спасибо, Джозеф. На следующее утро конвейер снова работал (принимая мои входные данные). Когда дело дошло до переменных, я обнаружил, что поведение WebHook по сравнению с Web отличается. На самом деле я отправляю вложенный dict (и список), т.е. {«var»:»test», «dict»: {«key1″:»val1»}, «список»:[«1″,»2»]} и слияние переменных list и dict в webhook бросилоошибки (например, @{pipeline().parameters.param1}), если в веб-крючке не указано «». В итоге вся строка была задана как переменная с помощью «Set Variable», а затем @json() — ввод переменной в сообщение Webhook.