起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11313|回复: 25

[结贴] 关于流程批量审批的问题

[复制链接]

82

主题

339

帖子

1106

积分

金牌会员

Rank: 6Rank: 6

积分
1106
QQ
发表于 2018-8-23 22:41:36 | 显示全部楼层 |阅读模式
我以TaskCenter界面为基础做了批量流转的功能,都是按照案例复制过来的,但是选择两条及以上的流程流转时就会报“后续环节未指定执行者,请重新流转”的错误,应该是打开第一条流程的流转对话框后取得的后续环节执行者只对第一条流程起作用了,对后面的流程没有起作用,这是怎么回事?

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
35920
发表于 2018-8-24 08:54:53 | 显示全部楼层
http://docs.wex5.com/bex5-process-question-list-10028/
确认代码中添加执行者操作的正确吗?
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

82

主题

339

帖子

1106

积分

金牌会员

Rank: 6Rank: 6

积分
1106
QQ
 楼主| 发表于 2018-8-24 13:43:56 | 显示全部楼层
jishuang 发表于 2018-8-24 08:54
http://docs.wex5.com/bex5-process-question-list-10028/
确认代码中添加执行者操作的正确吗? ...

确认,Action都是直接复制粘贴的,js里processBeforeAdvance的代码也是复制的,只有按钮事件里稍微改了改,按道理也不可能有影响,会不会是TaskCenter里其他的代码有影响?
        Model.prototype.executeBtnClick = function(event) {
               
                var dataTables = this.comp("list");
                var p = this.comp("process");
                // 获取选择行的rowId
                var checkedIDs = dataTables.getCheckeds();
               
                if (checkedIDs.length == 0) {
                        justep.Util.hint("请选择要流转的流程!", {type: 'danger', parent: this.getRootNode()});
                        return;
                }
                else
                {
                        for (var i = 0; i < checkedIDs.length; i++)
                        {
                                this.tasks.push(checkedIDs.getID());
                        }
                       
                        // 使用其中的一条待办执行流转查询,并弹出流转对话框给用户修改,以得到control信息
                        p.advanceQueryExt(this.tasks[0]);                       
                }
        };

        Model.prototype.processBeforeAdvance = function(event){

           event.cancel = true; // 取消后续操作
         
            // 所有的待办按得到的control中的执行人进行流转
            var params = new biz.Request.ActionParam();
            var tasksParam = new biz.Request.ListParam();
         
            // 批量启动后直接批量流转
            for (var i = 0; i < this.tasks.length; i++) {
                tasksParam.add(this.tasks);
            }
            params.setList("tasks", tasksParam);
            var controlData = event.processControl.getData();
            var controlParam = new biz.Request.ObjectParam(controlData, "com.justep.system.process.ProcessControl");
            params.setObject("control", controlParam);
            biz.Request.sendBizRequest({
                "context" : this.getContext(),
                "action" : "batchAdvanceProcessAction",
                "directExecute" : true,
                "parameters" : params           
            });
            
            justep.Util.hint("流程批量流转成功!", {type: 'success', parent: this.getRootNode()});
            
            // 流程成功后关闭页面
            setTimeout(function() {
                this.close();
            }, 1);
        };
回复 支持 反对

使用道具 举报

82

主题

339

帖子

1106

积分

金牌会员

Rank: 6Rank: 6

积分
1106
QQ
 楼主| 发表于 2018-8-24 13:50:39 | 显示全部楼层
TaskCenter里面的taskData绑定的是queryTaskCenterAction,是不是取不到sa_task表的SID?
回复 支持 反对

使用道具 举报

82

主题

339

帖子

1106

积分

金牌会员

Rank: 6Rank: 6

积分
1106
QQ
 楼主| 发表于 2018-8-24 13:54:15 | 显示全部楼层
试了一下,取到的确实是sID啊,不知道问题出在哪了
回复 支持 反对

使用道具 举报

82

主题

339

帖子

1106

积分

金牌会员

Rank: 6Rank: 6

积分
1106
QQ
 楼主| 发表于 2018-8-24 13:55:11 | 显示全部楼层
