web工作流管理系统开发之八 开源osworkflow之任务管理

针对osworkflow原有任务管理不足,本文提出新增任务表与任务节点的解决方案,详细介绍了任务表结构及任务节点定义,实现任务发起、待办、已办等功能。

前言:

osworkflow的任务管理很简单,没有专门的任务表,也没有待办,已办,发出,处理任务等等。
只有很简单的查询用户可处理的动作和已经处理过的历史步骤。(注意这里只是可处理的动作和已经处理过的历史步骤,都不是任务)

 

这显然距任务管理差很多很多

 

 

改造方案:
      增加任务表,记录任务的相关属性,可执行人,任务处理人,任务发出时间,完成时间等。


      流程定义模版文件中增加任务节点,定义任务的名称,从流程上下文中获取任务的内容和相关属性,定义任务的可执行人。

      将产生任务记录和处理关闭任务的过程嵌入到工作流引擎的动作执行函数中。


      当流程到达步骤后,根据流程定义模版文件中定义的任务节点,产生任务记录;
      当动作执行时,检查任务是否可以执行完成,关闭任务。

 

      因为单独出一张任务表,所以可以增加对任务的管理,查询得出待办任务列表,已办任务列表,做代理待办,催办,逾期未办等等的处理。

 

      可以做到的任务管理:任务发起,待办,已办,催办,督办,收回等等。

 

任务表结构:



 


流程定义节点:
例如:
     <tasks>
        <task name="审核员工:${oCaller.name} 的请假申请" classname="cn.com.fcsoft.workflow.util.MakeTask">
          <arg name="taskDesc">内容:${remark}</arg>
          <arg name="rolename">部门经理</arg>
          <arg name="stepId">5110</arg>
          <arg name="role">ROL_0000003</arg>
        </task>
      </tasks>


 

 

增加生成任务的类MakeTask:

 

 

 

增加descriptor中的任务定义类,并在相应的检查校验中增加对任务节点的校验:


 

     

 

 


总结:

 

      通过增加任务,将任务的生成与处理嵌入到流程引擎中,任务的产生与完成跟流程的运行密切相关,在流程运行时会生成相应的任务,实例递进时完成相应的任务。同时任务记录单独抽出生成一张表,又可以很容易的做待办,已办,催办等等和任务相关的管理。
      原来osworkflow是从流程引擎的核心表中去查太麻烦了,也很不灵活,功能太过简单,也不利于扩展。

 

 

 

 

相关链接

web工作流管理系统开发之一 工作流概念

web工作流管理系统开发之二 工作流引擎
web工作流管理系统开发之三 可视化流程设计器
web工作流管理系统开发之四 集成工作流与自定义表单
web工作流管理系统开发之五 开源osworkflow之用户系统改造

web工作流管理系统开发之六 表单权限与流程的权限控制

web工作流管理系统开发之七 最新修改的版本下载 

web工作流管理系统开发之八 开源osworkflow之任务管理 

 

 

Stepify(node-stepify) 是一个简单易扩展的Node.js流程控制引擎,采用方法链(methods chain)的方式定制异步任务,使得Node.js工作流易于理解和维护。 目标是将复杂的任务进行拆分成多步完成,使得每一步的执行过程更加透明,化繁为简。 stepify特点 最基本的API的就3个:step(),done(),run(),简单容易理解。 精细的粒度划分(同时支持单/多任务),执行顺序可定制化。 每一个异步操作都经过特殊的封装,内部只需要关心这个异步的执行过程。 链式(chain)调用,代码逻辑看起来比较清晰。 灵活的回调函数定制和参数传递。 统一处理单个异步操作的异常,也可根据需要单独处理某个任务的异常。 最简单的用法 简单实现基于oauth2授权获取用户基本资料的例子: // Authorizing based on oauth2 workflowStepify()     .step('getCode', function(appId, rUri) {         var root = this;         request.get('[authorize_uri]', function(err, res, body) {             root.done(err, JSON.parse(body).code);         });     }, [appId], [redirectUri])     .step('getToken', function(code) {         var root = this;         request.post('[token_uri]', function(err, res, body) {             root.done(err, JSON.parse(body).access_token);         });     })     .step('getInfo', function(token) {         request.get('[info_uri]?token='\u00a0 \u00a0token,\u00a0function(err,\u00a0res,\u00a0body)\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0//\u00a0got\u00a0user\u00a0info,\u00a0pass\u00a0it\u00a0to\u00a0client\u00a0via\u00a0http\u00a0response\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});\n\u00a0\u00a0\u00a0\u00a0})\n\u00a0\u00a0\u00a0\u00a0.run();\n\u591a\u4e2astep\u5171\u7528\u4e00\u4e2ahandle\u3001\u9759\u6001\u53c2\u6570\u3001\u52a8\u6001\u53c2\u6570\u4f20\u9012\u7684\u4f8b\u5b50\uff1a\nStepify()\n\u00a0\u00a0\u00a0\u00a0.step('read', __filename)     .step(function(buf) {         // buf is the buffer content of __filename         var root = this;         var writed = 'test.js';         // do more stuff with buf         // this demo just replace all spaces simply         buf = buf.toString().replace(/\s /g, '');         fs.writeFile(writed, buf, function(err) {             // writed is the name of target file,             // it will be passed into next step as the first argument             root.done(err, writed);         });     })     .
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值