Unable to load a workflow in the New Logic App Experience
- Dominant language
- TypeScript
- Stars
- 111
- Forks
- 109
- Avg merge
- 1d 23h
- Merged PRs (30d)
- 20
Description
### Severity
P3 - Medium (Minor functionality affected)
### Describe the Bug with repro steps
Unable to Load a workflow in the New Logic App experience from the portal. Works ok in the normal designer, when i click "Try it Now" it hangs
### What type of Logic App Is this happening in?
Standard (Portal)
### Are you experiencing a regression?
_No response_
### Which operating system are you using?
Windows
### Did you refer to the TSG before filing this issue? https://aka.ms/lauxtsg
Yes
### Workflow JSON
```json
{
"definition": {
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
"contentVersion": "1.0.0.0",
"triggers": {
"manual": {
"type": "Request",
"description": "check_availability - Check live availability and pricing for a specific XXXX product. Returns timeslots, capacity, and dynamic pricing data. Required for timed and dated admission types before booking.",
"kind": "Http",
"inputs": {
"method": "POST",
"schema": {
"type": "object",
"properties": {
"productId": {
"type": "string",
"description": "The code of the XXXX product to check availability for. Must be a valid child product ID."
},
"attractionId": {
"type": "string",
"description": "Merlin Attraction ID identifying the venue (e.g. 'XXXX' for XXX XXXX XXXX)."
},
"startDate": {
"type": "string",
"description": "Start date for the availability search in YYYY-MM-DD format. Must not be a historical date."
},
"duration": {
"type": "integer",
"description": "Number of days to check availability for, starting from startDate. Must be 30 or fewer when dynamicPricingInd is true."
},
"dynamicPricingInd": {
"type": "boolean",
"description": "Whether to check availability using dynamic pricing. When true, returns per-timeslot pricing and may hold prices for 30 minutes. Default depends on the product nature."
},
"priceHoldInd": {
"type": "boolean",
"description": "Whether to hold dynamic prices for 30 minutes. If false, prices are returned for reference only and are not held. Default is true. Only relevant when dynamicPricingInd is true."
}
},
"required": [
"productId",
"attractionId",
"startDate",
"duration"
]
}
}
}
},
"actions": {
"Build_Query_String": {
"type": "Compose",
"description": "Build the query string for the XXXX Availability API. Always includes required params; appends dynamicPricingInd and priceHoldInd only if provided.",
"inputs": "@concat('attractionId=', triggerBody()?['attractionId'], '&startDate=', triggerBody()?['startDate'], '&duration=', string(triggerBody()?['duration']), if(not(equals(triggerBody()?['dynamicPricingInd'], null)), concat('&dynamicPricingInd=', string(triggerBody()?['dynamicPricingInd'])), ''), if(not(equals(triggerBody()?['priceHoldInd'], null)), concat('&priceHoldInd=', string(triggerBody()?['priceHoldInd'])), ''))",
"runAfter": {}
},
"Call_Merlin_Availability_API": {
"type": "Http",
"description": "Call the XXXX XXXX XXXX Availability API to retrieve live availability and pricing data.",
"inputs": {
"uri": "@{concat(parameters('apiBaseUrl'), '/products/', triggerBody()?['productId'], '/availability?', outputs('Build_Query_String'))}",
"method": "GET",
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
"client_id": "@parameters('clientId')",
"client_secret": "@parameters('clientSecret')",
"X-Correlation-Id": "@coalesce(triggerOutputs()?['headers']?['X-Correlation-Id'], guid())"
}
},
"runAfter": {
"Build_Query_String": [
"Succeeded"
]
}
},
"Check_Response_Status": {
"type": "If",
"description": "Check whether the XXXX API returned a successful 200 response.",
"expression": {
"and": [
{
"equals": [
"@int(outputs('Call_XXXX_Availability_API')['statusCode'])",
200
]
}
]
},
"actions": {
"Compose_Success_Response": {
"type": "Compose",
"description": "Normalize the XXXX availability response for agent consumption.",
"inputs": {
"status": "success",
"productId": "@body('Call_XXX_Availability_API')?['productId']",
"productName": "@body('Call_XXX_Availability_API')?['productName']",
"attractionId": "@body('Call_XXXX_Availability_API')?['attractionId']",
"productVariants": "@body('Call_XXXX_Availability_API')?['productVariants']",
"dynamicPricingHoldId": "@body('Call_XXXX_Availability_API')?['dynamicPricingHoldId']",
"event": "@body('Call_Merlin_Availability_API')?['event']"
}
},
"Return_Success": {
"type": "Response",
"kind": "Http",
"inputs": {
"statusCode": 200,
"headers": {
"Content-Type": "application/json"
},
"body": "@outputs('Compose_Success_Response')"
},
"runAfter": {
"Compose_Success_Response": [
"Succeeded"
]
}
}
},
"else": {
"actions": {
"Compose_Error_Response": {
"type": "Compose",
"description": "Build a normalized error response for the agent. Avoids leaking raw Merlin error internals.",
"inputs": {
"status": "error",
"statusCode": "@outputs('Call_XXX_Availability_API')['statusCode']",
"message": "@coalesce(body('Call_Merlin_Availability_API')?['message'], body('Call_XXX_Availability_API')?['error'], 'The XXX Availability API returned an error. Please verify the productId, attractionId, startDate, and duration are valid.')",
"productId": "@triggerBody()?['productId']",
"attractionId": "@triggerBody()?['attractionId']"
}
},
"Return_Error": {
"type": "Response",
"kind": "Http",
"inputs": {
"statusCode": "@outputs('Call_Merlin_Availability_API')['statusCode']",
"headers": {
"Content-Type": "application/json"
},
"body": "@outputs('Compose_Error_Response')"
},
"runAfter": {
"Compose_Error_Response": [
"Succeeded"
]
}
}
}
},
"runAfter": {
"Call_Merlin_Availability_API": [
"Succeeded",
"Failed"
]
}
}
},
"outputs": {},
"parameters": {
"apiBaseUrl": {
"type": "string",
"defaultValue": "xxxxxxx",
"metadata": {
"description": "Base URL for the Merlin Trade Partner API."
}
},
"clientId": {
"type": "string",
"metadata": {
"description": "Merlin API client_id credential. Must be stored in Azure Key Vault."
}
},
"clientSecret": {
"type": "string",
"metadata": {
"description": "Merlin API client_secret credential. Must be stored in Azure Key Vault."
}
}
}
},
"kind": "Stateful"
}
```
### Screenshots or Videos
_No response_
### Environment
Microsoft Edge
Version 147.0.3912.31
### Additional context
_No response_
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.