中国的OA市场如果通过BPM实现,一般采用轻BO模式:流程流转控制数据在BPM内部保存,外部表单和应用系统与BPM引擎交互的时候,传入这些流程流转控制数据。外部表单和应用系统保存业务数据,表单提交直接提交到业务数据库。这样表单比较灵活,而且对于BPM引擎的压力较小。
两者直接的correlation id才用流程实例ID + Task实例ID + 业务数据主键ID 组合的方式。
例如,当一个任务创建,通过任务ID查询到外部系统,查询到其表单的url,用户在门户打开表单,填写数据,完成后提交数据到外部应用系统同时通过API完成该任务(task id)。
不过这个方案也带来相应的问题
1. 利用playback,进行联调带来了障碍
2. BPM和外部系统资产版本如何同步和对应
3. 额外安全认证
4. 两个独立系统的高可用和灾备
5. 两个系统交互带来的额外序列化和网络开销。
收起对于两个方案都在项目上运用过,有如下有问题:
在做待办任务列表的时候既需要显示A系统的业务数据,又需要显示bpm的工作流程信息,你怎么办?
如果bpm实现工作流程流转和控制之外,也保存业务数据,那bpm的中bo会很多,否则不能你进行条件搜索,当bo大于20后性能会严重降低,虽然ibm有工具竖表转横表
另外在bpm8.5及以下版本中中使用ldap的方案,用户有时会显示不出待办,同时你的用户没有从来在Portal中登录过,使用接口就会报错。
在bpm中没有相应的接口获取所有的用户的待办,或者已办信息,没法做流程监控,督办。
在做中国式的流程时,如果下一步的操作者由前一步指派,那用于使用条件表达式只能使用用户或组,不能同时是用户和组,当下一个节点的处理者要选择为部门和某几个用户时,标准功能根本不能做(顺便说一下,用team也是不可以的,team是静态的组,是开发时确定的,不是运行时确定)。
实现草稿功能也很恼火。
还有两个接口互相独立没有对应的功能:
在WebService中有通过流程名称获取流程信息,然后发起流程,在REST中就没有
在REST中有修改task组变量的方法,而在WebService中又没有。
还有当你需要你需要修改所有的BO时,你会发现,ibm文档上根本没有告诉你该怎么帮,问技术支持也不知道。
还有更多的坑等着各位,不说了,说多了都是泪。
收起