⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 workflowutil.java

📁 这个是使用java开发的一个平台
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * 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 + -