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

QQ登录

只需一步,快速开始

查看: 1570|回复: 7

[结贴] 单据流转时查找下一环节出现2条记录

[复制链接]

46

主题

189

帖子

1218

积分

金牌会员

Rank: 6Rank: 6

积分
1218
QQ
发表于 2014-1-20 09:48:08 | 显示全部楼层 |阅读模式
版本: 小版本号:
数据库: 服务器操作系统: 应用服务器:
客户端操作系统: 浏览器:
本帖最后由 lxl8611 于 2014-1-20 09:49 编辑

我做了一个要走流程的单据,可是在流转过程中,界面上出现2条流程人记录:
数据库读出来的流程数据是正确的:
当前是在第2环节要流转到第3环节
控制台报错:
  1. CLIENTACCOUNT:QIAODAN
  2. BIZORIGN:qiaodan
  3. DeptId:590E1F1C5836407984263C431F913402
  4. PERID:AD99AD758C214EFEA97280BDF70B7A7D
  5. BizKind:kqOvertimeApply
  6. FBizGUID:48278EC78DFB4FEFAEA73889992AE6F8
  7. CREATEPOSLEV:10
  8. AuditKind:akAudit,akVerify
  9. PARAMKIND:pkRegion,pkRegion
  10. PARAMVALUE:5,5
  11. AndoOrStr:aoAnd,aoAnd
  12. 执行FlowOut存储过程
  13. 执行FN函数 是否需继续审批
  14. FCurActivityID=akAudit60
  15. IndexI=1
  16. 是否需继续审批结果:false
  17. 执行FN函数 是否需继续审批
  18. FCurActivityID=akAudit60
  19. IndexI=1
  20. 是否需继续审批结果:false
  21. 流程审批总记录数:3
  22. 当前任务GUID: 8A5F3C93A833481C85C380FC9707C2C7
  23. sql:select  count(*) as FRowCount  from SA_TaskRelation where sTaskID2 = '8A5F3C93A833481C85C380FC9707C2C7'
  24. 任务关联表记录数:1
  25. 当前环节ID:加班单审批
  26. 不是首环节
  27. 审批环节执行者列表个数:1
  28. 后续可能流转的环节数不能大于1
  29. 下一个环节:akProcess20
复制代码
我发现,在这个过程中,flowControl取出了2条数据,不知道为什么,麻烦帮忙看一下:
  1. public static void getFlowExecutor(List<Object> list,String FnextActivityID,String FCurBigApproveType){
  2.            //首先获取某个任务后续的流转数据结构
  3.           ProcessControl flowControl = ProcessUtils.getProcessContext().getProcessControl();
  4.            if (flowControl.getFlowTos().size()>1){
  5.                    System.out.println("后续可能流转的环节数不能大于1");
  6.                    return;
  7.            }
  8.            for (int i = 0; i < flowControl.getFlowTos().size(); i++){
  9.            String  FCurActivtiyID = flowControl.getFlowTos().get(i).getUnit();
  10.                System.out.println("后续可能流转的环节: "+ FCurActivtiyID);
  11.           // if (FlowOutClass.isEqu(FCurActivtiyID, FnextActivityID) || FCurActivtiyID.contains(FCurBigApproveType)) {
  12.                    flowControl.getFlowTos().get(i).clearExecutors();
  13.                    for (int j = 0; j<list.size(); j++){
  14.                         //留下要流转的环节,并自定义执行者
  15.                            OrgUnit CurOrgUnit = new OrgUnit(((FlowDataInfoclass)list.get(j)).FProcessPerFID,((FlowDataInfoclass)list.get(j)).FProcessPerFName);
  16.                            flowControl.getFlowTos().get(i).addExecutor(CurOrgUnit);
  17.                    }
  18.            }
  19. }
复制代码

UI界面

UI界面

数据库数据

数据库数据

88

主题

9507

帖子

5135

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5135
QQ
发表于 2014-1-20 11:13:35 | 显示全部楼层
流程图是什么样的,都设置了哪些规则,写了哪些事件
打印出后续可能流转的环节名称
远程的联系方法 QQ 728094812。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要解决的问题

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

使用道具 举报

310

主题

4938

帖子

4767

积分

论坛元老

Rank: 8Rank: 8

积分
4767
QQ
发表于 2014-1-20 11:21:46 | 显示全部楼层
1.模型检查一遍是否有报错;
2.再检查下第2环节的源码,看看是否有两个output输出环节

评分

参与人数 1 +4 收起 理由
jishuang + 4 赞一个!

查看全部评分

QQ:179785966
回复 支持 反对

使用道具 举报

46

主题

189

帖子

1218

积分

金牌会员

Rank: 6Rank: 6

积分
1218
QQ
 楼主| 发表于 2014-1-20 11:22:22 | 显示全部楼层
zhaixin 发表于 2014-1-20 11:13
流程图是什么样的,都设置了哪些规则,写了哪些事件
打印出后续可能流转的环节名称 ...

