📄 workflowutil.java
字号:
CommonVO entity = entities.get(j);
long wfId = entity.getLong(id_field);
PropertySet ps = wf.getPropertySet(wfId);
String wfName = entity.getString(name_field);
int[] actions = wf.getAvailableActions(wfId, userAttributes);
if (actions != null && actions.length > 0) {
WorkflowDescriptor wd = wf.getWorkflowDescriptor(wfName);
for (int i = 0; i < actions.length; i++) {
String name = wd.getAction(actions[i]).getName();
CommonVO vo = new CommonVO();
vo.setString("wfname", wfName);
vo.setString("wfid", "" + wfId);
vo.setString("render", ps.getString("render"));
vo.setString("actionname", name);
vo.setString("actionid", "" + actions[i]);
vo.setString("handler", WorkFlowUtil.getActionUrl(wf,
wfId, actions[i]));
vo.setString("orderid", WorkFlowUtil.getOrderID(wf,
wfId));
lst.add(vo);
}
}
}
return lst;
} finally {
wf.closeSession();
}
}
/**
* 得到已发布流程列表
*
* @param userName
* @return VOList:name 流程名称
*/
public static VOList getWorkFlows(String userName) {
Workflow wf = WorkFlowUtil.getWorkFlow(userName);
String[] wfs = wf.getWorkflowNames();
VOList lst = new VOList();
for (int i = 0; i < wfs.length; i++) {
if (true) {//wf.canInitialize(wfs[i], 1)
CommonVO vo = new CommonVO();
vo.setString("name", wfs[i]);
lst.add(vo);
}
}
return lst;
}
/**
* 查询流程运行信息
*
* @param wfid
* 流程实例id,如果为-1,则不作查询
* @param wfName
* 流程实例名称
* @param status
* 流程状态,如果为-1,则不作查询;0 created,1 actived,2 挂起,3 删除 4 结束
* @return VOList:wfid,wfname,state,status:状态中文表示
* @throws EXPSQLException
*/
public static VOList queryWFInstances(long wfid, String wfName, int status)
throws EXPSQLException {
Properties props = OSWorkFlowDBConfigUtil.getOsworkfProps();
String ds = props.getProperty("datasource");
DBConnection dbConnection = DBConnectionFactory.createDBConnection(ds);
try {
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");
StringBuffer sql = new StringBuffer();
sql.append("select ");
sql.append(id_field);
sql.append(" as wfid,");
sql.append(name_field);
sql.append(" as wfname,");
sql.append(state_field);
sql.append(" as state");
sql.append(" from ");
sql.append(entityTable);
if (wfid != -1) {
sql.append(" where ");
sql.append(id_field);
sql.append("=");
sql.append(wfid);
} else {
if (!"".equals(wfName)) {
sql.append(" where ");
sql.append(name_field);
sql.append(" like '%");
sql.append(wfName);
sql.append("%'");
if (status != -1) {
sql.append(" and ");
sql.append(state_field);
sql.append("=");
sql.append(status);
}
} else if (status != -1) {
sql.append(" where ");
sql.append(state_field);
sql.append("=");
sql.append(status);
}
}
DBCommand cmd = dbConnection.buildCommand();
cmd.addSQL(sql.toString());
VOList lst = new VOList();
cmd.executeQuery(lst);
int size = lst.count();
for (int i = 0; i < size; i++) {
CommonVO vo = lst.get(i);
int state = vo.getInteger("state");
String status_label = "";
switch (state) {
case 0:
status_label = "已创建";
break;
case 1:
status_label = "已激活";
break;
case 2:
status_label = "挂起";
break;
case 3:
status_label = "已停止";
break;
case 4:
status_label = "已结束";
break;
default:
status_label = "未知";
}
vo.setString("status", status_label);
}
return lst;
} finally {
dbConnection.close();
}
}
/**
* 得到流程实例的运行时信息
*
* @param userName
* 当前用户名
* @param wfid
* 流程实例id
* @return VOList:wfname,step_name,step_id,status,owner,caller, <BR>
* action,start_time,finish_date,pre_steps,confirm,message
* @throws Exception
*/
public static VOList getWFRuntimeInfo(String userName, long wfid)
throws Exception {
EXPOSWorkflow wf = WorkFlowUtil.getWorkFlow(userName);
wf.openSession();
try {
PropertySet ps = wf.getPropertySet(wfid);
String wfName = wf.getWorkflowName(wfid);
WorkflowDescriptor wd = wf.getWorkflowDescriptor(wfName);
ArrayList steps = new ArrayList();
steps.addAll(wf.getCurrentSteps(wfid));
steps.addAll(wf.getHistorySteps(wfid));
VOList lst = new VOList();
for (Iterator iterator = steps.iterator(); iterator.hasNext();) {
Step step = (Step) iterator.next();
String owner = step.getOwner();
String caller = step.getCaller();
ActionDescriptor action = wd.getAction(step.getActionId());
CommonVO vo = new CommonVO();
vo.setString("wfname", wfName);
vo.setString("step_name", wd.getStep(step.getStepId())
.getName());
vo.setLong("step_id", step.getStepId());
String status = step.getStatus();
if ("Queued".equalsIgnoreCase(status)) {
vo.setString("status", "进行中");
} else if ("Finished".equalsIgnoreCase(status)) {
vo.setString("status", "已完成");
} else {
vo.setString("status", "等待");
}
vo.setString("owner", owner);
vo.setString("caller", caller);
vo.setString("action", action == null ? "" : action.getName());
Date dt = step.getStartDate();
if (dt != null)
vo.setString("start_date", dt.toString());
dt = step.getFinishDate();
if (dt != null)
vo.setObject("finish_date", dt.toString());
long[] prevIds = step.getPreviousStepIds();
String temp = "";
if (prevIds != null) {
for (int i = 0; i < prevIds.length; i++) {
temp += prevIds[i] + ";";
}
}
vo.setString("pre_steps", temp);
int actionID = step.getActionId();
String confirm = ps.getString(actionID + ".confirm");
if (confirm != null) {
vo.setString("confirm", "1".equals(confirm) ? "通过" : "不通过");
String msg = ps.getString(actionID + ".message");
if (msg != null) {
vo.setString("message", msg);
}
}
lst.add(vo);
}
return lst;
} finally {
wf.closeSession();
}
}
/**
* 停止当前流程实例
*
* @param userName
* 当前用户名
* @param wfid
* 流程实例id
* @return 1 成功;0 您不能停止,因为该流程不是你发起
* @throws Exception
*/
public static int kill(String userName, long wfid) throws Exception {
EXPOSWorkflow wf = WorkFlowUtil.getWorkFlow(userName);
wf.openSession();
try {
PropertySet ps = wf.getPropertySet(wfid);
String render = ps.getString("render");
if (userName.equals(render)) {
wf.changeEntryState(wfid, WorkflowEntry.KILLED);
return 1;
} else {
return 0;
}
} finally {
wf.closeSession();
}
}
}
class WorkFlowBizConfig {
protected WorkFlowBizConfig() {
}
public void parse(EXPXMLNode wfNode) {
String id = wfNode.getAttributeValue("start-action");
if (!"".equals(id)) {
this.startAction = id;
}
EXPXMLNode actions = wfNode.getChildNode("action-urls");
if (actions != null) {
int count = actions.getChildNodesCount();
for (int i = 0; i < count; i++) {
EXPXMLNode actionNode = actions.getChildNode(i);
String handleUrl = "actionhandle.jsp";
EXPXMLNode handleNode = actionNode.getChildNode("handle");
if (handleNode != null) {
handleUrl = handleNode.getNodeValue();
}
EXPXMLNode viewNode = actionNode.getChildNode("view");
if (viewNode != null) {
if (handleUrl.indexOf("?") > 0) {
if (!handleUrl.endsWith("&"))
handleUrl += "&";
} else {
handleUrl += "?";
}
String view = viewNode.getNodeValue();
if (view.indexOf("?") < 0) {
view += "?dual=dual";
}
handleUrl += "view=" + StringUtil.URLEncoding(view);
} else {
if (handleUrl.indexOf("?") < 0) {
handleUrl += "?dual=dual";
}
}
this.actionUrls.put(actionNode.getAttributeValue("id"),
handleUrl);
}
}
}
protected Map actionUrls = new HashMap();
protected String startAction = "0";
public int getStartActionID() {
return Integer.valueOf(startAction).intValue();
}
public String getActionUrl(int actionID) {
return (String) actionUrls.get("" + actionID);
}
public static WorkFlowBizConfig getWorkFlowConfig(String wfName) {
EXPXMLDocument document = ConfigUtil
.getXMLConfig("workflows/workflow-bizconfig.xml");
if (document != null) {
EXPXMLNode root = document.getRoot();
EXPXMLNode wfNode = root.getChildNode(wfName);
if (wfNode != null) {
WorkFlowBizConfig config = new WorkFlowBizConfig();
config.parse(wfNode);
return config;
} else {
System.out.println(wfName + " is not found");
}
} else {
System.out.println("document is null");
}
return null;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -