I have one web api which is using a!startProcess to call the process async. As it is async and does not wait for process model to complete it is not updating the process variables in the response.
What are the possible fixes we can do?
Discussion posts and replies are publicly visible
Hi agam and Stewart Burchell I have activity chaining but we have loop there. I will explain the scenario in detail, consider we are creating 5 different cases in appian application sent from the external system. There is one process variable of type array which has 5 cases to create and for each one a loop will run inside the process we called from the API. In the response I need all the 5 case ids to be returned but it is returning 2 of them as nulls.
It would not have returned any of the case ids if activity chaining was not there.I suppose it is happening because process runs async and as we have loop the process variable is updated but before the 4th 5th iteration completes it returned the response.
"cases" : [ {"caseId" : 375,"status" : "CREATED"}, {"caseId" : 376,"status" : "CREATED"}, {"caseId" : 377,"status" : "CREATED"}, {"caseId" : null,"status" : "CREATED"}, {"caseId" : null,"status" : "CREATED"}, {"caseId" : null,"status" : "CREATED"} ]
What is your loop doing? Could you create 5 CaseIds in an Expression Rule (called from a single Script Task node)?
No for each case we need to start a sync sub process which in turn creates the case and creates the history of the case and then returns the case id back to the parent process model.
But can you not generate the CaseIds up front, and then pass one each to each of the instances of the sub-process which would then create the Case with that CaseId? That is front-load the generation of the CaseIds...
You mean I check the last case id created in database and then based on the number of cases I have in API request to create I assign those case ids by incrementing the last case id and then call the sub process for each of the case assuming it will also create the same case ids as auto generated values from the db?
Kind of. Separate the generation of the CaseIds from the creation of the Cases themselves. I presume you're generating some human friendly readable CaseId. Create the number that you need (you could use a Stored Procedure to do this to ensure that any concurrent API requests don't overlap), return them to the Process and hand them out to the sub process instances as required to use.