Hello,
I try this solution to retrieve processInstance varaibles but I got a NullPointerException.
Before I tried this solution : https://community.jboss.org/message/798123 without success.
Eric how can you do to have a not null processInstance please?
Here my code :
/**
* This method allow to access object store in
* process instance variables
* @return an object link to the processInstance
*/
public Object getProcessVariable(Long processInstanceId, Long taskId, String key){
final Long piId = processInstanceId;
Object retObj = null;
WorkflowProcessInstance wpi = (WorkflowProcessInstance)kSession.getProcessInstance(processInstanceId);
if((wpi == null) || (wpi.getVariable(key) == null)){
//method1 : retrieve content map variables
Task task = getTaskService().getTask(taskId);
TaskData tData = task.getTaskData();
Long docContentId = tData.getDocumentContentId();
System.out.println("process instance is null, doc contentId = "+docContentId);
Content content = getTaskService().getContent(docContentId);
Map<?, ?> variables = ((Map<?, ?>) ContentMarshallerHelper.unmarshall(content.getContent(), null));
//display keys
System.out.println("content map keys :");
for(Object o : variables.keySet()){
System.out.println(o.toString());
}
System.out.println("and key search is "+key);
/*
content map keys :
ActorId
Skippable
TaskName
GroupId
key search is formId
*/
retObj = variables.get(key);
//method 2 : retrieve the the variable Scope
Map<String, Object> variables2 = kSession.execute(new GenericCommand<Map<String, Object>>(){
@Override
public Map<String, Object> execute(Context context) {
StatefulKnowledgeSession ksession = ((KnowledgeCommandContext) context).getStatefulKnowledgesession();
ProcessInstanceImpl processInstance = (ProcessInstanceImpl) ksession.getProcessInstance(piId);
VariableScopeInstance variableScope = (VariableScopeInstance) processInstance.getContextInstance(VariableScope.VARIABLE_SCOPE); // ==> NullPointerException
Map<String, Object> variables = variableScope.getVariables();
return variables;
}
});
//display keys
System.out.println("variables keys :");
for(Object o : variables2.keySet()){
System.out.println(o.toString());
}
System.out.println("key search is "+key);
retObj = variables2.get(key);
}else{
retObj = wpi.getVariable(key);
}
return retObj;
}
Thanks and Best Regards.