控制台信息:
  1. CLIENTACCOUNT:QIAODAN
  2. BIZORIGN:qiaodan
  3. DeptId:590E1F1C5836407984263C431F913402
  4. PERID:AD99AD758C214EFEA97280BDF70B7A7D
  5. BizKind:kqOvertimeApply
  6. FBizGUID:6D58E97F468341F492C1CE8092E8A916
  7. CREATEPOSLEV:10
  8. AuditKind:akAudit,akVerify
  9. PARAMKIND:pkRegion,pkRegion
  10. PARAMVALUE:4,4
  11. AndoOrStr:aoAnd,aoAnd
  12. 执行FlowOut存储过程
  13. 执行FN函数 是否需继续审批
  14. FCurActivityID=akAudit40
  15. IndexI=0
  16. 是否需继续审批结果:false
  17. 执行FN函数 是否需继续审批
  18. FCurActivityID=akAudit40
  19. IndexI=0
  20. 是否需继续审批结果:false
  21. 流程审批总记录数:2
  22. 当前任务GUID: 595A60CE7CF64AD7AB76F787CAF03237
  23. sql:select  count(*) as FRowCount  from SA_TaskRelation where sTaskID2 = '595A60CE7CF64AD7AB76F787CAF03237'
  24. 任务关联表记录数:1
  25. 当前环节ID:加班单审批
  26. 不是首环节
  27. 审批环节执行者列表个数:1
  28. 后续可能流转的环节: Process
  29. 后续可能流转的环节: Process
  30. 下一个环节:akProcess20
复制代码
流程图:
到处理人的时候没有条件限制,所有单据都要到处理人

查找处理人事件:
  1. // 执行流转操作 获取执行者
  2.           public static String DoExecFlowOut(){
  3.                   FlowOutClass tmpFlowOutClass = new FlowOutClass();
  4.                   //String FResultActivityID = null;
  5.                   String FdyActivityID = null;
  6.                   String FnextActivityID = null;
  7.                   String FCurBigApproveType = null;
  8.                   String FCurActivtiyID =null;
  9.                   Integer i = 0;
  10.                   Integer j ;
  11.                   Integer z ;
  12.                   String  FCurActivityID = ProcessUtils.getCurrentAI().getActivityName();
  13.                   String CurBizID = ProcessUtils.getProcessData1();
  14.                   List<Object> FlowFinallist=new ArrayList <Object>();
  15.               List<Object> Flowlist=new ArrayList <Object>();   
  16.               String  ksql = "select a.* from xt_TmpFlowData a where a.FkindGuid='" + CurBizID + "' order by a.FRecNO ";
  17.               Table table = KSQL.select(ksql, null, DATA_MODEL, null);
  18.               Iterator<Row> tabs = table.iterator();
  19.               while (tabs.hasNext()){
  20.                              Row CurRow = tabs.next();
  21.                              FlowOutClass.FlowDataInfoclass FtmpFlowinfo = tmpFlowOutClass.new FlowDataInfoclass();
  22.                              FtmpFlowinfo.FProcessDetpFID = CurRow.getString("FProcessDeptFID");
  23.                              FtmpFlowinfo.FProcessPosFID = CurRow.getString("FProcessPosFID");
  24.                              FtmpFlowinfo.FProcessPerFID = CurRow.getString("FProcessPerFID");
  25.                              FtmpFlowinfo.FactivityID = CurRow.getString("FactivityID");
  26.                              FtmpFlowinfo.FBigApproveType = CurRow.getString("FBigApproveType");
  27.                              FtmpFlowinfo.FProcessPerFName = CurRow.getString("FProcessPerFName");
  28.                              Flowlist.add(FtmpFlowinfo);
  29.               }
  30.                   System.out.println("流程审批总记录数:"+ Flowlist.size());
  31.                   if (tmpFlowOutClass.IsFirtActivity(FCurActivityID)){
  32.                       if (Flowlist.size()>0){
  33.                               FnextActivityID =  ((FlowDataInfoclass)Flowlist.get(0)).FactivityID;
  34.                               System.out.println("开始环节审批环节ID:"+ FnextActivityID);
  35.                               FCurBigApproveType = ((FlowDataInfoclass)Flowlist.get(0)).FBigApproveType;
  36.                               for (i = 0; i  < Flowlist.size(); i++){
  37.                                      FdyActivityID = ((FlowDataInfoclass)Flowlist.get(i)).FactivityID;
  38.                                      if (FlowOutClass.isEqu(FnextActivityID, FdyActivityID)){
  39.                                              FlowFinallist.add(Flowlist.get(i));
  40.                                      }
  41.                               }
  42.                               System.out.println("开始环节执行者列表个数:"+FlowFinallist.size());
  43.                               getFlowExecutor(FlowFinallist, FnextActivityID, FCurBigApproveType);
  44.                       } else {
  45.                               System.out.println(String.format("找不到匹配的流程审批数据或流程审批数据未配置!!!"));
  46.                               return FnextActivityID;
  47.                       }
  48.                   } else {
  49.                          FCurActivtiyID = ProcessUtils.getProcessData2();
  50.                          for ( i = 0; i < Flowlist.size(); i++){
  51.                                if (FlowOutClass.isEqu(FCurActivtiyID, ((FlowDataInfoclass)Flowlist.get(i)).FactivityID)){
  52.                                        for ( j = i+1; j < Flowlist.size();j++ ){
  53.                                            if (!FlowOutClass.isEqu(((FlowDataInfoclass)Flowlist.get(j)).FactivityID, FCurActivtiyID)){
  54.                                                    String FdyActivityID2 = ((FlowDataInfoclass)Flowlist.get(j)).FactivityID;
  55.                                                         FnextActivityID =  ((FlowDataInfoclass)Flowlist.get(j)).FactivityID;
  56.                                                        FCurBigApproveType = ((FlowDataInfoclass)Flowlist.get(j)).FBigApproveType;
  57.                                                    FlowFinallist.add(Flowlist.get(j));
  58.                                                    for ( z = j+1; z < Flowlist.size();z++ ){
  59.                                                            if (FlowOutClass.isEqu(((FlowDataInfoclass)Flowlist.get(z)).FactivityID, FdyActivityID2)){
  60.                                                                    FlowFinallist.add(Flowlist.get(z));
  61.                                                            }
  62.                                                    }
  63.                                                    break;
  64.                                            }
  65.                                        }
  66.                                   break;
  67.                                }
  68.                          }
  69.                               System.out.println("审批环节执行者列表个数:"+FlowFinallist.size());
  70.                               getFlowExecutor(FlowFinallist, FnextActivityID, FCurBigApproveType);
  71.                   }
  72.                   System.out.println("下一个环节:"+ FnextActivityID);
  73.                   return FnextActivityID;
  74.         }


  75. public static void getFlowExecutor(List<Object> list,String FnextActivityID,String FCurBigApproveType){
  76.            //首先获取某个任务后续的流转数据结构
  77.            ProcessControl flowControl = ProcessUtils.getProcessContext().getProcessControl();
  78.           /* if (flowControl.getFlowTos().size()>1){
  79.                    System.out.println("后续可能流转的环节数不能大于1");
  80.                    return;
  81.            }*/
  82.            for (int i = 0; i < flowControl.getFlowTos().size(); i++){
  83.            String  FCurActivtiyID = flowControl.getFlowTos().get(i).getUnit();
  84.                System.out.println("后续可能流转的环节: "+ FCurActivtiyID);
  85.           // if (FlowOutClass.isEqu(FCurActivtiyID, FnextActivityID) || FCurActivtiyID.contains(FCurBigApproveType)) {
  86.                    flowControl.getFlowTos().get(i).clearExecutors();
  87.                    for (int j = 0; j<list.size(); j++){
  88.                         //留下要流转的环节,并自定义执行者
  89.                            OrgUnit CurOrgUnit = new OrgUnit(((FlowDataInfoclass)list.get(j)).FProcessPerFID,((FlowDataInfoclass)list.get(j)).FProcessPerFName);
  90.                            flowControl.getFlowTos().get(i).addExecutor(CurOrgUnit);
  91.                    }
  92.            }
  93. }
