|
楼主 |
发表于 2013-7-29 11:38:59
|
显示全部楼层
定义流程公共事件,回写业务数据
如果只有一个流程需要将流程的一些状态回写到业务数据中,那么这些代码应该写在该流程的事件中,如果同一模块(或者应用)下的流程都要回写,就应该在流程公共事件中回写业务数据,如果流程公共事件定义文件放在业务模块下,则这个业务模块下的流程都会执行这里面定义的事件,如果放在应用目录下,则整个应用里面的流程都会执行这里面定义的事件,
定义流程公共事件做法如下
1、在/BIZ/demo/misc/process目录下新增popProcessEvent.m文件,文件内容如下
<?xml version="1.0" encoding="utf-8"?>
<model xmlns="http://www.justep.com/model">
<procedure name="orderProcessAfterStartProcedure" code="OrderProcess.orderProcessAfterStart"/>
<listener action="startProcessAction" event="after" handler="orderProcessAfterStartProcedure"/>
<procedure name="orderProcessAfterStartProcedure" code="OrderProcess.orderProcessAfterStart"/>
<procedure name="orderProcessAfterAdvanceProcedure" code="OrderProcess.orderProcessAfterAdvance"/>
<listener action="advanceProcessAction" event="after" handler="orderProcessAfterAdvanceProcedure"/>
</model>
这里面定义了两个流程公共事件,一个是启动流程之后事件,另一个是流转之后事件
2、在/BIZ/demo_X/misc/process目录下新增model.config.xml文件,文件内容如下
<?xml version="1.0" encoding="utf-8"?>
<model xmlns="http://www.justep.com/model">
<use>/system/logic/action</use>
</model>
3、在/BIZ/demo_X/misc/process目录下,新建dsrc目录,在dsrc目录下新建OrderProcess.java文件,文件内容如下- import com.justep.system.context.ContextHelper;
- import com.justep.system.data.KSQL;
- import com.justep.system.opm.OrgUnit;
- import com.justep.system.process.ProcessControl;
- import com.justep.system.process.ProcessControlItem;
- import com.justep.system.process.ProcessUtils;
- import com.justep.system.util.CommonUtils;
- public class OrderProcess {
- public static void orderProcessAfterStart() {
- System.out.println("启动了pop");
- updateBizRecord();
- }
-
- public static void orderProcessAfterAdvance() {
- System.out.println("流转了pop");
- updateBizRecord();
- }
-
- public static void updateBizRecord() {
- String sExecutorNames = "", sActivityNames = "", sStatus;
- if (!ProcessUtils.isFlowToEnd()) {
- ProcessControl flowControl = (ProcessControl)ContextHelper.getActionContext().getParameter("control");
- for (ProcessControlItem to : flowControl.getFlowTos()) {
- for (OrgUnit ect : to.getExecutors()) {
- sExecutorNames = sExecutorNames + CommonUtils.getNameOfFile(ect.getFName()) + " ";
- }
- sActivityNames = to.getTask().getActivityName();
- }
- sStatus = "审批中";
- }else{
- sStatus = "已完成";
- }
- String key = ProcessUtils.getProcessData1();
- String sConceptName = ProcessUtils.getProcessData2();
- String sDataModel = ProcessUtils.getProcessData3();
- String ksql = "update " + sConceptName + " a set a.fAuditor='" + sExecutorNames + "',a.fExamine='" + sActivityNames
- + "',a.fPicture='" + sStatus + "' where a='" + key +"'";
- KSQL.executeUpdate(ksql, null, sDataModel, null);
- }
复制代码 实现更新业务数据,需要知道业务数据的概念、ID及数据模块,因此使用sData2存放业务数据的概念,使用sData3存放数据模块,再加上系统自动将业务数据ID存入sData1,通过在启动规则中设置sData2和sData3就可以实现更新业务数据了。
启动规则的设置如下
|
|