package com.vci.server.workflow.event;
|
|
import org.jbpm.api.listener.EventListenerExecution;
|
|
import com.vci.corba.omd.data.BusinessObject;
|
import com.vci.corba.omd.lcm.TransitionVO;
|
import com.vci.server.base.utility.ServerServiceProvider;
|
|
|
/// 返回编制中状态
|
public class ReturnEditingStatus extends TransferStatus {
|
|
private static final long serialVersionUID = -8416047141287575412L;
|
|
/**
|
* 返回是否是流程终止而触发当前事件
|
* @param e
|
* @return
|
*/
|
protected boolean isIntermitting(EventListenerExecution e){
|
boolean res = false;
|
String intermit = (String) e.getProcessInstance().getVariable("intermit");
|
// 平台规则:当全仅当 intermit 的值等于true时,才代表是执行‘流程中止’
|
if(intermit != null && !"".equals(intermit) && "true".equals(intermit)){
|
res = true;
|
}
|
return res;
|
}
|
|
@Override
|
public void doEvent(EventListenerExecution e) throws Exception {
|
// 普通跃迁事件,当且仅当是非‘流程终止’时才执行
|
if(isIntermitting(e)){
|
doEventDetail(e);
|
}
|
}
|
|
|
protected void doEventDetail(EventListenerExecution e) throws Exception{
|
// 设置目标跃迁状态
|
setTargetStatus("Editing");
|
|
// 取出流程里关联的数据
|
BusinessObject[] bos = super.getBusinessObjects();
|
// 取出生命周期名称
|
String lcName = bos[0].lctId;
|
// 构建跃迁数据
|
TransitionVO[] vos = new TransitionVO[bos.length];
|
String[] releaseStatus = new String[bos.length];
|
|
String tagStatus = getTargetStatus();//"Editing";
|
|
for (int i = 0; i < bos.length; i++) {
|
TransitionVO targetTVO = getTransitionVO(lcName, bos[i].lcStatus, tagStatus);
|
if(targetTVO == null){
|
throw new IllegalArgumentException("跃迁业务对象生命周期状态异常:'targetStatus' 的参数值 '" + tagStatus + "' 无效,在生命周期 '" + lcName + "' 里不存在。" +
|
" 或者是生命周期里从 '" + bos[i].lcStatus + "' 到 '" + tagStatus + "' 之间的连线不存在,无法进行跃迁!");
|
}
|
vos[i] = targetTVO;
|
// 设置发发布状态值,此事件里值为空(即,不发布,仅做跃迁
|
releaseStatus[i] = "";
|
}
|
|
// 执行跃迁及发布
|
ServerServiceProvider.getBOFService().batchTransferBusinessObjectAndRelease(bos, vos, releaseStatus);
|
}
|
}
|