📄 workflowutil.java
字号:
/*
* Created on 2005-8-5
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package com.exp.integration.osworkflow.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import com.exp.dao.DBCommand;
import com.exp.dao.DBConnection;
import com.exp.dao.DBConnectionFactory;
import com.exp.dao.EXPSQLException;
import com.exp.fcl.configs.ConfigUtil;
import com.exp.fcl.syscfg.SystemConfig;
import com.exp.fcl.util.StringUtil;
import com.exp.fcl.vo.CommonVO;
import com.exp.fcl.vo.VOList;
import com.exp.fcl.xml.EXPXMLDocument;
import com.exp.fcl.xml.EXPXMLNode;
import com.exp.integration.osworkflow.EXPOSWorkflow;
import com.exp.integration.osworkflow.EXPOSWorkflowImp;
import com.exp.integration.osworkflow.OSWorkFlowDBConfigUtil;
import com.opensymphony.module.propertyset.PropertySet;
import com.opensymphony.workflow.InvalidActionException;
import com.opensymphony.workflow.InvalidRoleException;
import com.opensymphony.workflow.Workflow;
import com.opensymphony.workflow.config.DefaultConfiguration;
import com.opensymphony.workflow.loader.ActionDescriptor;
import com.opensymphony.workflow.loader.WorkflowDescriptor;
import com.opensymphony.workflow.spi.Step;
import com.opensymphony.workflow.spi.WorkflowEntry;
/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to Window -
* Preferences - Java - Code Style - Code Templates
*/
public class WorkFlowUtil {
/**
* 得到流程引擎接口
*
* @param userName
* 当前用户名
* @return
*/
public static EXPOSWorkflow getWorkFlow(String userName) {
EXPOSWorkflow wf = new EXPOSWorkflowImp(userName);
wf.setConfiguration(new DefaultConfiguration() {
protected InputStream getInputStream(URL url) {
String config = SystemConfig.getConfigPath() + "workflows"
+ File.separator + "osworkflow.xml";
try {
return new FileInputStream(config);
} catch (Exception e) {
}
try {
return super.getInputStream(new File(config).toURL());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
});
return wf;
}
/**
* 启动流程
*
* @param userName
* 当前用户名
* @param wfName
* 流程名称
* @param args
* 启动参数
* @return 流程实例ID
* @throws Exception
*/
public static long start(String userName, String wfName, Map args)
throws Exception {
return start(userName, wfName, args, null);
}
/**
* 启动流程
*
* @param userName
* 当前用户名
* @param wfName
* 流程名称
* @param args
* 启动参数
* @param bizDatas
* 业务数据
* @return 流程实例ID;-1 当前用户无权限访问;-2 流程配置错误
* @throws Exception
*/
public static long start(String userName, String wfName, Map args,
Map bizDatas) throws Exception {
EXPOSWorkflow wf = getWorkFlow(userName);
wf.openSession();
long ret = -1;
try {
wf.beginTran();
int startActionID = 0;
WorkFlowBizConfig bizConfig = WorkFlowBizConfig
.getWorkFlowConfig(wfName);
if (bizConfig != null) {
startActionID = bizConfig.getStartActionID();
}
long id = wf.initialize(wfName, startActionID, args);
if (bizDatas == null) {
bizDatas = new HashMap();
}
bizDatas.put("render", userName);
PropertySet ps = wf.getPropertySet(id);
Iterator items = bizDatas.keySet().iterator();
while (items.hasNext()) {
Object key = items.next();
String value = bizDatas.get(key).toString();
ps.setString(key.toString(), value);
}
wf.commit();
ret = id;
} catch (InvalidRoleException irE) {
ret = -1;
wf.rollback();
} catch (InvalidActionException iaE) {
ret = -2;
wf.rollback();
} catch (Exception e) {
wf.rollback();
throw e;
} finally {
wf.closeSession();
}
return ret;
}
/**
* 得到当前流程实例、当前actionid对应的Form页面的URL
*
* @param wf
* 可用工作流引擎接口
* @param wfId
* 流程实例ID
* @param actionID
* 当前actionid
* @return 如果不存在,则返回null
*/
public static String getActionUrl(Workflow wf, long wfId, int actionID) {
String wfName = wf.getWorkflowName(wfId);
if (wfName != null) {
WorkFlowBizConfig bizConfig = WorkFlowBizConfig
.getWorkFlowConfig(wfName);
if (bizConfig != null) {
return bizConfig.getActionUrl(actionID);
}
}
return null;
}
/**
* 执行ACTION
*
* @param userName
* 当前用户名
* @param wfID
* 流程实例ID
* @param actionID
* @param args
* 执行参数
* @param bizDatas
* 业务数据,业务数据会保存到当前流程实例的属性集中
* @throws Exception
*/
public static void doAction(String userName, long wfID, int actionID,
Map args, Map bizDatas) throws Exception {
EXPOSWorkflow wf = getWorkFlow(userName);
wf.openSession();
try {
wf.beginTran();
wf.doAction(wfID, actionID, args);
if (bizDatas != null) {
PropertySet properties = wf.getPropertySet(wfID);
Iterator items = bizDatas.keySet().iterator();
while (items.hasNext()) {
Object key = items.next();
String value = bizDatas.get(key).toString();
properties.setString(key.toString(), value);
}
}
wf.commit();
} catch (Exception e) {
wf.rollback();
throw e;
} finally {
wf.closeSession();
}
}
/**
* 执行ACTION
*
* @param userName
* 当前用户名
* @param wfID
* 业务流程实例
* @param actionID
* @param args
* 执行参数
* @throws Exception
*/
public static void doAction(String userName, long wfID, int actionID,
Map args) throws Exception {
EXPOSWorkflow wf = getWorkFlow(userName);
wf.openSession();
try {
wf.beginTran();
wf.doAction(wfID, actionID, args);
wf.commit();
} catch (Exception e) {
wf.rollback();
throw e;
} finally {
wf.closeSession();
}
}
/**
* 执行ACTION
*
* @param userName
* 当前用户
* @param wfID
* 流程实例ID
* @param actionID
* @param args
* 执行参数
* @param orderID
* 业务单据号
* @throws Exception
*/
public static void doAction(String userName, long wfID, int actionID,
Map args, String orderID) throws Exception {
EXPOSWorkflow wf = getWorkFlow(userName);
wf.openSession();
try {
wf.beginTran();
wf.doAction(wfID, actionID, args);
if (!"".equals(orderID)) {
PropertySet properties = wf.getPropertySet(wfID);
properties.setString("orderid", orderID);
}
} catch (Exception e) {
wf.rollback();
throw e;
} finally {
wf.closeSession();
}
}
/**
* 得到与当前流程实例关联的业务单据号
*
* @param wf
* 可用的业务流程引擎接口
* @param wfID
* 流程实例号
* @return
*/
public static String getOrderID(Workflow wf, long wfID) {
PropertySet properties = wf.getPropertySet(wfID);
return properties.getString("orderid");
}
/**
* 得到todolist
*
* @param userName
* @return VOList:wfname;wfid;actionname;actionid;handler;orderid
*/
public static VOList getTodoList(String userName, Map userAttributes)
throws Exception {
EXPOSWorkflow wf = WorkFlowUtil.getWorkFlow(userName);
wf.openSession();
try {
Properties props = OSWorkFlowDBConfigUtil.getOsworkfProps();
String entityTable = props.getProperty("entry.table");
String id_field = props.getProperty("entry.id");
String name_field = props.getProperty("entry.name");
String state_field = props.getProperty("entry.state");
DBConnection con = wf.getConnection();
DBCommand cmd = con.buildCommand();
StringBuffer buf = new StringBuffer();
buf.append("select * from ");
buf.append(entityTable);
buf.append(" where ");
buf.append(state_field);
buf.append("<=1");
cmd.addSQL(buf.toString());
VOList entities = new VOList();
cmd.executeQuery(entities);
int size = entities.count();
VOList lst = new VOList();
for (int j = 0; j < size; j++) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -