startprocesscontrol.java
来自「公司自己开发的工作流引擎」· Java 代码 · 共 169 行
JAVA
169 行
package cn.com.iaspec.workflow.engine.business;
import cn.com.iaspec.workflow.vo.workflow.StartedProcessInfo;
import cn.com.iaspec.workflow.vo.workflow.UserInfo;
import com.sunyard.sunflow.client.SunflowClient;
import cn.com.iaspec.workflow.vo.workflow.WorkflowSession;
import com.sunyard.sunflow.engine.context.WorkItemContextCollection;
import com.sunyard.sunflow.engine.context.ProcessDefinitionContext;
import com.sunyard.sunflow.engine.context.WorkItemContext;
import cn.com.iaspec.workflow.util.GetTableSequenceId;
import cn.com.iaspec.workflow.vo.db.WfPublicProjectInfo;
import cn.com.iaspec.workflow.engine.dao.WfPublicProjectInfoDAO;
import cn.com.iaspec.workflow.vo.workflow.ProcessRelevantVar;
import com.sunyard.sunflow.engine.dataclass.WMTAttribute;
import java.util.*;
import java.util.Iterator;
/**
* 启动工作流
* <p>Title: 启动工作流</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: IASPEC Technologies</p>
* @author xiesonglin
* @version 1.0
*/
public class StartProcessControl{
public StartProcessControl(){
}
/**
* 根据工作流流程定义id启动工作流
* @param processDefineId long 流程定义id
* @param businessName String 业务名称
* @param businessType String 业务类型
* @param userInfo UserInfo
* @param ArrayList prcesseVars 需要修改的流程变量
* @return StartedProcessInfo 工作流启动返回信息
*/
public StartedProcessInfo createAndStartProcess(long processDefineId,
String businessName,String businessType,UserInfo userInfo,ArrayList prcoesseVars)
throws Exception{
if(processDefineId==0){
throw new Exception("工作流定义id为空。");
}
SunflowClient sunflowClient=WorkflowSession.getSunflowClient(userInfo);
long procInstId=0;
long workitemId=0;
String workitemName="";
String workitemURL="";
StartedProcessInfo info=new StartedProcessInfo();
try{
ProcessDefinitionContext proCtx=sunflowClient.findProcessDefinition(
processDefineId);
//通过指定的流程定义ID来创建一个流程实例,返回一个流程实例ID
procInstId=sunflowClient.createProcessInstance(processDefineId,
proCtx.getDefinitionName(),"");
//修改流程实例相关的流程变量
WMTAttribute[] attrs=sunflowClient.getProcessRelevantData(procInstId,null);
Iterator it=prcoesseVars.iterator();
while(it.hasNext()){
ProcessRelevantVar processVar=(ProcessRelevantVar)it.next();
for(int i=0;i<attrs.length;i++){
if(attrs[i].getAttributeName().equals(processVar.getVarName())){
attrs[i].setStringValue(processVar.getVarValue());
break;
}
}
}
sunflowClient.modifyProcessInstanceRelevantData(procInstId,attrs);
//启动流程实例
long activityInstanceId=0;
sunflowClient.startProcess(procInstId);
WorkItemContextCollection workItemCollection=sunflowClient.
listWorkitemByProInstID(procInstId);
//根据流程实例ID取得当前实例的所有工作项
for(int i=0;i<workItemCollection.size();i++){
WorkItemContext workItem=(WorkItemContext)workItemCollection.get(i);
//取得状态为1的工作项ID
if(workItem.getState()==1){
workitemId=workItem.getWorkItemID();
workitemName=workItem.getWorkItemName();
workitemURL=workItem.getDescription();
activityInstanceId=workItem.getActivityInstanceID();
System.out.println("******** workitemId="+workitemId+" workitemName="+workitemName+" workitemURL="+workitemURL+" activityInstanceId"+activityInstanceId);
//只取得第一个工作项
break;
}
}
WfPublicProjectInfo prjInfo=new WfPublicProjectInfo();
long projectId=Long.parseLong(GetTableSequenceId.getTableId(
"wf_public_project_info"));
System.out.println("********1111 workitemId="+workitemId+" workitemName="+workitemName+" workitemURL="+workitemURL+" activityInstanceId"+activityInstanceId);
prjInfo.setPrjBussName(businessName);
prjInfo.setPrjBussType(businessType);
prjInfo.setPrjCreateDate(new java.util.Date());
prjInfo.setPrjCreateUserId(userInfo.getUserId());
prjInfo.setPrjTitle("");
prjInfo.setProjectId(projectId);
//初始化状态
prjInfo.setPrjState("init");
//保存数据
WfPublicProjectInfoDAO dao=new WfPublicProjectInfoDAO();
dao.insert(prjInfo);
System.out.println("********2222 workitemId="+workitemId+" workitemName="+workitemName+" workitemURL="+workitemURL+" activityInstanceId"+activityInstanceId);
TimeLimitControl timeControl=new TimeLimitControl();
//保存流程办理时限信息
timeControl.insertProcessTimeLimitInfo(procInstId);
//保存活动办理时限信息
timeControl.insertActivityInstanceTimeLimitInfo(activityInstanceId);
System.out.println("********3333 workitemId="+workitemId+" workitemName="+workitemName+" workitemURL="+workitemURL+" activityInstanceId"+activityInstanceId);
//设置返回信息
info.setBusinessName(businessName);
info.setBusinessType(businessType);
info.setProcessDefineId(processDefineId);
info.setProcessInstanceId(procInstId);
info.setProcessName(proCtx.getDefinitionName());
info.setProjectId(projectId);
info.setWorkitemId(workitemId);
info.setWorkitemName(workitemName);
info.setWorkitemURL(workitemURL);
System.out.println("******** workitemId="+info.getWorkitemId()+" workitemName="+info.getWorkitemName()+" workitemURL="+info.getWorkitemURL()+" activityInstanceId"+info.getProcessInstanceId());
return info;
//取得当前工作项信息
}
finally{
WorkflowSession.deleteSunflowClient(userInfo);
}
}
/**
* 根据工作流流程定义名称启动工作流
* @param processDefineName String 流程定义名称
* @param businessName String 业务名称
* @param businessType String 业务类型
* @param userInfo UserInfo
* @return StartedProcessInfo 工作流启动返回信息
*/
public StartedProcessInfo createAndStartProcess(String processDefineName,
String businessName,String businessType,UserInfo userInfo,ArrayList prcesseVars)
throws Exception{
SunflowClient sunflowClient=WorkflowSession.getSunflowClient(userInfo);
try{
long processDefineId=0;
//取得工作流定义id
ProcessDefinitionContext proCtx=sunflowClient.findProcessDefinitionByName(
processDefineName);
if(proCtx!=null){
processDefineId=proCtx.getProDefinitionID();
}
else{
throw new Exception("找不到流程名称为“"+processDefineName+"”的流程。");
}
//根据工作流流程定义id启动工作流
return createAndStartProcess(processDefineId,businessName,businessType,
userInfo,prcesseVars);
}
finally{
WorkflowSession.deleteSunflowClient(userInfo);
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?