1. 会签
简单描述:多人对同一任务进行审核,每人处理后方可结束此任务
曲折实现方式:用action-event方式创建新的任务实例
示意代码:ActionHandler的子类中(详细代码和图例见附件文)
会签人={z3,l4,w5}
TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance()
循环{
TaskInstance tasks = tmi.createTaskInstance(task, token);
tasks.setActorId(会签人[i]);
}
扩展点:方式1.添加“会签任务节点”,继承node,创建真正的会签节点(修改源码)
方式2.用流程设计器弥补,在界面上添加一个按钮为会签节点,实际上也是一个普通的节点,但是里面同时带上event和action同时设置create-tasks="false"(不修改源码)
2. 并发子流程
简单描述:同一个任务实例上,同时跑n个子流程,每个子流程均结束后,此任务实例方可结束
曲折实现方式:用fork-join方式
具体问题:虽然能够实现并发,也能等待所有子流程结束后,主流程才继流转,但难以将子流程和主流程绑定,由此而衍生出的问题:
1流程跟踪问题变得困难
2主流程任务结束后,子流程仍然继续流转
3子流程和主流程的参数传递问题
讨论点:1是否用fork-join的方式实现并发子流程,如果不用,什么用什么方式实现
2是否做成需要支持并发数量和并发的子流程哪一个不确定的动态并发(一个场景,修理汽车,检查哪里坏了( 主流程开始),1总体车的骨架修理(子),2轮胎修理(子),3汽车引擎修理等等子流程(子))那么其中任何一个子流程没有完成,汽车都没有修好。子流程结束以后,自然有两种状态(1修好了,2没有修好)
A根据以上的场景,由此衍生以后更加细致的需求,是不是每两车来都需要修理这个部件,如果答案是否定的,那么到底需要修理那些部件,是靠流程变量传值吗?如果是那么就不需要流程定义中定义三个子流程,而是动态的创建,
B.以轮胎为例,轮胎优良分上、中、下三种,到底换那一种呢?每个子流程可能需要的主流程传递参数,子流程结束后把参数传递给主流程
个人看法:1第一个版本在流程定义中写死,2对子流程的和主流程的之间的参数传递封装(抛砖引玉)
3. 回退
简单描述:此任务实例可以回退到上个任务实例,或者是上…上个任务实例
曲折实现方式:用流程的转向(transion)、决策(decision)、变量(various)
问题:这样做需要在流程定义中加入很多的链接线,和决策的判断。
扩展点:修改源码对任务实例加入一个聚集属性<可以回退的节点集合>
4. 退回
Jbpm一个任务的完成仅仅是用token的single方法,并没有执行结果,仅仅是对create,start,end 三个时间做了修改,在实际应用中,往往需要这个任务实例执行的结果,yes,还是no,同意还是不同意,0还是1,已经为什么这么选择所带的一个描述,或者是注释,或者叫意见也好
个人意见:将任务实例加入属性(执行结果(boolean),执行意见(string))
并且修改token令牌的single方法,根据执行结果这个属性决定继续流转还是驳回请求。其中驳回到哪个节点呢?直接让流程直接结束还是选择的处理呢?
5. 流程跟踪
根据一个任务实例实例id,知道整个流程中已经create的任务实例,目前关于子流程和主流程的情况,有些棘手,其他还好取到
6. 各种列表(分页)(任务,流程)
主要根据任务实例中的(create,start,end)来取值
待办(end==null),已办(end!=null),办结(流程实例中的end!=null),未签(start==null),已签(start!=null),
还有一个很重要的就是“我发起的任务”,表示这个流程由他发起的。例如,名叫张三的光棍要娶媳妇王二麻子为妻,需要走下面的流程
Jbpm的启动流程,干了2件大事,1流程实例表填一条数据,2流程定义中的开始任务创建,并结束,然后流转到找媒婆的任务节点,那么开始节点究竟做什么了呢?他并没有记录张三启动了流程,开始任务实例,你会发现在任务实例中也找不到。问题来了。。。回过头来,看看这个流程。。
张三想找媳妇儿,所以他启动流程。但是张三不一定非得自己去找媒人,可以让他的下人去帮他找个口才好的媒婆,假如是他的下人李四帮张三找了媒婆。那好,在任务实例这个表中,就生成了一条数据是李四找媒婆,结着,一切很顺利,流程一直走到张三取到王二麻子为妻了。
等他70岁时,他的孙子--张孙孙想听听他爷爷的故事,这时候,张三的记性不好,需要用咱们的流程的软件,这时候,他想就找到这个流程,输入自己名字想查自己发起娶媳妇的流程,却怎么也找不到,问题处在哪里?
加入开始节点也生成一个任务实例,并且指定参与者,上面的问题将不会困惑张孙孙和张三
个人意见:将开始节点普通化,可以找到自己发起的流程
曲折解决方案:流程定义中添加一个冗余节点,如下图:
流程定义服务组件
流程定义部署
支持以界面的方式实现流程定义文件(包括单个的xml文件及zip包)的上传,上传后直接部署至流程引擎服务器;
流程定义列表及查询
可以以列表的形式展示所有版本的流程定义,可以按照版本、名称等对流程定义进行查询
流程定义备份
可以对流程定义进行整体或分类进行备份,打包为zip文件
流程定义权限管理
可以对流程定义进行授权,哪些人对哪些流程定义具有管理权限、编辑权限等
7. 业务表单(表单和属性权限(隐藏、只读、可写))
流程表单,任务表单
在流程定义中加入form元素和role元素
见如下草图:
8. 组织机构
方式1.重新实现一套组织结构的机制,包括数据库,接口,实现类都算在jbpmside的工作中,客户端用的时候,根据他们自己的数据库中的组织关系进行数据同步
方式2.jbpmside只是提供一个接口,使用jbpmside的客户,根据自己的想用的组织结构的现状进行扩展(其中接口中具体需要那些方法,共同决定)
下面是一些额外的服务,暂时不做扩展
9. 时间调度
10.Log日志
11.邮件服务