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

📄 workflowutil.java

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