jbpm3.1 websale实例学习(二)执行任务
来源:互联网 发布:君王之路盾牌进阶数据 编辑:程序博客网 时间:2024/05/28 09:34
一、获取任务列表
参与者的任务列表在界面上是home.jsp负责呈现。home.jsp设置一个jsf的datatable来获取并呈现任务列表,如下:
<h:dataTable value="#{homeBean.taskInstances}" var="taskInstance" headerClass="tableheader" columnClasses="tablecell">
<h:column >
<f:facet name="header">
<h:outputText value="Task Form Link" />
</f:facet>
<h:commandLink action="#{homeBean.selectTaskInstance}">
<f:param name="taskInstanceId" value="#{taskInstance.id}"/>
<h:outputText value="#{taskInstance.name}" />
</h:commandLink>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Process" />
</f:facet>
<h:outputText value="#{taskInstance.taskMgmtInstance.taskMgmtDefinition.processDefinition.name}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Version" />
</f:facet>
<h:outputText value="#{taskInstance.taskMgmtInstance.taskMgmtDefinition.processDefinition.version}" />
</h:column>
</h:dataTable>
该datatable获取后台homeBean的taskInstances属性,对应的getter方法为:
public List getTaskInstances() {
return taskMgmtSession.findTaskInstances(userBean.getUserName());
}
从这个getter方法可以看出,任务列表是通过调用org.jbpm.db.TaskMgmtSession的findTaskInstances方法获取的。findTaskInstances(String actorId)方法返回所有指定参与者的任务实例(Task Instance)列表。
由datatable生成的HTML TABLE中一共是3列。第1列是选择相应任务实例的链接。该链接对应的action为homeBean的selectTaskInstance方法,同时传递一个taskInstanceId参数,参数值为任务实例的id。第2列显示流程定义的名称。第3列显示流程定义的版本。
二、获取具体任务实例
点击对应的链接,jsf调用homebean的selectTaskInstance方法获取对应这个任务的任务实例。代码如下:
public String selectTaskInstance() {
long taskInstanceId = JsfHelper.getId("taskInstanceId");// 从HTTP request parameter中获取任务实例的id
TaskInstance taskInstance = taskMgmtSession.loadTaskInstance(taskInstanceId);//获取对应的TaskInstance
taskBean.initialize(taskInstance);//初始化taskBean
return "task";//页面跳转至task.jsp
}
这里要注意的是,taskBean是由jsf注入到HomeBean中的,就是说taskBean是由jsf负责创建的。同样注入HomeBean的还有userBean,而且userBean是session范围。
taskBean.initialize是一个较关键的方法,该方法在前一篇“启动工作流”略有介绍。taskBean.initialize具体做如下工作:
1、获取task的变量(variableAccess),填入TaskFormParameter对象中。这些变量就是在处理任务时填入HTML FORM中的各项参数,如项目名称、数量、地址等。由于websale实现的功能较简单,所有流程管理中的相关信息均交给jBPM管理。websale的TaskFormParameter负责传递变量值。一个TaskFormParameter保存一个变量名和对应的变量值。因此,taskBean.initialize将获取的变量填入TaskFormParameter对象,并将所有TaskFormParameter对象保存在taskBean的taskFormParameters属性中(taskFormParameters是一个LIST对象)。
2、获取可用的转换。当流程停留在某个task node时,该task node可能存在大于1个的可能转换(Transition)。taskBean.initialize的第2个任务就是将这个节点的可能转换写入taskBean的availableTransitions属性中。
taskBean.initialize完成后,页面跳转到task.jsp。该页面包含一个HTML Form。task.jsp为taskFormParameters中的每一个taskFormParameter创建一个HTML Input并设置相应的值。同时为availableTransitions中每个转换创建一个HTML Button,点击相应的Button即选择流程定义中该节点的相应转换。
三、完成任务
完成任务相对简单。首先是调用taskInstance.setVariable方法设置被提交的任务变量,然后调用jbpmContext.save(taskInstance)保存任务实例。具体代码为见TaskBean的save方法。最后调用taskInstance.end(String transition_name)方法离开该节点,并再次保存任务实例,具体代码见TaskBean的saveAndClose方法。
参与者的任务列表在界面上是home.jsp负责呈现。home.jsp设置一个jsf的datatable来获取并呈现任务列表,如下:
<h:dataTable value="#{homeBean.taskInstances}" var="taskInstance" headerClass="tableheader" columnClasses="tablecell">
<h:column >
<f:facet name="header">
<h:outputText value="Task Form Link" />
</f:facet>
<h:commandLink action="#{homeBean.selectTaskInstance}">
<f:param name="taskInstanceId" value="#{taskInstance.id}"/>
<h:outputText value="#{taskInstance.name}" />
</h:commandLink>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Process" />
</f:facet>
<h:outputText value="#{taskInstance.taskMgmtInstance.taskMgmtDefinition.processDefinition.name}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Version" />
</f:facet>
<h:outputText value="#{taskInstance.taskMgmtInstance.taskMgmtDefinition.processDefinition.version}" />
</h:column>
</h:dataTable>
该datatable获取后台homeBean的taskInstances属性,对应的getter方法为:
public List getTaskInstances() {
return taskMgmtSession.findTaskInstances(userBean.getUserName());
}
从这个getter方法可以看出,任务列表是通过调用org.jbpm.db.TaskMgmtSession的findTaskInstances方法获取的。findTaskInstances(String actorId)方法返回所有指定参与者的任务实例(Task Instance)列表。
由datatable生成的HTML TABLE中一共是3列。第1列是选择相应任务实例的链接。该链接对应的action为homeBean的selectTaskInstance方法,同时传递一个taskInstanceId参数,参数值为任务实例的id。第2列显示流程定义的名称。第3列显示流程定义的版本。
二、获取具体任务实例
点击对应的链接,jsf调用homebean的selectTaskInstance方法获取对应这个任务的任务实例。代码如下:
public String selectTaskInstance() {
long taskInstanceId = JsfHelper.getId("taskInstanceId");// 从HTTP request parameter中获取任务实例的id
TaskInstance taskInstance = taskMgmtSession.loadTaskInstance(taskInstanceId);//获取对应的TaskInstance
taskBean.initialize(taskInstance);//初始化taskBean
return "task";//页面跳转至task.jsp
}
这里要注意的是,taskBean是由jsf注入到HomeBean中的,就是说taskBean是由jsf负责创建的。同样注入HomeBean的还有userBean,而且userBean是session范围。
taskBean.initialize是一个较关键的方法,该方法在前一篇“启动工作流”略有介绍。taskBean.initialize具体做如下工作:
1、获取task的变量(variableAccess),填入TaskFormParameter对象中。这些变量就是在处理任务时填入HTML FORM中的各项参数,如项目名称、数量、地址等。由于websale实现的功能较简单,所有流程管理中的相关信息均交给jBPM管理。websale的TaskFormParameter负责传递变量值。一个TaskFormParameter保存一个变量名和对应的变量值。因此,taskBean.initialize将获取的变量填入TaskFormParameter对象,并将所有TaskFormParameter对象保存在taskBean的taskFormParameters属性中(taskFormParameters是一个LIST对象)。
2、获取可用的转换。当流程停留在某个task node时,该task node可能存在大于1个的可能转换(Transition)。taskBean.initialize的第2个任务就是将这个节点的可能转换写入taskBean的availableTransitions属性中。
taskBean.initialize完成后,页面跳转到task.jsp。该页面包含一个HTML Form。task.jsp为taskFormParameters中的每一个taskFormParameter创建一个HTML Input并设置相应的值。同时为availableTransitions中每个转换创建一个HTML Button,点击相应的Button即选择流程定义中该节点的相应转换。
三、完成任务
完成任务相对简单。首先是调用taskInstance.setVariable方法设置被提交的任务变量,然后调用jbpmContext.save(taskInstance)保存任务实例。具体代码为见TaskBean的save方法。最后调用taskInstance.end(String transition_name)方法离开该节点,并再次保存任务实例,具体代码见TaskBean的saveAndClose方法。
- jbpm3.1 websale实例学习(二)执行任务
- jbpm3.1 websale实例学习(一)启动工作流
- (2)jBPM websale代码学习: home.jsp(显示任务列表)
- (2)jBPM websale代码学习: home.jsp(显示任务列表)
- (2)jBPM websale代码学习: home.jsp(显示任务列表)
- JBPM3.2 工作流演示例子(jbpm-console websale DEMO) 移植到 To
- JBPM3.2 工作流演示例子(jbpm-console websale DEMO) 移植到 To
- 任务执行(二)
- (1)jBPM websale代码学习: login.jsp
- (1)jBPM websale代码学习: login.jsp
- (1)jBPM websale代码学习: login.jsp
- (3)jBPM websale代码学习: home.jsp(启动流程)
- jBPM websale代码学习: home.jsp(启动流程)
- (3)jBPM websale代码学习: home.jsp(启动流程)
- (3)jBPM websale代码学习: home.jsp(启动流程)
- JBPM3 用户指南-- 任务管理
- Activiti 学习笔记四:流程实例、任务的执行
- jbpm3.2简单实例
- Symbian开发学习笔记之二
- 风筝
- 男人的心酸
- DELPHI 取Run下所有值
- 青春爱人事件
- jbpm3.1 websale实例学习(二)执行任务
- IT思考——从SOA的定义说起
- Hibernate参考文档 3.0.4
- 躲开QQ的本地密码验证
- gameloft的笔试
- 在可执行jar中动态载入第三方jar(转贴)
- Java对象序列化给分布式计算带来的方便 (转)
- 增加KVM中的系统调用API(转)
- 深入了解C语言(局部变量的定义)(转)