现在的位置: 首页 > 综合 > 正文

JBPM公文流转

2013年08月02日 ⁄ 综合 ⁄ 共 3162字 ⁄ 字号 评论关闭
一下内容是根据网络资源整理的笔记
  • 需求分析及概念介绍:

1、公文是企业/政府办公的重要内容,请假单、报销单、收文、发文等等都是公文的一种形式。所有公文,几乎都要经过各种中间环节,才能最终实现公文的目的。这个所谓的中间环节,其实就是不同的人!即公文需要经过不同的人进行审批之后,公文才能实现其目的。因此,公文需要在不同的人那里流动。这就是公文流转。换一句话来说,公文流转就是多个人在一起合作完成一件事情。不管怎么样,公文流转涉及到流程的概念。我们需要对流程进行管理。

2、企业流程管理的目的是帮助企业管理和优化企业的业务流程,提高企业执行效率,并从优化的业务流程中创造更多的效益。

3、流程管理的核心是流程,流程是任何企业运作的基础,企业所有的业务都是需要流程来驱动的,就像人体的血脉流程把相关的信息数据根据一定的条件从一个人(部门)输送到其他人员(部门)得到相应的结果以后再返回到相关的人(或部门)。一个企业不同的部门,不同的客户,不同的人员和不同的供应商都是靠流程来进行协同运作,流程在流转过程可能会带着相应的数据:文档/产品/财务数据/项目/任务/人员/客户等信息进行流转,如果流转不畅一定会导致这个企业运作不畅。

4、大的方面来说,包括流程分析(可以由相关业务领导决定)、流程定义与重定义、资源分配等等

5、从细的方面来看,则分为公文的管理、流程的管理、表单的定义

5.1、公文管理:即根据系统定义的流程,选择添加一个公文;之后公文可以被提交到流程;公文应能按照流程所定义的步骤逐步在不同的部门或人员之间传达;通过这些参与到流程中来的人的协作,逐步触发 向下流动。

5.2、流程管理:最主要是流程的定义与重定义,以及资源的分配(即将任务分配给谁)。

5.3、表单定义:因为流程的不同,在这些流程中流动的信息自然也是不同的,根据不同的流程提交不同的信息,这就是表单定义要达到的目的。

6、JBPM(Java Business Process Management)业务流程管理

6.1、在oa系统中,JBPM是实现公文流转的基础。JBPM的流程定义语言是JPDL((Java ProcessDefinitionlanguage))。JBPM的流程定义包含如下概念:

6.1.1、起始节点 –start state,必须包含起始节点

6.1.2、结束节点 – endstate

6.1.3、节点 –node

        1. 任务节点 – 可以分配任务的节点,在task-node中,可以创建task,并assignment到不同的actor-id
        1. fork – 分支节点
        2. join – 联合节点

6.1.4、流向(或转换) - transition

6.2、JBPM的核心概念

6.2.1、流程实例

6.2.2、流程实例变量

6.2.3、Token(树)

6.2.4、Event与Action

6.3、JBPM的核心操作

6.3.1、部署流程(理解版本的概念)

6.3.2、创建流程实例

6.3.3、创建流程实例变量

6.3.4、触发流程实例的流转(processIntance.signal()taskInstance.end()

6.3.5、获取下一步流向

taskInstance.getAvailableTransitions();//在transition上定义condition(条件)将影响到获取下一步流向的结果。这个跟getNode().getLeavingTransitions();不同。

6.4、JBPM的核心编程接口

6.4.1、JbpmConfiguration

6.4.2、JbpmContext

6.4.3、ProcessDefinition

6.4.4、ProcessInstance

6.4.5、ContextInstance

6.4.6、Token

7、JBPM与Spring/hibernate的集成

7.1、将JBPM相关的hibernate映射文件资源路径添加到hibernate配置文件中

7.2、将JbpmConfiguration交给spring去管理

<beanid="jbpmConfiguration" class="org.springmodules.workflow.jbpm31.LocalJbpmConfigurationFactoryBean">
<propertyname="configuration" value="classpath:jbpm.cfg.xml"></property>
</bean>

7.3、在需要用到JbpmContext的时候,将它跟hibernate session绑定:

/**
 * 获取JbpmContext对象,需要将JbpmContext的session设置为当前的session对象
 * @return
 */
private JbpmContext getContext(){
	JbpmContext context = jbpmConfiguration.createJbpmContext();
	context.setSession(getSession());
	return context;
}

8、JBPM复杂流程的定义   

8.1、如何进行有条件的流转?(condition transiton)

8.2、如何实现多人同时会签,并需每个人都通过之后才能继续向下?(fork/join)

8.3、如何实现多人同时会签,只需其中一个人通过之后就能继续向下?(多个task)

8.4、如何根据不同的表单内容,实现不同的流程?(即需要将动态表单定义内容拷贝到流程实例中,以便在定义流程的时候,可以使用这些内容!如何拷贝?可采取定义Action的方法)

  • OA公文流转与JBPM的交互过程

    • 首先分析流程,并通过设计器定义流程,将任务分配给不同的人员【此部分可扩展,比如可以提供自己的流程设计器】
    • 将流程定义信息存储(部署)到OA系统
    • 针对此流程,启动表单定义,可动态定义将在流程中流转的信息类型
    • 选择流程,创建公文,并根据流程对应的动态表单,显示不同的公文录入界面(表单)
    • 保存公文信息
    • 将公文信息提交到流程(根据下一步都有哪些步骤,可自行选择一个步骤进行提交)
    • 公文将在工作流引擎的支持下,根据流程的定义,流转到下一个人那里
    • 下一个人登陆之后,可针对此公文进行审批(即可以查看流转到当前登录人的所有公文),并再次按照工作流引擎的提示,选择下一个步骤进行提交
    • 重复审批与提交的过程,直到结束,结束之后的公文可由专门的人员做归档处理。
  • 动态表单模型:公文-动态属性-流程-表单-表单域-输入形式-表单类型-表单条目
  • 动态表单实现方式

    • 呈现:为了能动态显示表单域,并保证灵活性,采取freemarker来作为表单域的呈现手段

      • 定义表单的freemarker模板
      • 定义表单域的freemarker模板
      • 表单和表单域的freemarker模板,联合组成一套表单模板
      • 定义JSTL函数,在函数内部结合动态表单定义的数据模型以及表单模板,调用freemarker模板引擎合成动态表单的呈现HTML代码!
    • 存储:利用Hibernate存储Map类型的能力,决定在公文对象中定义一个Map类型的属性作为动态表单的数据存储。Map的key是表单域的属性,Map的value是一个DocumentProperty类型的对象,这个对象拥有各种类型的属性,针对此表单域属性的类型不同,在存储的时候,将分别存储到具有相同类型的属性中去。

      • 首先,在提交表单的时候,我们在ActionForm中定义Map类型的属性来接收动态表单的数据
      • 根据动态表单的定义,将Map中包含的属性数据进行解释(转换为相应的java类型,比如上传文件的FormFile需转换为byte[]进行存储)
      • 将经过转换之后的数据,设置到公文的动态属性(Map类型)中
      • 利用Hibernate存储公文信息即可

抱歉!评论已关闭.