Skip to main content
Announcements
Introducing a new Enhanced File Management feature in Qlik Cloud! GET THE DETAILS!
cancel
Showing results for 
Search instead for 
Did you mean: 
jmceachern
Contributor
Contributor

[resolved] REST web service question (run if and main data flow)

I am creating a job that will create a RESTful web service:
tRESTRequest ----- business logic ----- tRESTResponse
This will be a POST operation with a Document.
As part of the business logic, I need to consume two other REST services - one of which will validate the information in the Document and the other which will post the information in the Document only IF the validate step passes.
So, my flow (with validation) will look something like:
tRESTRequest ---- tXMLMAP ----- tRESTClient (validate web service) ---- txmlMap (response) ---- tRESTResponse
Based on the information in the response from my validate web service, I may need to then consume a post web service.  My issue is that the original document is not the main data flow now.  The data flow is the response message from the validate web service.
How can I make a decision as to whether to proceed with consuming the post web service after the validate web service and have the document that came in through the original tRESTRequest?
I've used Run IF before but my understanding is that using this would disrupt the main flow?
Labels (4)
1 Solution

Accepted Solutions
Anonymous
Not applicable

Hi
You can cache the input request in memory for used later, and use runIf to trigger different business logic depends on the your validation result. for example:
tRESTRequest ---- main--tHashOutput--oncomponentok--tHashInput--main--tXMLMAP ----- tRESTClient (validate web service) ---- txmlMap (response) -main..tJavaRow --runIf1--tHashInput--main--tXMLMap---- tRESTResponse
                                                       --runIf2---tFixedFlowInput--main--tXMLMap--tRestResponse
tHashInput: read the original document from memory
on tJavaRow: parse the validation result, and put the result to a global variable for used as the condition of runIf link. eg:
if(input_row.columnName.equals("OK")){
globalMap.put("isValid",true);
}else{
globalMap.put("isValid", false);
}
set the condition of runIf1 as:
(Boolean)globalMap.get("isValid")
set the condition of runIf2 as:
!(Boolean)globalMap.get("isValid")

View solution in original post

2 Replies
Anonymous
Not applicable

Hi
You can cache the input request in memory for used later, and use runIf to trigger different business logic depends on the your validation result. for example:
tRESTRequest ---- main--tHashOutput--oncomponentok--tHashInput--main--tXMLMAP ----- tRESTClient (validate web service) ---- txmlMap (response) -main..tJavaRow --runIf1--tHashInput--main--tXMLMap---- tRESTResponse
                                                       --runIf2---tFixedFlowInput--main--tXMLMap--tRestResponse
tHashInput: read the original document from memory
on tJavaRow: parse the validation result, and put the result to a global variable for used as the condition of runIf link. eg:
if(input_row.columnName.equals("OK")){
globalMap.put("isValid",true);
}else{
globalMap.put("isValid", false);
}
set the condition of runIf1 as:
(Boolean)globalMap.get("isValid")
set the condition of runIf2 as:
!(Boolean)globalMap.get("isValid")
jmceachern
Contributor
Contributor
Author

Thanks so much, Shong.  I will definitely try this.
I was also playing with tReplicate yesterday and had some success with that.
Thanks again!