起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 989|回复: 27

【结】如何准确访问当前任务的后续任务**

[复制链接]
发表于 2008-3-28 19:11:47 | 显示全部楼层 |阅读模式
如何准确访问当前任务的后续任务

需求描述:
环节A后面是异或环节,异或环节后面是两个活动环节B和C。B为默认环节。在A环节点击流转的时候指定C环节的执行者范围。

代码如下:
lFlowTask := Command.FlowTasks.FindFlowTask('C');
    //lFlowTask := Command.FlowTasks.FindFlowTask('HSYWGN');
    if lFlowTask <> nil then
    begin
      lRange := 'OrgChildren(OrgKey('''+lQuery.FieldByName('DEPARTMENT_ID').AsString+''','''',''''), '''', True, False)';
      lFlowTask.ExecutorMustBeFuncOwner:=True;       //执行者必须是功能拥有者
      lFlowTask.ExecutorAmount:= TTaskExecutorAmount.teaMulti; //TTaskExecutorAmount.teaMulti;  //执行者范围 多个
      //    lFlowTask.ExecutorAmount:=TTaskExecutorAmount.teaOne;  //执行者范围 单个
      lFlowTask.ExecutorKinds := [TTaskExecutorKind.ekPersonMember]; //执行者类型   人员成员
      lFlowTask.AllowExecutorRange:=lRange;  //限定执行者范围
      lFlowTask.ExecutorRange:=lRange; //默认执行者范围
      //lFlowTask.ExecuteMode := TTaskExecuteMode.emSimultaneous ;  //任务执行方式  同时执行
      //    lFlowTask.ExecuteMode := TTaskExecuteMode.emSimultaneous ;  //任务执行方式  同时执行
      //    lFlowTask.ExecuteMode := TTaskExecuteMode.emExclusive ;  //任务执行方式  独立执行
          lFlowTask.ExecuteMode := TTaskExecuteMode.emMonopolize ;  //任务执行方式  独占方式
      //    lFlowTask.ExecuteMode := TTaskExecuteMode.emSequential ;  //任务执行方式  顺序执行
      lFlowTask.PreemptMode :=TTaskPreemptMode.omFirstOpen;  //抢占方式 第一个打开
      //    lFlowTask.PreemptMode :=TTaskPreemptMode.omFirstProcess; //抢占方式 第一个处理
      lFlowTask.AssignMode := TTaskAssignMode.amSingleness;//TTaskAssignMode.amSingleness;  //任务分配方式   独立分配
      //    lFlowTask.AssignMode := TTaskAssignMode.amTogether;    //任务分配方式   共同分配

出现问题:
lFlowTask := Command.FlowTasks.FindFlowTask('C');中的lFlowTask对象为空对象。如果查找的任务换成B(lFlowTask := Command.FlowTasks.FindFlowTask('B');)即可访问到。

麻烦版主给个解决办法,谢谢!
回复

使用道具 举报

发表于 2008-3-29 17:24:34 | 显示全部楼层
流程流转时:
1、根据流转规则,判断是否可以流转,触发BeforeFlowOut事件
2、根据流程定义查找允许的下一个环节,如果有条件环节、条件分支环节,触发OnCalcProcCondition事件
3、根据流程下一个环节的执行规则,创建流程任务FlowTask触发OnCreateFlowOutFlowTasks事件
4、触发AfterFlowOut事件

在第二步,没有提供事件影响下一个环节的选择。除非楼主定义了条件分支环节。

如果下一个环节下选择不需要用户参与,可以考虑把xor替换成条件分支,楼主用代码控制条件就可以了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-31 08:49:54 | 显示全部楼层
下面的环节是需要用户自己选择,有办法解决么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-31 14:45:35 | 显示全部楼层
顶一下
回复 支持 反对

使用道具 举报

发表于 2008-3-31 14:56:42 | 显示全部楼层
楼主配上你的流程图看看,指出
1、哪个是A;
2、哪个异或环节
3、哪个是B
4、哪个是C
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-31 15:08:28 | 显示全部楼层
流程部分如图

1123.jpg

34.63 KB, 下载次数: 385

回复 支持 反对

使用道具 举报

发表于 2008-3-31 15:34:23 | 显示全部楼层
哦,你把B环节的执行者去掉就可以选择到C了,如果你不用代码,直接在流转的界面上,你也能看到的,XOR是指下面所有通的路只能选择一条,平台以环节有接收者,即执行者为选择的路线,所以就出现这样的现象了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-31 16:15:49 | 显示全部楼层
麻烦版主再看下1楼问题的描述,我不是不会选择环节C,而是要用代码来获得环节C的任务执行者
回复 支持 反对

使用道具 举报

发表于 2008-3-31 16:43:40 | 显示全部楼层
还有个简单的办法,把xor到B和C环节的连线删除,重新连一次,要注意先连xor到C的线,后连B。
这样就可以默认选择C环节了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-31 22:03:42 | 显示全部楼层
B必须为默认环节
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-13 05:44 , Processed in 0.052865 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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