Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

String concatenation issue with Azure Logic Apps

I'm creating an ARM template that deploys an Web App (an Mvc Api) and a Logic App.

I'm attempting to define an HTTP Action within the Logic App such that it dynamically concatenates the base Uri of the Api as well as a property of the current item using splitOn and @triggerBody(). The base Uri itself is concatenated from a set of parameters in the ARM template into a variable variables('hockeyAppAPISettings').Uri.

Here's the relevant snipped of the action definition:

"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"
},

The "uri" section is what i'm struggling with. I've sprinkled various escape characters (\ and @) in differing patterns through out this.

I either can't get the deployment to succeed w/deployment errors like:

Unable to parse template language expression 'concat(variables('apiSettings').Uri, '//@{triggerBody()[/'Id/']}//ScanningInProgress')': expected token 'RightParenthesis' and actual 'Identifier'. Please see http://aka.ms/arm-template-expressions for usage details..'.

Or if I get the deployment working and then look at the code in the portal after deployment, the string concatenation doesn't seem to work properly. The variable doesn't get converted to its value.

I have validated that if I edit the Uri directly (via the portal HTML editor) using this: "uri" : "https://edited.azurewebsites.net/api/Packages/@{triggerBody()['Id']}/ScanningInProgress" the Logic App will make a patch call for each item that comes from the HTTP trigger.

What am I doing wrong?

like image 869
Paul Avatar asked Apr 19 '16 21:04

Paul


1 Answers

You need to escape the inner single quotes, i.e. try

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

Alternatively you can use the dot notation to reference the property, i.e.

"uri": "[concat(variables('apiSettings').Uri, '/@{triggerBody().Id}/ScanningInProgress')]"
like image 149
Szymon Wylezol Avatar answered Jan 12 '23 19:01

Szymon Wylezol