- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
09-01-23 12:20 PM
Hi. Im having big problems getting a Web API to take data from af collection and sending a message.
My Template is like this.
{
"MessageBody": {
"LegalEntityId": "[LegalEntityID]",
"SourceSystem": "[SourceSystem]",
"JournalLines": [
{
"SourceSystemId": "[JournalLines_new.SourceSystemId]",
"Date": "[JournalLines_new.Date]",
"ProjectId": "[JournalLines_new.ProjectId]",
"EmplId": "[JournalLines_new.EmplId]",
"ICWarehouse": "[JournalLines_new.ICWarehouse]",
"ICLocation": "[JournalLines_new.ICLocation]",
"Qty": [JournalLines_new.Qty],
"ItemId": "[JournalLines_new.ItemId]",
"WorkorderId": "[JournalLines_new.WorkorderId]"
}
]
}
}
In the object i have two dataitems called "LegalEntityID", and "SourceSystem", and a Collection called "JournalLines_new"
It takes the LegalEntityID, and SourceSystem correctly, but the collection beings passed to the object that handles the API call is being ignored.
I have tried the Utility - JSON to convert the collection to a JSON string and skipping the internal collection completely, but the message being sent is always blank apart from LegalEntityID and Source system.
This is a grab of the RequestData output.
Content-Length: 362
Expect: 100-continue
Connection: Keep-Alive
{
"MessageBody": {
"LegalEntityId": "Test",
"SourceSystem": "RPA",
"JournalLines": [
{
"SourceSystemId": "",
"Date": "",
"ProjectId": "",
"EmplId": "",
"ICWarehouse": "",
"ICLocation": "",
"Qty": ,
"ItemId": "",
"WorkorderId": ""
}
]
}
}
Answered! Go to Answer.
Helpful Answers
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
11-01-23 07:52 AM
Hi Everybody.
I think i have fixed it 😄
Now at least the RequestData output fills in my data.
The fix was to send the Collection to the Object, use a MultiCalc step, to split it into single dataitems, and then pass those to the call.
Right now i am waiting for someone on the other end to veryfy that something has been recieved.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
10-01-23 01:00 AM
If all else fails, you can switch from a Template to Custom Code for the body and simply write some C# or VB.NET to build the JSON body you're looking for.
Cheers,
Eric
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
10-01-23 10:55 AM
I believe the collection name should exactly match the name of the collection from the template. In your case you have the collection name as JournalLines_new but it should be set as JournalLines. I dont think the collection field names need to be specified in the template as long as the collection you have defined as an input has the same name fields.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
10-01-23 11:07 AM
Thanks for the suggestion.
So it should look like this instead if i understand you correctly?
{
"MessageBody": {
"LegalEntityId": "[LegalEntityID]",
"SourceSystem": "[SourceSystem]",
"JournalLines": "[JournalLines]"
}
}
Unfortunatly when i do that i get "ERROR: Internal : Unexpected error Error during Web API HTTP Request."
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
10-01-23 11:17 AM
Actually I think it should look more like the below. Your parameters would be set as LegalEntityID, SourceSystem and JournalLines. This is how I've built an api template Im currently working on but mine is using SOAP XML but I'm assuming the same should work for yours.
{
"MessageBody": {
"LegalEntityId": "[LegalEntityId]",
"SourceSystem": "[SourceSystem]",
"JournalLines":
{
"SourceSystemId": "",
"Date": "",
"ProjectId": "",
"EmplId": "",
"ICWarehouse": "",
"ICLocation": "",
"Qty": ,
"ItemId": "",
"WorkorderId": ""
}
}
}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
10-01-23 12:43 PM
Hi again @Michael ONeil
Thanks for the suggestion,
When i try that, i get this as the RequestData
Content-Length: 351
Expect: 100-continue
Connection: Keep-Alive
{
"MessageBody": {
"LegalEntityId": "Test",
"SourceSystem": "RPA",
"JournalLines":
{
"SourceSystemId": "",
"Date": "",
"ProjectId": "",
"EmplId": "",
"ICWarehouse": "",
"ICLocation": "",
"Qty": ,
"ItemId": "",
"WorkorderId": ""
}
}
}
So unfortunatly still not success, even though i have made sure the names in the collection are identical to the ones in the template.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
10-01-23 02:08 PM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
10-01-23 02:31 PM
Here's an example of what I was referring to about using a Custom Code option instead of Template.
In this example, I'm building the request body by using a .NET StringBuilder object. This is C#, but you could do the same thing with VB.NET with a few minor format changes. You will need to include a reference to the System.Text namespace under the Common Code -> Code Options section as pictured below.
Here's the code shown above:
StringBuilder payload = new StringBuilder();
payload.Append("{");
payload.Append("\"MessageBody\": {");
payload.Append("\"LegalEntityId\": \"" + LegalEntityID + "\",");
payload.Append("\"SourceSystem\": \"" + SourceSystem + "\",");
payload.Append("\"JournalLines\": [");
foreach (DataRow journalLine in JournalLines.Rows)
{
payload.Append("{");
payload.Append("\"SourceSystemId\": \"" + journalLine["SourceSystemId"].ToString() + "\",");
payload.Append("\"Date\": \"" + journalLine["Date"].ToString() + "\",");
payload.Append("\"ProjectId\": \"" + journalLine["ProjectId"].ToString() + "\",");
payload.Append("\"EmplId\": \"" + journalLine["EmplId"].ToString() + "\",");
payload.Append("\"ICWarehouse\": \"" + journalLine["ICWarehouse"].ToString() + "\",");
payload.Append("\"ICLocation\": \"" + journalLine["ICLocation"].ToString() + "\",");
payload.Append("\"Qty\": " + journalLine["Qty"].ToString() + ",");
payload.Append("\"ItemId\": \"" + journalLine["ItemId"].ToString() + "\",");
payload.Append("\"WorkorderId\": \"" + journalLine["WorkorderId"].ToString() + "\",");
payload.Append("},");
}
payload.Append("]");
payload.Append("}");
payload.Append("}");
Request_Content = payload.ToString();
Another option, code based, would be to create an actual object definition in the global code for the MessageBody object. Then you could just use Newtonsoft and object serialization to automatically generate the JSON body based on it's properties.
Cheers,
Eric
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
10-01-23 02:46 PM
when I was playing with REST API call as an early adopter I got following structure which worked. I hope it helps you. I checked the documentation here https://bpdocs.blueprism.com/bp-7-1/en-us/api-spec-7-1-0.html#tag/Work-Queues/paths/~1api~1v7~1workqueues~1{workQueueId}~1items~1batch/post and it seems still valid. I think that the whole message needs to be enclosed in square brackets.
Regards
Zdenek
[
{
"data": {
"rows": [
{
"ItemKey": {
"valueType": "text",
"value": "001"
} ,
"name": {
"valueType": "text",
"value": "zdenek"
},
"surname": {
"valueType": "text",
"value": "kabatek"
}
}
]
},
"deferredDate": "2021-04-11T19:00:00Z",
"priority": 0,
"tags": [
"This is testing REST API"
],
"status": "Ready for processing"
}
]
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content
11-01-23 07:14 AM
