`
iyond
  • 浏览: 3086 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

在JBPM中使用自定义表单

    博客分类:
  • jBPM
阅读更多
最近在做一个项目,涉及到工作流,在网上找了一下,发现JBPM还是不错的。于是打算用它来做工作流引擎。不过我以前是做.NET的,从来没有写过Java的程序,一切都得从头开始,不过也算是对自己的一个锻炼吧。

因为是新手,所以开始很难,前两天下载了个MyEclipse,费了九牛二虎之力,总算把JBPM的开发环境搭起来了。对照着JBPM的用户手册,目前已经实现了数据库存储,以及一个基本流程的流转(纯流程,静态表单数据)。数据库设计也大概做完了,也搭起了Hibernate环境,并根据数据库生成了数据层代码。从今天开始,就要着手实现动态加载工作流表单了。

首先,我的工作流表单是定义在数据库里,大概的结构是这样:



每个流程定义了一个Form,FormItem里存放这个Form里各有什么控件,以及控件的类型及值类型等。据我了解,Java(或者Jsp)里,没有像.NET里那样的动态加载控件机制,所以,我写了一个Bean,根据传进来的流程名称,来加载相应的表单及里面的控件。
public class WrokflowFormBean {
	private String processDefinitionName = "";
	private String outputControl = "";
	
	public void setProcessDefinitionName(String processDefinitionName) {
		this.processDefinitionName = processDefinitionName;
	}
	
	public String getOutputControl() {
		if(processDefinitionName.equals(""))
			return "";
		
		FormDAO formDao = new FormDAO();
		List<Form> forms = formDao.findByProcessDefinitionName(this.processDefinitionName);
		if(forms.size() > 0){
			Form form = forms.get(0);
			
			Set<FormItem> formItems = form.getFormItems();
			for(FormItem item : formItems){
				String controlContent = "";
				ControlType controlType = item.getControlType();
				if(controlType.getControlType().equals("text")){
					String controlValue = "";
					Set<FormItemValue> formItemValues = item.getFormItemValues();
					
					for(FormItemValue v : formItemValues){
						if(v.getIsDefault() == 1){
							controlValue = v.getItemValue();
						}
					}
						
					controlContent = String.format("<input type=\"text\" name=\"%s\" style=\"%s\" value=\"%s\" />",item.getName(),item.getCssStyle(),controlValue);
				}
				else if(controlType.getControlType().equals("select")){
					//...
				}
				outputControl += controlContent;
			}
		}
		return outputControl;
	}
}


在处理流程的页面里,调用这个Bean,就可以得到需要加载的表单了。
提交的时候,在根据数据库里的配置,分别得到这些控件的值,然后存储就行了。
//找到这一步需要提交的表单数据
FormDAO formDAO = new FormDAO();
List<Form> forms = formDAO.findByProcessDefinitionName(workflowName);
if(forms.size() > 0){
	Form myform = forms.get(0);
	
	Set<FormItem> formItems = myform.getFormItems();
	for(FormItem item : formItems){
		if(item.getEditableNode().indexOf(String.format("%d,", taskInstance.getTask().getId())) != -1){
			contextInstance.createVariable(item.getName(), ParseValue(item,request.getParameter(item.getName())));
		}
	}
}


我目前是存储到了流程的变量里,当然也可以存储到数据库里。

现在的问题是,一个流程里,有好多人参与(好多Task),每个人看到的,和可以编辑的控件不可能一样。如果根据当前的不同的环节,或者不同的人,在我定义的Bean里返回不同的控件内容呢?我现在是在fwo_FormItem表里定义了两个字段:VisibleNode和EditableNode,里面存的是相应的Task的Id。这样的话,只需要在调用Bean之前,先把当前Task的Id传进来就可以了。

如果是流程中的环节,我可以使用jbpmContext.getTaskList来得到当前的任务,从而得到Task的Id。但是,当一个用户新建流程的时候,如果获得Task的Id呢?因为我想是当这个用户提交了表单的时候,我才应该创建流程实例什么的。但是此时还没有流程实例,也无法得到相应的Task。请大家帮帮忙,看如何实现?

附一张我的流程设计图,画红圈的就是如何加载表单的地方:


  • 大小: 42.3 KB
  • 大小: 41.2 KB
5
0
分享到:
评论

相关推荐

    基于LigerUI+JBPM5自定义表单+Node.js的J2EE大型金融项目《财务预算系统》开发全程实录.rar

    基于LigerUI+JBPM5自定义表单+Node.js的J2EE大型金融项目《财务预算系统》开发全程实录——课程分为三季: 第一季:基础篇,主要内容包括:基础设置,主要是对整个框架的搭建,对流程的控制,对所用到的技术进行...

    JBPM4.4+SSH2 业务流 绑定表单Demo

    【JBPM4.4+SSH2 业务流 绑定表单Demo】是一个结合了Java企业级框架Spring(SSH2中的S和H)与工作流引擎JBPМ4.4的实战示例,用于演示如何在业务流程中集成自定义表单。这个Demo主要涵盖了以下几个关键知识点: 1. *...

    工作流动态表单设计图(jbpm)

    在本文中,我们将深入探讨使用jbpm实现工作流动态表单设计的相关知识点。 首先,jbpm(JBoss Business Process Management Suite)是一个开源的工作流管理系统,它提供了强大的流程建模、执行和监控功能。jbpm不仅...

    jbpm 动态表单的配置 于开发

    阿里巴巴x-jBPM项目中关于动态表单的开发部分,主要介绍了如何利用jBPM来构建可自定义的表单界面,这对于提高业务流程的灵活性和适应性非常关键。 #### 二、动态表单的重要性 动态表单允许用户在流程运行时根据...

    jbpm的扩展源代码

    5. **自定义任务表单**:jbpm可以通过使用kie-workbench或者第三方工具创建和渲染自定义的任务表单,提供更丰富的用户体验。 6. **流程审计和日志**:jbpm提供内置的历史审计服务,可以通过扩展日志记录和报告功能...

    JBPM4.4使用到的术语及注意项

    JBPM4.4 使用到的术语及注意项 jBPM4 是 JBoss 众多开源项目中的一个工作流开源项目,也是目前应用最广泛的工作流项目。JBoss jBPM 团队正式发布了 jBPM4 的正式版,jBPM4 完全基于流程虚拟机(PVM)的机制,对核心...

    jbpm文档,Jbpm 帮助

    - **使用Eclipse工具**:安装了Eclipse插件后,可以直接在IDE中创建和测试流程。 - **使用jBPM控制台**:通过Web界面访问jBPM控制台,进行流程管理和监控。 - **使用Guvnor存储库和设计器**:在线设计流程并通过...

    jbpm4.4中文用户手册

    用户手册将介绍如何创建和关联流程表单,以及如何使用jbpm提供的UI组件或自定义前端界面来交互流程。 9. **调试与日志** 调试和日志记录对于排查问题至关重要。手册会提供有关如何启用调试模式,设置日志级别,...

    关于表单自定义的方案设想

    工作流引擎如jbpm和shark提供了处理业务流程的能力,可以与自定义表单结合,实现流程审批、任务分配等功能。在深入理解工作流引擎的工作原理后,可以设计相应的接口和逻辑,使得表单数据能够无缝融入工作流程中。 ...

    jbpm-4.4.zip part03

    5. **任务管理**:jbpm提供任务服务,允许用户分配、接收、完成和转移任务,支持自定义任务表单和工作流审批规则。 6. **监控和审计**:jbpm具有内置的监控和审计功能,可以通过监控视图查看流程实例的状态、跟踪...

    JBPM的使用心得

    在本文中,我们将深入探讨JBPM的使用经验,涵盖其核心概念、工具使用以及实际应用案例。 1. **核心概念** - **流程定义语言 (BPMN)**:JBPM支持Business Process Modeling Notation(BPMN),一种标准化的图形化...

    我写的一个jbpm实例

    在jbpm实例中,流程定义文件(.bpmn或.bpmn20.xml)和相关的表单定义(.form)会被打包成一个.kjar文件,然后部署到jbpm服务器。部署可以通过jbpm的工作流管理控制台或者API进行。 5. **任务服务** jbpm的任务...

    jbpm6相关文档

    在本文中,我们将深入探讨jBPM 6的安装过程以及其引入的新特性。 首先,让我们详细地了解jBPM 6的安装步骤。要安装jBPM 6,你需要从SourceForge的JBPM 6.0.0.Final版本下载安装包。解压缩后,进入jbpm-installer...

    jbpm各种表单之间的关系

    在实际应用中,理解jbpm的内核设计可以帮助开发者更高效地配置和优化流程,同时也能为自定义扩展提供基础。通过深入研究jbpm的源码和文档,开发者可以进一步掌握工作流引擎的核心原理,从而在工作流系统设计和实现上...

    jBPM教学视频(09流程图跟踪.zip)

    - 表达式和变量:理解如何在流程中使用表达式和变量来控制流程行为。 3. **流程实例管理** - 启动流程:学习如何启动一个新的流程实例,以及如何传递参数给流程。 - 流程实例查询:查找和检索正在运行或已完成的...

    jBPM中文用户指南

    同时,支持自定义监听器、工作项handler、任务表单等,满足特定场景需求。 ### 六、案例分析 本指南将通过实际案例演示如何使用jBPM构建请假审批流程,涵盖流程设计、部署、启动、任务处理和监控等环节,让读者...

    JBPM数据表之间的关系

    JBPM(JBoss Business Process Management)是一个开源的工作流和业务流程管理系统,用于设计、执行、监控和优化...在开发过程中,这些关系将指导如何正确地配置和执行流程,以及如何设计符合业务需求的自定义逻辑。

    jbpm4研究-工作流

    在系统中,可以采用Velocity模板和ExtJS进行自定义表单设计,利用Velocity进行动态渲染,结合ExtJS的前端组件库,实现丰富的交互效果和数据绑定。 ### 4. 系统扩展性 为了使系统具备高度的扩展性和易用性,我们...

    jbpm6.0 入门(很有权威)

    ##### 5.7 在应用中使用流程 介绍了如何将定义好的流程嵌入到 Java 应用程序中。 ##### 5.8 其他特性 除了基本的流程定义外,jBPM 还提供了许多高级特性,如数据处理、约束条件和动作脚本等。 - **数据**:处理...

Global site tag (gtag.js) - Google Analytics