楼主,上面仅仅是改了入口的,还需要改 其他地方的代码:
function TFuncManager.RunTasks(AContext: TContext; ATasks: TList; ATaskMessages: TList;
AExecutor: TOrgURL): TFunc;
var
I: Integer;
lTask: TTask;
lFuncURL: string;
lUIDs: TStringList;
lFlowControl: TFlowControl;
lOrgURL: TOrgURL;
lPosition: TOperatorPosition;
begin
lTask := ATasks[0] as TTask;
lFuncURL := GetFuncURLByTask(lTask);
Assert(lFuncURL <> '', '');
lUIDs := TStringList.Create;
try
for I := 0 to ATasks.Count - 1 do
lUIDs.Add(GetTaskUniqueID(ATasks[I] as TTask));
lFlowControl := TFlowControl.Create(AContext);
try
lFlowControl.ExecuteTask(ATasks, AExecutor);
lPosition := TContextUtils.GetOperatorPosition(AContext);
try
// 不能使用AFuncItem的OrgURL,因为它不一定是人员成员
lOrgURL := TOrgURL.Create(lPosition.PositionMember.Parent.ID,
lPosition.PositionMember.ID, lPosition.PersonMember.ID);
SetCurrentTaskState(lFlowControl, lOrgURL);
finally
lOrgURL.Free;
end;
Result := CreateFunc(lFlowControl.Context, lFuncURL);
try
lFlowControl.Func := Result;
InternalRunFunc(Result, '', lUIDs, nil, False);
except
Result.Free;
raise;
end;
except
lFlowControl.Free;
raise;
end;
finally
lUIDs.Free;
end;
end;
function TFuncManager.RunTasks(AContext: TContext; ATasks: TList;
AExecutor: TOrgURL): TFunc;
var
I: Integer;
lTask: TTask;
lFuncURL: string;
lUIDs: TStringList;
lFlowControl: TFlowControl;
lOrgURL: TOrgURL;
lPosition: TOperatorPosition;
begin
lTask := ATasks[0] as TTask;
lFuncURL := GetFuncURLByTask(lTask);
if lFuncURL = '' then
raise Exception.CreateFmt('找不到与任务''%s''对应的业务功能', [lTask.Subject]);
lUIDs := TStringList.Create;
try
for I := 0 to ATasks.Count - 1 do
lUIDs.Add(GetTaskUniqueID(ATasks[I] as TTask));
lFlowControl := TFlowControl.Create(AContext);
try
lFlowControl.ExecuteTask(ATasks, AExecutor);
lPosition := TContextUtils.GetOperatorPosition(AContext);
try
// 不能使用AFuncItem的OrgURL,因为它不一定是人员成员
lOrgURL := TOrgURL.Create(lPosition.PositionMember.Parent.ID,
lPosition.PositionMember.ID, lPosition.PersonMember.ID);
SetCurrentTaskState(lFlowControl, lOrgURL);
finally
lOrgURL.Free;
end;
Result := CreateFunc(lFlowControl.Context, lFuncURL);
try
lFlowControl.Func := Result;
InternalRunFunc(Result, '', lUIDs, nil, False);
except
Result.Free;
raise;
end;
except
lFlowControl.Free;
raise;
end;
finally
lUIDs.Free;
end;
end; |