Opentext Cordys BOP 4 平台数据库使用分析一则(在途流程)

本文探讨了在使用Cordys资费审批流程系统时,查询已办功能遇到异常提示的问题,并通过源JavaWebservice代码分析,结合数据库验证,最终解决了流程结束时初始化审批单时出现的弹出提示问题。

今天地市用户反馈新上线的资费审批流程系统中,查询已办功能发现异常提示。

这里写图片描述

如上图所示,点击“已办”中某条数据,如果流程已经结束,则在初始化审批单时,将出现弹出如下提示:

这里写图片描述

源Java Webservice代码如下:

    /**
     * 获取当前节点的属性以及赋值
     */
        if (instanceId != null && !"".equals(instanceId) && !"PARAMETER".equals(instanceId)) {
            queryAdminDataSql = "SELECT * FROM PROCESS_INSTANCE_DATA WHERE INSTANCE_ID = '" + instanceId + "'";
        } else {
          ......
        }
        String namespace = "http://schemas.cordys.com/bpm/monitoring/1.0";
        String methodName = "QueryAdminData";
        String datasetValue = "<dataset>" +
                "<constructor language=\"DBSQL\">" +
                "<query>" + queryAdminDataSql + "</query>" +
                "</constructor>" +
                "</dataset>";
        sro = new SOAPRequestObject(namespace, methodName, null, null);
        int dataset = 0;
        try {
            dataset = BSF.getXMLDocument().load(datasetValue.getBytes("utf-8"));
        } catch (UnsupportedEncodingException e2) {
          ....
        }
        sro.addParameterAsXml(dataset);
        int resultXml = 0;
        int currentActivityXml = 0;
        try {
            resultXml = sro.execute();
            String resultStr = Node.writeToString(resultXml, true);
            resultStr = resultStr.replaceAll("&lt;", "<").replaceAll("&gt;", ">").replaceAll("&quot;", "\"");
            resultXml = BSF.getXMLDocument().load(resultStr.getBytes("utf-8"));
            resultXml = XPath.getFirstMatch(".//*[local-name()='package']/*[local-name()='process']", null, resultXml);
            //如果手动传入环节id为start
            int currentNode = 0;
            if ("start".equalsIgnoreCase(activityId)) {
                currentNode = XPath.getFirstMatch("//action[@actionType='Start Event']", null, resultXml);
            } else {
                currentNode = XPath.getFirstMatch("//action[@id='" + activityId + "']", null, resultXml);
            }
            if (currentNode == 0) {
                result += "<resultFlag>false</resultFlag>";
                result += "<errorDetail>没有找到该环节,环节id:" + activityId + "</errorDetail>";
                result += "<analysisResult></analysisResult>";
                result += "</resultData>";
                int resultData = BSF.getXMLDocument().load(result.getBytes("utf-8"));
                return resultData;
            }

对于此用法,涉及到Cordys元数据存储规则,“在process_instance与process_instance_data表的关系上,如果流程结束了,process_instance_data表中将无此流程数据,或者说process_instance_data表只存储在途流程实例数据。”

打开Cordys平台数据库,验证分析结论,SQL语句如下:

SELECT * FROM `PROCESS_INSTANCE_DATA` where INSTANCE_ID in (SELECT INSTANCE_ID FROM `PROCESS_INSTANCE` where `STATUS` = 'COMPLETE');

验证结果是:流程实例状态为“COMPLETE”的数据,在PROCESS_INSTANCE_DATA表中不存在这些流程实例。如下图查询结果所示:
这里写图片描述

参考:
Cordys(C3)工作流办结流程数据迁移清理方案及实践 肖永威 2014.01

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肖永威

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值