webreport

博客园 首页 新随笔 联系 订阅 管理

工作流引擎实现抽象流程的流转,业务的实现在表单模块中完成。如报销流程,填写报销单,审核报销单,都对应一个业务模块,在业务模块中实现将数据保存到数据库表中,实现业务数据的持久化。工作流引擎负责将这些业务模块串起来,实现业务流的流转。
  
  曾经的业务系统,业务流的流转通常是采用对状态字段的控制来实现的。当报销单填写完成后,单据状态为1,经理审核的时候,就查询出单据状态为1的记录,做审核,审核完成后,也是修改审核状态,这样来达到业务流的流转。
  
  当应用了工作流系统后,业务流的流转,就不需要根据状态字段来控制了,业务流的流转按照业务流程建模的节点规则向前流转,状态字段退化成纯粹的业务数据,只表示当前的业务状态。
  
  工作流系统在集成业务模块时,只要将业务模块实现的表单,挂接到流程的节点上,就可以了。业务表单,可以是定制的,如jsp页面,aspx页面,甚至htm页面。也可以是用表单工具生成的表单,将通用表单工具生成的表单挂接到流程的节点上。
  
  流程运行时,按照流程节点向前运行,取出节点的表单,打开运行,待用户输入完成后,提交,一并做业务数据的提交和流程节点的提交。这里就涉及到工作流引擎和业务模块集成。
  
  集成通常分为几个方面:
  表单数据的提交+工作流节点的流转:需要在一个事务中完成。
  
  表单中的一些业务数据,需要能传递到流程引擎中,做流程流转控制用,如报销流程,报销金额大于1000元的需要总经理特别审批,就需要将用户填写的报销金额值传递到流程引擎中。
  
  表单中也需要能获得流程的一些数据,如流程实例id,节点id等等,便于做业务数据和流程实例的关联,另外也可以做一些权限控制等。
  
  集成的过程,需要调用流程引擎的api来实现,当流程引擎和通用的自定义表单工具集成时,这些集成是都完成了的。只需要在表单设计器中完成业务表单模块。调用相应的功能,即可完成和流程的关联。
  
  eform自定义表单工具和eworkflow的集成表现在如下几个方面:
  
  表单数据的提交+流程的节点的执行 :
  
  是在表单数据提交的后置事件中,做了流程的节点的执行。如果流程还未初始化,即未生成流程实例id,则在表单数据提交的前置事件中,调用流程引擎的api,执行流程的初始化,得到流程实例id。
  表单数据的提交+流程节点的运行是在一个事务中实现的。
  
  表单中关键业务数据传递到流程引擎中的实现:
  在eform表单的数据集中设置了,选择流程用,提交表单时,扫描出流程用的数据,按关键字,数据类型和值,形成一个map对象(java是map,.net是IDictionary),在执行流程引擎的节点时,送入流程中,供流程使用。
  工作流引擎的初始化
  public long initialize(String workflowName, int initalVersion, int initialAction, Map inputs) throws InvalidRoleException, InvalidInputException, WorkflowException, InvalidEntryStateException, InvalidActionException;
  
  执行动作方法
  public void doAction(long id, int actionId, Map inputs) throws InvalidInputException, WorkflowException;
  
  
  表单中接收流程的相关信息,是在打开业务表单的时候,将流程的一些相关信息,拼到url中,表单再获取这些url中的值。
  
  
  为了便于更快速的制作业务表单:
  eform提供了自定义工具条的功能,在制作表单时,可以自定义工具条的内容。
  
  如费用报销单的自定义工具条的 定义操作界面如下:
  
    

  点击添加按钮,还可以从下拉中选择表单中需要的功能。每个按钮可以设置权限,不可用或隐藏等
  工具条按钮权限设置界面:
  
  
  
  表单的设计界面:
  
  
  费用报销单流程:
  
  
  启动流程实例后,费用报销单运行时的展现:
    

这个是填写单据的界面,审核信息不可见。当审核的时候,审核的信息,就可编辑,并且单据主体的信息不能修改,这个是单据中的权限设置完成的。

posted on 2011-07-06 17:38  web报表  阅读(8197)  评论(2编辑  收藏  举报