OFBIZ流程操作使用过程
1 流程定义
一般用JaWe进行流程定义。根据查找的资料,使用JaWe生成的xpdl文件和workflow engine有少许不兼容的情况,摘抄总结如下:
1)JAWE生成DataFields会和ofbiz Implementation Tool里的ActualParameter冲突, 导致runtime data不能正常的获取, 如果你的Tool需要ActualParameter的话,直接输入即可,不需要把它定义成为workflow relevant data.
2)在Activity的TransitionRef部分, 由于FK的缘故,不能import到db
修改方法1: 注释掉 XpdlReader readTransitionRestriction 最后读取readTransitionRefs的代码(由于ofbiz workflow engine没有用到TransitionRefs, 故可以直接注释掉)
修改方法2:修改entity定义文件: WorkflowTransitionRef with WorkflowTransition's relationship type to "one-nofk"
3)在Activity的TransitionRestriction部分,如果Join/Split transition只有唯一情况,JAWE是不会生成定义Join/Split Type的
修改方法1:手工加上:<Join Type="XOR"/> <Split Type="XOR"/>
修改方法2:修改 XpdlReader 代码,使其默认为XOR
2流程装载
ofbiz提供页面来实现流程装载,如下:
图 流程装载
3 流程使用
ofbiz没有提供自己的工具来说明流程的使用方法,要求开发人员找到相应的api来调用;另外,ofbiz的orderMgr模块,使用了工作流引擎,但不是纯工作流引擎的应用,它包含了自己的独立的复杂的业务逻辑。
大致的流程使用步骤如下:
1)启动流程
首先,获取实体引擎和服务引擎,一般从页面的request中获取;然后,调用实体引擎新建工作流记录;最后,调用服务引擎启动流程。
2)获取工作列表
首先,用EntityExpr类构造约束List;然后,将约束List作为参数传递给实体引擎查找符合条件的记录;对于查找本部门的或本角色的或指定到本人的工作列表都采用同样的方法。
3)执行活动
首先,调用工作流引擎判断任务是否由该用户操作或是否已经被其他用户accept;其次,调用WorkflowClient类来获取流程实例号,定位流程;然后,调用实体引擎获取该流程实例号的数据;最后,按流程定义调用工作流引擎
获取活动信息并执行相应的活动。