Problem in invoking assignment handler using taskinstance.en
prabuddha Feb 25, 2006 5:58 AMThe method taskInstance.end() says it will end a task and might invoke the handler . what does that mean?
Currently its not invoking the handler.
Below is the code I'm using to assgn a task AssignTask.java
The Handler class is ApproveAccount.java.
The taskcontroller params are not accesible due the reason the signal is being done before assigning.
So what is wrong here ? Please explain
public class AssignTask {
ProcessInstance processInstance = null;
ContextInstance contextInstance = null;
TaskMgmtInstance taskMgmtInstance = null;
protected JbpmSession jbpmSession = null;
protected GraphSession graphSession = null;
protected TaskMgmtSession taskMgmtSession = null;
protected ContextSession contextSession = null;
static JbpmSessionFactory jbpmSessionFactory = JbpmSessionFactory
.buildJbpmSessionFactory();
static { jbpmSessionFactory.getJbpmSchema().createSchema(); }
public AssignTask() {
}
public void buildProcessDefinition(String actor) {
ProcessDefinition processDefinition = ProcessDefinition
.parseXmlString("<process-definition name='AccountApproval'>"
+ " <start-state>"
+ " <transition name='submit' to='Approval' />"
+ " </start-state>"
+ " <controller>"
+ " <variable name='NAME'/>"
+ " <variable name='ADDRESS'/>"
+ " </controller>"
+ " <task-node name='Approval'>"
+ " <task name='Approve'>"
+ " <controller>"
+ " <variable name='NAME'/>"
+ " <variable name='ADDRESS'/>"
+ " <variable name='COMMENT'/>"
+ " </controller>"
+ " <assignment class='org.jbpm.tutorial.param.ApproveAccount' >"
+ " <assignee>" + actor + "</assignee> "
+ "</assignment>"
+ " </task>" + "<transition to='NewAccount' />"
+ " </task-node>" + " <end-state name='NewAccount' />"
+ "</process-definition>");
JbpmSession jbpmSession = jbpmSessionFactory.openJbpmSession();
jbpmSession.beginTransaction();
graphSession = jbpmSession.getGraphSession();
jbpmSession.getGraphSession().saveProcessDefinition(processDefinition);
processInstance = new ProcessInstance(processDefinition);
graphSession.saveProcessInstance(processInstance);
processDefinition = graphSession
.loadProcessDefinition(processDefinition.getId());
processInstance = graphSession.loadProcessInstance(processInstance
.getId());
contextInstance = processInstance.getContextInstance();
jbpmSession.commitTransaction();
jbpmSession.close();
}
public void submitsApprovalTask(String actor) {
buildProcessDefinition(actor);
JbpmSession jbpmSession = jbpmSessionFactory.openJbpmSession();
jbpmSession.beginTransaction();
ProcessDefinition processDefinition = jbpmSession.getGraphSession()
.findLatestProcessDefinition("AccountApproval");
ProcessInstance processInstance = new ProcessInstance(processDefinition);
Token token = processInstance.getRootToken();
token.signal();
TaskInstance taskInstance = (TaskInstance) processInstance
.getTaskMgmtInstance().getTaskInstances().iterator().next();
Map parameters = new HashMap();
parameters.put("NAME", "JBPM");
parameters.put("ADDRESS", "32,CTS");
parameters.put("COMMENT", "One Billion Dollar Company");
taskInstance.submitParameters(parameters);
\\ testing the taskcontroller parameters submitted
contextInstance = processInstance.getContextInstance();
System.out.println(contextInstance.getVariable("NAME"));
System.out.println(contextInstance.getVariable("ADDRESS"));
System.out.println(contextInstance.getVariable("COMMENT"));
jbpmSession.getGraphSession().saveProcessInstance(processInstance);
jbpmSession.commitTransaction();
jbpmSession.close();
}
}assigment handler
public class ApproveAccount implements AssignmentHandler {
private static final long serialVersionUID = 1L;
String assignee;
public void assign(Assignable assignable, ExecutionContext executionContext) {
assignable.setActorId("CAG");
ContextInstance contextInstance = executionContext.getContextInstance();
TaskInstance taskInstance=executionContext.getTaskInstance();
List taskFormParameters = taskInstance.getTaskFormParameters();
\\ this is giving me the label names correctly but the values submitted are showing null.
Iterator iter = taskFormParameters.iterator();
while (iter.hasNext()) {
TaskFormParameter tfp = (TaskFormParameter) iter.next();
String label = tfp.getLabel();
System.out.print(label);
System.out.println(contextInstance.getVariable(label)); \\\ displays null
}
}
}