起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 405|回复: 11

【结帖】[请求]流程执行者范围到底怎么用?**

[复制链接]
发表于 2008-1-9 12:12:15 | 显示全部楼层 |阅读模式
需求:
根据表单里面的字段“使用中心”,在流转时,修改流程执行者的范围,并且功能权限已经分配给了岗位成员。

方法:
在功能层下加入一个flowbroker,并且在其CreateFlowOutFlowTasks事件中增加以下代码
VAR
   syzx:string; //使用中心
  lFlowTask:TFlowTask;
   Range:String;
begin
    syzx:=InfoBrokerBGSBSQDXX.Info.DataSetByID['BGSBSQD').FieldByName('syzx').ASSTRING;
   //流转给中心领导
   lFlowTask := Command.FlowTasks.FindFlowTask('BGSBWX_BMYJ');
   if lFlowTask <> nil then
      begin
      lFlowTask.Executors.Clear;  
      lFlowTask.ExecutorMustBeFuncOwner := true;
      lFlowTask.ExecutorAmount:=TTaskExecutorAmount.teaMulti;
      lFlowTask.ExecutorKinds :=[TTaskExecutorKind.ekPositionMember];
      lFlowTask.AutoCalcExecutor:=true;
      lFlowTask.ExecuteMode := TTaskExecuteMode.emMonopolize ;  //任务执行方式  独占方式
      lFlowTask.PreemptMode :=TTaskPreemptMode.omFirstProcess; //抢占方式 第一个数据处理
      lFlowTask.AssignMode := TTaskAssignMode.amTogether;    //任务分配方式   共同分配
   Range:='OrgManager(OrgKey('''+syzx+''', '''', ''''), '''', false)';
      lFlowTask.AllowExecutorRange:=Range;
      lFlowTask.Executorrange:=range; ;)
   end;

问题:
   1、流转时,发现AllowExecutorRange这个是好用的,可以在“允许的执行者”里面看到我要选择的执行人。但是,在最后一步Executorrange:=range中,虽然执行了,对话框中是空的,如下图,很奇怪。
     2、将代码删除,使用流程里面的系统自带的执行规则,写了同样的表达式'OrgManager(OrgKey('''+syzx+''', '''', ''''), '''', false)'就可以达到要求,并且速度比代码快得多,奇怪!!!

1.jpg

29.87 KB, 下载次数: 201

回复

使用道具 举报

 楼主| 发表于 2008-1-9 13:01:25 | 显示全部楼层
我希望达到的目的就是:在流程没有设定执行规则时,通过代码取环节的执行规则和执行人范围
回复 支持 反对

使用道具 举报

发表于 2008-1-9 13:08:32 | 显示全部楼层
lFlowTask.Executors.Clear;  

的情况下
下面应该用
lOrgURL := TOrgURL.Create('XSB','XSY',ZXX' ); //部门、岗位、人员创建组织单元
    lFlowTask.Executors.Add(lOrgURL);//添加执行者


如果用
lFlowTask.ExecutorRange:=Range; //执行组织机构表达式
就不要清除执行者。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-9 13:12:48 | 显示全部楼层
楼上的,试过了,可是出来的执行者是上次流转时候选择的人员,而AllowExecutorRange这个是好用的,里面确实是我要的人。
还有为什么代码那么慢?而使用流程里面的系统自带的执行规则,运行速度很快呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-9 13:18:56 | 显示全部楼层
现在怀疑运行速度慢,是因为执行规则是在代码里面写的,并且只是更改了执行规则中的参数,是否需要用代码先add 一条executerule????
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-9 15:59:41 | 显示全部楼层
受不了,我花了一天时间都没有解决这2个奇怪的问题。
只能剑走偏锋,用了执行规则去调用业务参数的方法:
1、先在功能下的form里面,新建一个BeforeFlowOut事件,给业务参数赋值(我所要的字段值)
2、在流程的执行规则中,添加表达式“OrgManager(orgkey(&[业务参数1],'',''), '', True)”即可。
回复 支持 反对

使用道具 举报

发表于 2008-1-9 17:01:03 | 显示全部楼层
这样就解决了?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-10 08:29:10 | 显示全部楼层
1、楼上的,我要求的功能通过其他途径实现了(见6楼),但是lFlowTask.ExecutorRange:=Range; 不起作用的问题依然存在,不知道是不是在代码里面写的执行规则和系统缺省默认的执行规则有冲突?

2、流程是不是先查找在流程定义里面的执行规则,如果没有则使用缺省默认的,然后再到功能层下面去看flowbroker的执行规则???
回复 支持 反对

使用道具 举报

发表于 2008-1-10 10:36:23 | 显示全部楼层
1、流转时,发现AllowExecutorRange这个是好用的,可以在“允许的执行者”里面看到我要选择的执行人。但是,在最后一步Executorrange:=range中,虽然执行了,对话框中是空的,如下图,很奇怪。
你把“本中心意见”的执行规则 的 执行者范围 的设置帖出来看看,

另外,你参考附件,把这个执行者范围,这样设置看看流转的时候是否有接收者。(如果是在运行环境下运行,记得保存,保存后签入,签入后刷新缓存,然后再运行)

1.gif

9.91 KB, 下载次数: 175

回复 支持 反对

使用道具 举报

发表于 2008-1-10 11:13:57 | 显示全部楼层
流程是不是先查找在流程定义里面的执行规则,如果没有则使用缺省默认的,然后再到功能层下面去看flowbroker的执行规则???

流程的功能在进行不同操作的时候触发不同事件,读取不同的资源。这点请参考http://bbs.justep.com/forum.php?mod=viewthread&tid=730
当流程在点击流转按钮后,在弹出1楼界面前,去读取功能环节的执行规则,如果没有,那么自己会生成一个默认执行规则,这是在功能上没有代码的时候,如果功能上有代码,那么会结合事件触发的时机以代码优先。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-7 07:33 , Processed in 0.044122 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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