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; |