复制代码

复制代码

流程图

流程图
回复 支持 反对

使用道具 举报

46

主题

189

帖子

1218

积分

金牌会员

Rank: 6Rank: 6

积分
1218
QQ
 楼主| 发表于 2014-1-20 11:25:24 | 显示全部楼层
yinlun 发表于 2014-1-20 11:21
1.模型检查一遍是否有报错;
2.再检查下第2环节的源码,看看是否有两个output输出环节 ...

模型检查没错,取出来的审批人就是我上面截图的数据库信息,
问题出在  ProcessControl flowControl = ProcessUtils.getProcessContext().getProcessControl();
这句里flowControl 取出了2条相同的记录。。
回复 支持 反对

使用道具 举报

88

主题

9507

帖子

5135

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5135
QQ
发表于 2014-1-20 13:44:46 | 显示全部楼层
你好楼主,该问题需要远程,已经通过技术服务QQ加你为好友了,请及时通过,我们会尽快QQ远程。
远程的联系方法 QQ 728094812。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要解决的问题

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

使用道具 举报

89

主题

374

帖子

811

积分

高级会员

Rank: 4

积分
811
QQ
发表于 2014-1-20 13:59:06 | 显示全部楼层
LZ可以尝试重新画下流程图:
1、从开始到结束,7个环节一口气画完
2、把两个条件分支环节的线连一下。
这样子不用动UI层的东西,继续跑下刚才那条数据,看看还有两条记录吗
之前我也出现这个现象,解决了

评分

参与人数 1 +4 收起 理由
jishuang + 4 赞一个!

查看全部评分

回复 支持 反对

使用道具 举报

88

主题

9507

帖子

5135

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5135
QQ
发表于 2014-1-20 14:16:04 | 显示全部楼层
切换到process文件的源码,发现处理人环节有两个输入(input),删除一个就好了,目前不知道是由于什么样的操作导致的
远程的联系方法 QQ 728094812。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要解决的问题

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-2 00:39 , Processed in 0.115267 second(s), 29 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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