So we are developing integration solutions using Biztalk 2016 and recently we started working with Oracle's Integration Cloud iPaaS service. We have found it quite painful and limiting and until this week have been singing the praises of Biztalk, saying that it's just far easier to work with and more functionally rich. Well...
This week I had what seemed a simple task. Take an OAGIS BODFailureMessage (OAGIS is awesome) and send the details to Service Desk Plus, then put the resultant Request ID back into the original message and send it onwards. Seemed pretty straightforward.
Problem #1
Service Desk Plus has an API that enables us to POST a Request BUT the API does not accept a message-body; it wants you to send the details of the request (which is a JSON payload) as a parameter called input_data.
Now from Postman, this is quite easy. Simply add a key-value pair in the Body using the x-www-form-urlencoded option like so:
However, when it comes to doing the same thing in Biztalk you are faced with the tricky issue of trying to take the contents of a message and somehow turning that into a variable:
The obvious thought is to promote a property in the schema of the OAGIS message, but you need to construct a whole JSON message to pass as a parameter. "Not a problem" you say. Simply generate an XSD from an example JSON payload (there's a Biztalk wizard for that) and add a map to turn the OAGIS message into the JSON payload.
Sure, that works but then how do you get the whole JSON message into a parameter? A promoted property might work if you generate a schema just for the parameter and promote the single parameter node, then use an orchestration to construct the parameter message. Well, that would work until the JSON payload exceeded 255 characters.
I was about to give up and declare bith Biztalk and Service Desk Plus stupid. Then I found this article which saved my bacon. Context properties don't have the 255 character limit! You simply add the Context property schema to your Biztalk project, with a single node in it and then in the orchestration, use an expression to set the property. Yeah Baby!
Problem #2 to follow...