|

楼主 |
发表于 2009-10-29 11:08:25
|
显示全部楼层
我看了你推荐的链接。把我的代码改进了一下。
lFlowParam := TLoadFlowParam.Create; //流程参数
lTaskParam := TLoadTaskParam.Create; //任务参数
lTasks := TTasks.Create;
lTaskslist:=TList.Create;
try
DoGetFlowGUIDs(flow_field_value,lFlowParam.GUIDs);
lTaskParam.States := [TTaskState.tsStarted, TTaskState.tsProcessing, TTaskState.tsWaiting];
//以给定的条件查询任务(这里给定的条件由lFlowParam和lTaskParam共同给出,lFlowParam的限定条件是流程Guid值,lTaskParam的限定条件:是按照任务状态,只查询出需要处理的任务)
Flow.FlowEngine.GetTasks(lFlowParam, lTaskParam, lTasks);
if lTasks.Count<>0 then
begin
lTaskMessage:=lTasks.Items[0].TaskMessages[0];
lTaskslist.Add(lTasks.Items[0]);
lFlowContext := GetFlowContext(GetPositionContext);
if lFlowContext = nil then
Exit;
lOrgUrl := TOrgUrl.Create(lTaskMessage.ReceiverDeptID,lTaskMessage.ReceiverPositionID, lTaskMessage.ReceiverID);
try
FFlowControl.ExecuteTask(lTasks.Items[0], lOrgUrl);
lFuncURL := GetTaskFuncURL(lTasks.Items[0]);
lFunc := GetTaskFunc(lFlowContext, lFuncURL);
FFlowControl.Func := lFunc;
lFunc.Run('');
finally
lOrgUrl.Free;
end;
FlowBroker := TFlowBroker.Create(lFunc);
flowbroker.OnCreateFlowBackFlowTasks:=FlowBroker1.OnCreateFlowBackFlowTasks;
FFlowControl.RegisterFlowBroker(FlowBroker);
FFlowControl.FlowBack(lTaskslist);
FFlowControl.UnRegisterFlowBroker(FlowBroker);
end;
finally
lFlowParam.Free;
lTaskParam.Free;
lTasks.Free;
lTaskslist.Free;
end;
其中flowbroker1 是我在窗体上放的一个流程代理。
这样执行flowbroker.OnCreateFlowBackFlowTasks:=FlowBroker1.OnCreateFlowBackFlowTasks; 这句话的时候,果然执行到了flowbroker1的OnCreateFlowBackFlowTasks这个事件,我可以在这个事件中填写代码了。我的这个事件中取lFlowTask,要么是空,要么就出现错误。不知道怎么回事。可能跟我的流程环境是模拟的有关吧。这个事件中的FlowBroker就是上面FlowBroker := TFlowBroker.Create(lFunc);这句创建的。
出现错误时,错误图所下所示:
|
|