起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 919|回复: 0

如何根据部门列表限制执行者表达式范围

[复制链接]
发表于 2006-8-18 11:54:35 | 显示全部楼层 |阅读模式
Static procedure TFlowUtils.ModifyExecutorRangeByDeptList(Command:TFlowOutCommand;ANextProcUnit:string;ADeptList:Tstrings;AAssignMode:TTaskAssignMode;AExecutorAmount:TTaskExecutorAmount);
var
  lFlowTask:TFlowTask;
  lRange:String;
  i:integer;
begin
  lRange := '';
  lFlowTask := Command.FlowTasks.FindFlowTask(ANextProcUnit);
  if lFlowTask <> nil then
  begin
    for i := 0 to  ADeptList.Count -1 do
    begin
      //OrgChildren(OrgKey('08', '', ''), '', True, False)
      if  lRange ='' then
        lRange:='OrgChildren(OrgKey('''+ADeptList.Strings+''','''',''''), '''', True, False)'
      else
        lRange:=lRange + ' or '+'OrgChildren(OrgKey('''+ADeptList.Strings+''','''',''''), '''', True, False)';
    end;

    lFlowTask.ExecutorMustBeFuncOwner:=True;       //执行者必须是功能拥有者
    lFlowTask.ExecutorAmount:= AExecutorAmount; //TTaskExecutorAmount.teaMulti;  //执行者范围 多个
//    lFlowTask.ExecutorAmount:=TTaskExecutorAmount.teaAll;  //执行者范围 所有
//    lFlowTask.ExecutorAmount:=TTaskExecutorAmount.teaOne;  //执行者范围 单个
    lFlowTask.ExecutorKinds := [TTaskExecutorKind.ekPersonMember]; //执行者类型   人员成员
    lFlowTask.AllowExecutorRange:=lRange;  //限定执行者范围
    lFlowTask.ExecutorRange:=lRange; //默认执行者范围
    case  AAssignMode of
      TTaskAssignMode.amSingleness:
      begin
        lFlowTask.ExecuteMode := TTaskExecuteMode.emExclusive;
      end;
      TTaskAssignMode.amTogether:
      begin
        lFlowTask.ExecuteMode := TTaskExecuteMode.emSimultaneous ;  //任务执行方式  同时执行
      end;
    end;
//    lFlowTask.ExecuteMode := TTaskExecuteMode.emMonopolize ;  //任务执行方式  独立方式

//    lFlowTask.ExecuteMode := TTaskExecuteMode.emExclusive ;  //任务执行方式  独占执行
//    lFlowTask.ExecuteMode := TTaskExecuteMode.emSequential ;  //任务执行方式  顺序执行
//    lFlowTask.ExecuteMode := TTaskExecuteMode.emSimultaneous;  //任务执行方式  同时执行

//    lFlowTask.PreemptMode :=TTaskPreemptMode.omFirstOpen;  //抢占方式 第一个打开
//    lFlowTask.PreemptMode :=TTaskPreemptMode.omFirstProcess; //抢占方式 第一个处理
    lFlowTask.AssignMode :=  AAssignMode;//TTaskAssignMode.amSingleness;  //任务分配方式   独立分配
//    lFlowTask.AssignMode := TTaskAssignMode.amTogether;    //任务分配方式   共同分配

  end;

end;
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-3-29 20:28 , Processed in 0.037229 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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