2016-04-19 4 views
3

Я создаю шаблон ARM, который развертывает веб-приложение (Mvc Api) и приложение Logic.Проблема конкатенации строк с приложениями Azure Logic

Я пытаюсь определить HTTP действий в рамках логики приложения таким образом, что он динамически сцепляет базу Uri АФИ, а также свойство текущего элемента с помощью splitOn и @triggerBody(). Базовая Uri сама конкатенирована из набора параметров в шаблоне ARM в переменную variables('hockeyAppAPISettings').Uri.

Вот соответствующий отрезала определения действия:

"actionName": { 
    "conditions": [ ], 
    "inputs": { 
    "authentication": { 
     "audience": "[variables('apiSettings').Authentication.Audience]", 
     "clientId": "[variables('apiSettings').Authentication.ClientId]", 
     "secret": "[variables('apiSettings').Authentication.Secret]", 
     "tenant": "[variables('apiSettings').Authentication.Tenant]", 
     "type": "ActiveDirectoryOAuth" 
    }, 
    "method": "patch", 
    "uri": "[concat(variables('apiSettings').Uri, '/@{triggerBody()['Id']}/ScanningInProgress')]" 
    //"uri": "[concat(variables('apiSettings').Uri, '//@{triggerBody()[/'Id/']}//ScanningInProgress')]" 
    //"uri": "[concat(variables('apiSettings').Uri, '//@@{triggerBody()[/'Id/']}//ScanningInProgress')]" 
    }, 
    "type": "Http" 
}, 

"uri" раздел, что я борюсь с. Я посыпал различными escape-символами (\ и @) в разных шаблонах.

я либо не может получить развертывание для достижения успеха ж/ошибки развертывания, как:.) Ури, «

Невозможно разобрать выражение язык шаблона 'CONCAT (переменные (' apiSettings // @ {triggerBody() [/ 'Id /']} // ScanningInProgress ')': ожидаемый токен «RightParenthesis» и фактический «Идентификатор». Пожалуйста, см. http://aka.ms/arm-template-expressions для использования подробнее .. '.

Или, если я запускаю развертывание, а затем рассмотрю код на портале после развертывания, конкатенация строк не работает должным образом. Переменная не преобразуется в ее значение.

Я подтвердил, что если я отредактирую Uri напрямую (через редактор HTML портала), используя это: "uri" : "https://edited.azurewebsites.net/api/Packages/@{triggerBody()['Id']}/ScanningInProgress", приложение Logic сделает вызов патча для каждого элемента, который поступает из триггера HTTP.

Что я делаю неправильно?

ответ

5

Вам нужно бежать внутренние одинарные кавычки, то есть попробовать

"uri": "[concat(variables('apiSettings').Uri, '/@{triggerBody()[''Id'']}/ScanningInProgress')]" 

В качестве альтернативы вы можете использовать точечную нотацию для ссылки на свойство, то есть

"uri": "[concat(variables('apiSettings').Uri, '/@{triggerBody().Id}/ScanningInProgress')]" 
+0

Спасибо @Szymon. Я пробовал что-то вроде второго варианта, который вы поделили, но прямо в кодовом представлении портала. Он не работал на портале, поэтому я больше не исследовал его в шаблонах ARM. Я просто выстрелил через ARM, и это сработало! Мне было интересно, что когда я осмотрел кодовое представление приложения Logic на портале после развертывания, он преобразовал свойство «uri» в объект с помощью @ {triggerBody() ['Id']}. Кажется, между ними есть несколько нюансов, что я не совсем готов к скорости. В любом случае, большое спасибо за вашу помощь! – Paul

+0

@Paul, рад слышать, что это сработало. Да, есть определенные выражения, которые дизайнер сейчас не очень хорошо обрабатывает, поэтому вам нужно быть осторожным с сохранением потока непосредственно из представления конструктора, если вы создали его вне конструктора (поскольку вы могли бы использовать выражения, которые дизайнер не работает хорошо). Мы работаем над любыми такими проблемами, поэтому со временем должна быть полная совместимость между представлением кода и представлением дизайнера. –