-
1. Re: Setting process variable in script task using BPM standard method
tsurdilovic Nov 6, 2012 9:03 AM (in response to new-comer)That is typically the responsibility of the runtime as you are changing the state of the process instance data and not its definition.
-
2. Re: Setting process variable in script task using BPM standard method
swiderski.maciej Nov 7, 2012 5:56 AM (in response to new-comer)jBPM nodes can define dataoutput that then are used to set process variables, for instance human task can have defined dataoutput and its assignments to achieve what you described. Don't think script task supports that and looking at your case not sure you should use it to set variable like this. Variables are set/changed based on some steps in the process or external interaction. So better is to look at what can change a variable and define it via dataoutputs.
HTH
-
3. Re: Setting process variable in script task using BPM standard method
new-comer Nov 7, 2012 11:12 AM (in response to swiderski.maciej)Thanks for replying.
In my case, I have a few paralleled human tasks to do review job, let's say I have 3 review tasks, and the end result will be based on the 3 reviewers' feedback, for each reviewer's feedback, I use dataoutput mapping set back to one process variable, and when all 3 review task is finished, I need to base on the 3 feedbacks to decide if the job is passed review or not, the reason is that we have a percentage, let's say 60% or higher, we think the review is OK, in this case, there will be 2 or 3 review tasks give OK. and this does not need any human involvment, only a calculation based on the result of the 3 review tasks. Based on the pass percentage, the work will be passed to next step or rejected to the work submitter.
Hope it explains what I need to do.
If script task should not be used for this scenario, do you have a better suggestion how to do it?
Thanks.
-
4. Re: Setting process variable in script task using BPM standard method
swiderski.maciej Nov 7, 2012 12:08 PM (in response to new-comer)yes, this what I was assuming is your use case. So I would suggest to use a domain specific service that will be responsible for calculated based on data inputs and then use dataoutputs to set the result of calculation as process variable
HTH
-
5. Re: Setting process variable in script task using BPM standard method
frenky1983 Apr 27, 2015 10:34 AM (in response to swiderski.maciej)Excuse me Maciej,
what do you want to say with domain specific service?
i would set a process variable to a constant value.
the idea is:
start -> set process variable to a constant -> human task (now the process is bolocked waiting the human event; before giving the input i would get the variable value from java code) -> end
I tried with script task without success and then with a business rule task with an empty drl file (i setted only the input and output assigment, to set a constant value i use input assigment equal to "myString" then with output mapping i defined an output with the same name of input and mapped that to my process variable).
This two way don't work for me, infact java side when i recover the processVariables i obtain a map correctly but there aren't any values associated to the key.
from java code i wrote:
...
ProcessInstance processInstance = processService.getProcessInstance(Long.parseLong(instanceId));
log.info("The process considered has id : " + processInstance.getProcessId());
ProcessDefinition process = runtimeDataService.getProcessById(processInstance.getProcessId());
log.info("Recovering process variables");
String value = process.getProcessVariables().get("variableName");
log.info("Process variables recovered: " + value); // INFO [it.marche.siform2.service.BaseBeanService] (default task-18) Process variables recovered: String
...
-
6. Re: Setting process variable in script task using BPM standard method
frenky1983 Apr 28, 2015 6:26 AM (in response to new-comer)1 of 1 people found this helpfulProbably i solved my problem,
this is my process that has a variable named inputValues
in script Task Set variables:
kcontext.setVariable("inputValues","approva|rigetta");
the branch of the exclusive gateway
approvato branch = return KieFunctions.equalsTo(esito, "approva");
rigettato branch = return KieFunctions.equalsTo(esito, "rigetta");
in java code
ProcessInstance processInstance = processService.getProcessInstance(Long.parseLong(instanceId));
log.info("The process considered has id : " + processInstance.getProcessId());
log.info("Recovering process variables for the process");
String value = (String) processService.getProcessInstanceVariable(Long.parseLong(instanceId), INPUT_VALUES); //INPUT_VALUES is a constant equal to inputValues
log.info("######## variable value = " + value.toString()); //approva|rigetta
now i can split the value and obtain the command that my process would receive. In this manner i can create generic businessProcess and is the process to tell me which command pass. When i complete the humanTask i pass the command (approva or rigetta) as paramMap and humanTask onexit pass the paramater then gateway decide about that param
What do you think about this solution?