aspx页面集成工作流引擎api

长平狐 发布于 2012/10/11 18:38
阅读 150
收藏 0

最近用户在做工作流系统的集成时,总会要求快速的集成到用户的应用系统。

一般一个成熟的工作流软件产品,会有流程设计器,流程引擎,表单设计器,流程管理中心。在流程管理中心能可视化给业务流程建模,并发起流程实例,执行流程的流转,监控和管理流程实例的运行情况。这些功能是在工作流软件产品中已经完成的功能模块,流程建模,执行流程实例的过程其实也是一个调用流程引擎api的集成过程,只是这些调用过程都封装好了,不需要用户再去关心那些代码是如何实现的。

在工作流系统集成到应用系统时,集成方案,分二种,一种是直接调用流程管理中心的可视化模块,将这些可视化模块的url链接挂接到应用系统的菜单上,使得点击应用系统的菜单,就执行这些流程的管理模块。这样就只需要在应用系统的菜单管理中多定义一些关于流程管理的菜单,就可以了。如流程设计器,表单设计器,流程模版管理,启动流程实例,监控流程实例,我的待办任务。

但往往是事与愿违的,流程管理中心的那些可视化功能,有的用户会觉得不够用,或者是不能完全满足最终客户的需要。总是需要重新编写一些模块,如流程模版列表,用户需要增加一下查询条件。我的待办任务列表,用户希望能增加一些业务列的显示。这样的话,就必需要重新改写这些模块。这样就需要用到集成方案的第二种,调用流程引擎的api来做了。

利用工作流引擎的api来做集成,就需要了解都提供有那些api接口和函数,就不如第一种直接的模块集成那么方便了,需要编写代码来实现。不过,流程引擎提供的api接口和函数总归是简单的,不会太复杂,而且已经有了实现的方案(流程管理中心的实现过程就是示例),照着示例去做就ok了。

例如,在aspx页面中,需要做流程模版的列表。流程模版通常有存文件和存database两种,流程引擎的api函数中,有这样的函数,可以屏蔽掉是存文件中还是存database中的区别,只需要获取得到模版列表的arraylist,就ok了。

如果应用系统确定了流程模版只存在于database中,那还可以用sql从表中直接取出流程模版列表的方案,可能用这种对用户来说更方便了,但是就不能屏蔽流程模版保存场所的变化。

我的待办任务列表,这种是用户在集成的时候,经常需要调用api来做集成的。
在流程管理中心,我的待办任务列表的显示列,只能从流程的角度来列,有流程模版名,描述,版本,任务描述,最大再加一列 业务显示列。但是如果用户需要更多的业务显示列,就只能关联到用户的具体业务表去取。

在集成待办任务列表的时候,也有两种方法,利用流程引擎的api和执行sql直接从任务表中获取。
下面以我们公司的eworkflow自定义工作流系统为例,在aspx页面中,如何调用eworkflow的流程引擎获得待办任务列表:

       string userid = (System.String) Session["userid"];
       Environment env = new Environment(Session);
       Workflow wf = new BasicWorkflow(userid,env);
      ArrayList tasks = wf.getCurrentTasks("2",condition);//2待办任务,3已办
   
   这个tasks中,就包含有任务信息了,每一行,是一个IDictionary, 根据关键字的不同,能获取到,任务id,wfid, actionid,traceid,....等等,执行任务必需的参数。
   
       string flowname = wf.getWorkflowName(wfid);
       int flowversion = wf.getWorkflowVersion(wfid);
       WorkflowDescriptor wd = wf.getWorkflowDescriptor(flowname, flowversion);
       ActionDescriptor action = wd.getAction(actionId);
    
     action.View就是这个任务关联的业务表单,打开这个表单,执行业务过程。
    
     在这里就不把所有的代码都列出来了,在eworkflow中,有aspx页面集成流程引擎得到待办任务列表的示例。


在应用系统集成工作流系统时,直接利用流程管理中心的现有功能的url,是最快速的集成。有些模块也可以利用流程引擎的api来做,按照现有的调用示例,也能很快的达到集成,甚至可以通过执行sql来达到。如我的待办任务列表,就可以直接用这样的sql来做列表。
sql

需要增加业务显示列的话,就在上面的sql中增加关联业务表,关联关系,就是 任务表.wf_id=业务表.wf_id。 这样就可获取到业务的任意信息做显示用了。


原文链接:http://www.cnblogs.com/webreport/archive/2011/11/03/2234233.html
加载中
返回顶部
顶部