Reputation: 51
I have an Azure Logic App that receives outbound messages from Salesforce. I want to limit concurrency on these requests, so I set the concurrency control limit on the http trigger of my logic app:
"triggers": {
"manual": {
"inputs": {
"schema": {}
},
"kind": "Http",
"runtimeConfiguration": {
"concurrency": {
"runs": 1
}
},
"type": "Request"
}
}
Which requires me to make my Salesforce Acknowledgement action asynchronous:
"Acknowledge_SalesForce_Success": {
"inputs": {
"body": "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n <soap:Body>\n <notificationsResponse xmlns:ns2=\"urn:sobject.enterprise.soap.sforce.com\" xmlns=\"http://soap.sforce.com/2005/09/outbound\">\n <Ack>true</Ack>\n </notificationsResponse>\n </soap:Body>\n</soap:Envelope>",
"statusCode": 200
},
"kind": "Http",
"operationOptions": "Asynchronous",
"runAfter": {},
"type": "Response"
}
The problem is that now every time Salesforce sends an outbound message they immediately get the built-in 202 response from the Logic App with json details around the action being queued, rather than my acknowledgement action above, which Salesforce cannot read and fails. This results in Salesforce constantly retrying.
Is there a way I can ovverride the automatic 202 response Microsoft has configured this to send and send my own custom SOAP acknowledgement?
Upvotes: 0
Views: 172
Reputation: 11292
Nope, you have no control over that given it's managed by the LogicApps framework itself.
Your best bet is to set the concurrency back to something a lot higher, accept the incoming message and throw it on a queue (service bus or storage) and then process it that way.
This will allow you to customise the reply to Salesforce as well as control the flow of messages to another downstream LogicApp (using a queue trigger) that performs the necessary processing.
Upvotes: 0