前段时间用jbpm做工作流,同事要求能根据实际的流程显示任务详细信息,自己就做了一个actionHandler,放入在task的task-assign事件中.
java 代码
- package com.guotai.wf.handler;
-
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
-
- import org.apache.commons.lang.StringUtils;
- import org.apache.log4j.Logger;
- import org.jbpm.context.exe.ContextInstance;
- import org.jbpm.graph.def.ActionHandler;
- import org.jbpm.graph.exe.ExecutionContext;
- import org.jbpm.graph.exe.Token;
- import org.jbpm.taskmgmt.exe.TaskInstance;
- import org.springframework.beans.BeanWrapper;
- import org.springframework.beans.BeanWrapperImpl;
-
-
-
-
-
-
-
- public class TaskNameSetterHandler implements ActionHandler {
-
-
-
- private static final Logger logger = Logger.getLogger(TaskNameSetterHandler.class);
-
- private String message;
-
- public void execute(ExecutionContext executionContext) throws Exception {
- String[] arr = pickupMessage();
-
- String msg = message;
- if(arr != null){
- for(int i=0;i<arr.length;i++){
- Object o = getValue(executionContext.getContextInstance(), executionContext.getToken(), arr[i]);
- msg = replaceMessage(msg,arr[i], o);
- }
- }
-
- TaskInstance ti = executionContext.getTaskInstance();
- ti.setName(ti.getName() + ":" + msg);
-
- }
-
-
-
-
-
-
-
- public String replaceMessage(String msg,String name,Object o){
- String name_find = "${" + name + "}";
- if(msg.indexOf("${" + name + "}") > -1){
- logger.debug("有其值!");
- }
- String str = msg.substring(0,msg.indexOf(name_find));
- if(o != null){
- str += o.toString();
- }else{
- str += " ";
- }
- str += msg.substring(msg.indexOf(name_find)+name_find.length(),msg.length());
- msg = str;
- return msg;
- }
-
-
-
-
-
-
-
-
- private Object getValue(ContextInstance contextInstance,Token token,String name){
- Object value = null;
- if (name.indexOf(".") > -1) {
- String prename = name.substring(0, name.indexOf("."));
- String postname = name.substring(name.indexOf(".") + 1,name.length());
- Object o = contextInstance.getVariable(prename, token);
- try {
- value = o;
- BeanWrapper bw = new BeanWrapperImpl(o);
- String name_tmp = postname;
- value = bw.getPropertyValue(postname);
- } catch (Exception e) {
- logger.error(e);
- throw new IllegalArgumentException("convert error");
- }
- } else {
- value = contextInstance.getVariable(name, token);
- }
- return value;
- }
-
-
-
-
-
- public String[] pickupMessage(){
- if((this.message != null) && (this.message.indexOf("${") > -1)){
- List list = new ArrayList();
- String str = message;
- while(str.indexOf("${") > -1){
- String str_sub = StringUtils.substringBetween(str, "${", "}");
- logger.debug("提取字符串:" + str_sub);
- list.add(str_sub);
- str = StringUtils.substring(str,str.indexOf("${")+2);
- }
- String[] arr = new String[list.size()];
- int i=0;
- for(Iterator it=list.iterator();it.hasNext();){
- arr[i++] = (String) it.next();
- }
- return arr;
- }
- return null;
- }
-
- public String getMessage() {
- return message;
- }
- public void setMessage(String message) {
- this.message = message;
- }
-
- }
我用的springModule集成jbpm的,所在在参数在spring配置文件中设置,如下
xml 代码
- <bean name="taskNameSetterAction" class="com.guotai.wf.handler.TaskNameSetterHandler">
- <property name="message" value="名称为${sale.item}数目为${sale.quantity}"/>
- </bean>
分享到:
相关推荐
- **自定义设置**:用户可以指定目标SQL服务器实例、数据库名称、文件路径等参数,以满足特定需求。 - **错误处理**:在附加过程中遇到问题时,工具通常会提供错误报告,帮助用户快速定位和解决问题。 2. **使用...
这个工具简化了将这些数据库文件添加到SQL Server实例的过程,特别是对于需要一次性处理大量数据库的情况,如数据迁移、备份恢复或环境设置。 描述进一步解释了工具的使用方法。首先,你需要将所有.MDF和.LDF数据库...
实例150 修改文件及目录的名称 5.6 文件的读取与保存 实例151 顺序读取文件 实例152 制作日志文件 5.7 文件管理 实例153 分类整理磁盘文件 实例154 计算机磁盘空间报警程序 实例155 批量改变指定文件的属性 ...
在 SQL Server 2000 中,附加数据库是一项常用的操作,主要用于将已经存在的 `.MDF` 文件(主数据文件)添加到当前 SQL Server 实例中,使其成为该实例的一部分。这对于数据库迁移、备份恢复等场景非常有用。下面将...
实例093 对数据库进行分离、附加、备份及还原操作 331 实例094 综合查询职工详细信息 338 实例095 使用二进制存取用户头像 342 实例096 使用交叉表实现商品销售统计 345 实例097 通过视图修改职工信息 347...
实例093 对数据库进行分离、附加、备份及还原操作 331 实例094 综合查询职工详细信息 338 实例095 使用二进制存取用户头像 342 实例096 使用交叉表实现商品销售统计 345 实例097 通过视图修改职工信息...
实例093 对数据库进行分离、附加、备份及还原操作 331 实例094 综合查询职工详细信息 338 实例095 使用二进制存取用户头像 342 实例096 使用交叉表实现商品销售统计 345 实例097 通过视图修改职工信息...
实例004 任务栏托盘菜单 4 实例005 可以拉伸的菜单界面 5 实例006 级联菜单 6 1.2 工具栏设计 6 实例007 带背景的工具栏 7 实例008 浮动工具栏 7 实例009 带下拉菜单的工具栏 8 实例010 具有提示功能的工具栏...
实例004 任务栏托盘菜单 4 实例005 可以拉伸的菜单界面 5 实例006 级联菜单 6 1.2 工具栏设计 6 实例007 带背景的工具栏 7 实例008 浮动工具栏 7 实例009 带下拉菜单的工具栏 8 实例010 具有提示功能的工具栏...
实例004 任务栏托盘菜单 4 实例005 可以拉伸的菜单界面 5 实例006 级联菜单 6 1.2 工具栏设计 6 实例007 带背景的工具栏 7 实例008 浮动工具栏 7 实例009 带下拉菜单的工具栏 8 实例010 具有提示功能的工具栏...
实例004 任务栏托盘菜单 4 实例005 可以拉伸的菜单界面 5 实例006 级联菜单 6 1.2 工具栏设计 6 实例007 带背景的工具栏 7 实例008 浮动工具栏 7 实例009 带下拉菜单的工具栏 8 实例010 具有提示功能的工具栏...