这是Action的代码
        public static void batchAdvanceProcess(List<String> tasks, ProcessControl control){
               
                for (String task : tasks){
                ProcessControl cur = ProcessUtils.advanceProcessQuery(task);
                modifyFlowToExecutor(cur, control);
                modifyNoticeExecutor(cur, control);
                ProcessUtils.advanceProcess(task, cur);
            }
        }
         
        private static void modifyNoticeExecutor(ProcessControl cur, ProcessControl control){
            Iterator<ProcessControlItem> it = cur.getNotices().iterator();
            while (it.hasNext()){
                ProcessControlItem item = it.next();
                ProcessControlItem template = control.getNotice(item.getUnit());
                if (template == null){
                    it.remove();
                }else{
                    item.clearExecutors();
                    item.addExecutors(template.getExecutors());
                }
            }
        }
         
         
        private static void modifyFlowToExecutor(ProcessControl cur, ProcessControl control){
            Iterator<ProcessControlItem> it = cur.getFlowTos().iterator();
            while (it.hasNext()){
                ProcessControlItem item = it.next();
                ProcessControlItem template = control.getFlowTo(item.getUnit());
                if (template == null){
                    it.remove();
                }else{
                    item.clearExecutors();
                    item.addExecutors(template.getExecutors());
                }
            }
        }

        public static List<String> batchStartProcess(String process,List<String> datas){
               
                List<String> result = new ArrayList<String>();
            for (String data : datas){
                List<Map<String, String>> items = ProcessUtils.startProcess(process, null, data, null);
                
                if (items.size() != 1){
                    throw new RuntimeException("流程启动后必须有且只能有一个待办!");
                }
                
                String task = items.get(0).get("task");
                result.add(task);
            }
             
            return result;
        }
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
35920
发表于 2018-8-24 14:37:34 | 显示全部楼层
跟踪调试看看ProcessUtils.advanceProcess(task, cur);执行的时候里面的task和执行者正确吗?
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

82

主题

339

帖子

1106

积分

金牌会员

Rank: 6Rank: 6

积分
1106
QQ
 楼主| 发表于 2018-8-24 14:37:46 | 显示全部楼层
jishuang 发表于 2018-8-24 08:54
http://docs.wex5.com/bex5-process-question-list-10028/
确认代码中添加执行者操作的正确吗? ...

检查了很久,还是不知道问题出在哪。。。
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
35920
发表于 2018-8-24 15:02:46 | 显示全部楼层
java中加断点看7楼发的地址值是否正确啊
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

82

主题

339

帖子

1106

积分

金牌会员

Rank: 6Rank: 6

积分
1106
QQ
 楼主| 发表于 2018-8-24 15:17:59 | 显示全部楼层
jishuang 发表于 2018-8-24 15:02
java中加断点看7楼发的地址值是否正确啊

