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

QQ登录

只需一步,快速开始

查看: 33030|回复: 133

[结贴] 批量流转的问题

[复制链接]

146

主题

732

帖子

1101

积分

金牌会员

Rank: 6Rank: 6

积分
1101
QQ
发表于 2016-6-16 16:53:40 | 显示全部楼层 |阅读模式
如何实现批量流转呢?
在批量流转的过程中,根据流程的条件判断,有的数据流转后就结束了,有的数据还要流转到下一节点,如何在一键批量流转设置中自动分开处理呢?

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36092
发表于 2016-6-16 17:15:43 | 显示全部楼层
批量流转参考http://bbs.wex5.com/forum.php?mod=viewthread&tid=39581
批量流转执行的都是同一个操作,不能区分
如果要区分应该在流转之前区分,然后不同的task调用不同的API去执行流转还是结束流程
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



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

使用道具 举报

146

主题

732

帖子

1101

积分

金牌会员

Rank: 6Rank: 6

积分
1101
QQ
 楼主| 发表于 2016-6-20 10:30:57 | 显示全部楼层
这个文章是旧版本的语句,我是bex.5.3.4,想做流程的批量流转,不做批量启动
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36092
发表于 2016-6-20 10:36:40 | 显示全部楼层
3.4版本中都一样的,只是在获取组件和调用action注意使用3.4版本的API

发的链接中就有批量流转的
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



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

使用道具 举报

146

主题

732

帖子

1101

积分

金牌会员

Rank: 6Rank: 6

积分
1101
QQ
 楼主| 发表于 2016-6-20 10:56:59 | 显示全部楼层
本帖最后由 shuaigej 于 2016-6-20 11:00 编辑

标红的都是旧版本的,还有一些我不知道的,我看在帖子的回复中也是大家都在问新版的调用问题,但是没有回复。

实现步骤:
      1.  使用第个待办任务执行流转查询
            function batchAdvanceProcess(processID){
                   var p = justep.xbl(processID);
                   //使用其中的一条待办执行流转查询,并弹出流转对话框给用户修改,以得到control信息
                  p.advanceQueryExt(tasks[0]);
           }

     2.  用户可以看到流转对话框,修改其中的执行者信息
     3.  在process组件的onBeforeAdvance事件中,获取编辑后的流转信息,取消后续操作,调用后台的自定义的批流转动作(batchAdvanceProcessAction)
  
mainActivity.processBeforeAdvance = function(event){
        event.cancel = true; //取消后续操作

        //所有的待办按得到的control中的执行人进行流转
       var options = {};
       options.process = justep.Context.getCurrentProcess();
       options.activity = justep.Context.getCurrentActivity();
       options.action = "batchAdvanceProcessAction";
       options.directExecute = true;
       options.parameters = new justep.Request.ActionParam();
       var taskParam = new justep.Request.ListParam();
       for (var i=0; i<tasks.length; i++){
             taskParam.add(tasks);
       }
      options.parameters.setList("tasks", taskParam);
      var controlData = null;
      if (event.processControl.getDataType != undefined){
               //2000 sp2及之后的版本
            if (event.processControl.getDataType() == "json"){
                 options.contentType = "json";
                 controlData = event.processControl.getData();
            }else{
                options.contentType = "xml";
                controlData = event.processControl.getXMLString();
           }
     }else{
          //2000 sp2之前的版本
         options.contentType = "xml";
         controlData = event.processControl.getXMLString();
     }
    var controlParam = new justep.Request.ObjectParam(controlData, "com.justep.system.process.ProcessControl");
    options.parameters.setObject("control", controlParam);
    justep.Request.sendBizRequest2(options);

    justep.Portal.closeWindow();
};


     4. batchAdvanceProcessAction的定义可以参考附件中的内容,关键实现如下:
          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());
                      }
                 }
           }
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36092
发表于 2016-6-20 11:05:27 | 显示全部楼层
红色标注的就是我4楼说的啊,或者组件和调用aciton的

获取组件用this.comp("组件的xid")

调用action可以参考/UI2/demo/actions/process/invokeAction/mainActivity.w
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



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

使用道具 举报

146

主题

732

帖子

1101

积分

金牌会员

Rank: 6Rank: 6

积分
1101
QQ
 楼主| 发表于 2016-6-20 16:02:45 | 显示全部楼层
您写的太糙了,无法理解,标红为根本读不通的语句:
实现步骤:
      1.  使用第个待办任务执行流转查询
            function batchAdvanceProcess(processID){
                   var p = justep.xbl(processID);
                   //使用其中的一条待办执行流转查询,并弹出流转对话框给用户修改,以得到control信息
                  p.advanceQueryExt(tasks[0]);
           }
那些是control信息?

回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36092
发表于 2016-6-20 16:06:29 | 显示全部楼层
var p = justep.xbl(processID);
改为this.comp("process组件的xid")啊
第一步只是调用process组件的流转方法


第3步中的event.processControl就会获取processControl
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



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

使用道具 举报

146

主题

732

帖子

1101

积分

金牌会员

Rank: 6Rank: 6

积分
1101
QQ
 楼主| 发表于 2016-6-22 16:40:32 | 显示全部楼层
  options.activity =  justep.Context.getCurrentActivity();
我在.w的js文件里怎么获取呢?
这个批量只能在process里做么?
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36092
发表于 2016-6-22 17:00:02 | 显示全部楼层
this.getContext().getCurrentActivity()
这个是要在流转事件中操作,因为要获取processControl
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-19 02:19 , Processed in 0.094617 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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