jbpm的tasknode可谓功能强大,在实际中应该是用得最多的节点了,当程序运行到tasknode,会自动生成我们配置的taskinstance,不同的actionid找到自己的taskinstance就可以按单操作了,很是方便。
还有一种task很高调的出现在jbpm的websale例子中,就是startstate下配置task,起初我也是认为它和在tasknode下的task一样,会自动生成taskinstance,但是我错了。
如下是websale中的配置:
<
start-state
name
="create new web sale order"
>
< task swimlane ="salesman" >
< controller >
< variable name ="item" />
< variable name ="quantity" />
< variable name ="address" />
</ controller >
</ task >
< transition to ="evaluate web order" />
</ start-state >
< task swimlane ="salesman" >
< controller >
< variable name ="item" />
< variable name ="quantity" />
< variable name ="address" />
</ controller >
</ task >
< transition to ="evaluate web order" />
</ start-state >
我在程序中做了如下实验:
TaskInstance bankertaskInstance
=
(TaskInstance)context.getTaskMgmtSession().findTaskInstances(
"
ernie
"
).get(
0
);
// List中根本就没有值,因为jbpm_taskInstance表中没有这条数据。于是我决定自己创建taskInstance,虽然这不 是我的本意,这些应该是jbpm自动完成的呀
Task startTasks = context.getGraphSession().findLatestProcessDefinition( " jeffentask " ).getTaskMgmtDefinition().getStartTask();
TaskInstance taskInstance = new TaskInstance(startTasks.getName());
taskInstance.create();
// context.save(taskInstance); // 我以为需要自己进行持久化,结果空指针异常,taskInstance为null
taskInstance.start();
taskInstance.end(); // 仍然没有保存到jbpm_taskinstance表
token.signal(); // taskInstance.end没有像tasknode中的task代替token.signal()
// List中根本就没有值,因为jbpm_taskInstance表中没有这条数据。于是我决定自己创建taskInstance,虽然这不 是我的本意,这些应该是jbpm自动完成的呀
Task startTasks = context.getGraphSession().findLatestProcessDefinition( " jeffentask " ).getTaskMgmtDefinition().getStartTask();
TaskInstance taskInstance = new TaskInstance(startTasks.getName());
taskInstance.create();
// context.save(taskInstance); // 我以为需要自己进行持久化,结果空指针异常,taskInstance为null
taskInstance.start();
taskInstance.end(); // 仍然没有保存到jbpm_taskinstance表
token.signal(); // taskInstance.end没有像tasknode中的task代替token.signal()
难道startstate中的task的作用只是设置流程变量供后续流程使用,仅此而已那jbpm就太无聊了。不解。