这是调试时报错的内容
Uncaught Error: __justepServerErrorStart__{"message":"后续环节未指定执行者,请重新流转","reason":"","code":"JUSTEP180360","stack":"java.lang.reflect.InvocationTargetException\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:497)\r\n\tat com.justep.system.action.Engine.invokeActions(Native Method)\r\n\tat com.justep.system.action.Engine.invokeActions(Unknown Source)\r\n\tat com.justep.business.server.BusinessServer.doAction(Unknown Source)\r\n\tat com.justep.business.server.BusinessServer.doExcute(Unknown Source)\r\n\tat com.justep.business.server.BusinessServer.excute(Unknown Source)\r\n\tat com.justep.business.server.BusinessServer.excute(Unknown Source)\r\n\tat com.justep.business.server.BusinessServerServlet.execService(Unknown Source)\r\n\tat com.justep.business.server.BusinessServerServlet.service(Unknown Source)\r\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:723)\r\n\tat com.justep.x.bs.BusinessServerServlet.service(Unknown Source)\r\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:723)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)\r\n\tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)\r\n\tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)\r\n\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)\r\n\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)\r\n\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)\r\n\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)\r\n\tat org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)\r\n\tat org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)\r\n\tat org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)\r\n\tat java.lang.Thread.run(Thread.java:745)\r\nCaused by: java.lang.reflect.InvocationTargetException\r\n\tat sun.reflect.GeneratedMethodAccessor159.invoke(Unknown Source)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:497)\r\n\tat com.justep.system.action.Engine.invokeAction(Native Method)\r\n\tat com.justep.system.action.Engine.invokeAction(Unknown Source)\r\n\tat com.justep.model.impl.UtilImplementInstance.invokeAction(Unknown Source)\r\n\tat com.justep.model.impl.UtilImplementInstance.invokeAction(Unknown Source)\r\n\tat com.justep.system.action.ActionUtils.invokeAction(Unknown Source)\r\n\tat com.justep.system.process.ProcessUtils.advanceProcess(Unknown Source)\r\n\tat PersonalApplication.batchAdvanceProcess(PersonalApplication.java:14)\r\n\t... 27 more\r\nCaused by: com.justep.system.util.BizSystemException: 编码: JUSTEP180360; 提示: 后续环节未指定执行者,请重新流转\r\n\tat com.justep.system.util.BizSystemException.create(Unknown Source)\r\n\tat com.justep.system.process.ProcessEngine.check(Unknown Source)\r\n\tat com.justep.system.process.ProcessEngine.commit(Unknown Source)\r\n\tat ProcessProcedure.advanceProcess(ProcessProcedure.java:355)\r\n\t... 37 more\r\n","messages":["编码: JUSTEP180360; 提示: 后续环节未指定执行者,请重新流转"],"url":"http://localhost:8080/BusinessServer/business-action","param":{"contentType":"json","accept":"application/json","process":"/RexinSystem/PersonalApplication/process/batchapproval/batchapprovalProcess","activity":"mainActivity","actionFlag":"__action_0__","executor":"","executeContext":"","action":"batchAdvanceProcessAction","parameters":{"tasks":["15B4D2A8640243E1B995354CC9BB7B38","8B0BAF4510574AC9B15B7F37B2426E79","AA37661FDDF3479480652C258E24E699"],"control":{"class":"com.justep.system.process.ProcessControl","object":{"@@tag":"process-control","customized-enabled":"false","dialog-enabled":"true","exts":{},"jump-enabled":"false","message":"","notice":[],"postscript":"","save-history":"true","status":"none","task-join":"false","task-join-mode":"tjmMultiple","to":[{"@activity-id":"E3FDE7492EBA448B9149A38C8AC0C875","@id":"E3FDE7492EBA448B9149A38C8AC0C875","@is-end":"false","@readonly":"false","@selected":"true","executor-kinds":"","executor-range":[{"@@tag":"org-unit","fid":"/ORG01.ogn/Rd693eWamMikAacDQfs.dpt/PfIe5EEn97ZJSpAOa0h.pos","fname":"/瑞信长材/公司领导/总经理","responsible":"false"}],"executors":[{"@@tag":"org-unit","fid":"/ORG01.ogn/Rd693eWamMikAacDQfs.dpt/PfIe5EEn97ZJSpAOa0h.pos/CXvLn1PSQMdyFfATm0o@PfIe5EEn97ZJSpAOa0h.psm","fname":"/瑞信长材/公司领导/总经理/王京瑶","responsible":false}],"exts":{},"process":"/RexinSystem/ContractAndFund/process/scbuycreate/scbuycreateProcess","task-assign-mode":"together","task-relation-value":{"@@tag":"task-relation-value","SA_Task":"4172B998EE7042F3AE0001D3BEB51C0A","sActivity":"businessActivity6","sActivityInTemplate":"businessActivity6","sActivityName":"新建分包合同(总经理)","sCURL":"/RexinSystem/ContractAndFund/process/scbuycreate/businessActivity5.a","sEURL":"/RexinSystem/ContractAndFund/process/scbuycreate/businessActivity6.a","sExecuteMode":"temPreempt","sLastModifyTime":"2018-08-24T15:08:40.406Z","sLock":"88F1292CF7AC48778A5C6120BE6C7E96","sName":"新建分包合同04-17153-601:总经理审批","sPreemptMode":"tpmOpen","sProcess":"/RexinSystem/ContractAndFund/process/scbuycreate/scbuycreateProcess","sProcessName":"新建分包合同","sProcessTemplateID2":"","sTypeName":"新建分包合同","sExecuteMode2":""},"template":"","unit":"businessActivity6"}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-5-3 06:44 , Processed in 0.107483 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表