|
情况如下:
点击按钮后在进程里面使用线程启动一些流程,然后调用一个过程流转任务
(1) 用线程启动流程
procedure TFlowThread.UserStartFlow(AFlowUrl,ADept,ARole,APerson,AStartProc,AFlowID,ASubject,ADescription :String);
var
lBizURL: TBizURL;
lFlowValue: TFlowValue;
lFlowControl: TFlowControl;
lExecutor: TOrgURL;
v_b: Boolean; //是否定位成功
lFlowGUID: String;
lTaskGUID: String;
AutoSendFlag: String;
AutoOutSendFlag: String;
SenderList: String;
OutSenderList: String;
SendUnit: String;
OutSendUnit: String;
SenderName: String;
SenderJG: String;
SenderBM: String;
SenderGW: String;
SendSubject: String;//发送标题
lOrgUnit: Business.Model.Org.Torgunit;
lQuery : Business.Data.TQuery;
begin
lBizURL := TBizURL.Create;
lFlowValue := TFlowValue.Create;
lFlowControl := TFlowControl.Create(Self.fform.Context);
lExecutor := TOrgURL.Create(ADept, ARole, APerson);
lBizURL.URL := AFlowUrl;
lQuery := TQuery.Create(Self.FForm);
try
lFlowValue.IDs.Add(AFlowID);//流程ID
lFlowValue.Subject := ASubject; //流程主题
lFlowValue.Description := ADescription;//流程描述
//启动流程实例
lFlowControl.StartupFlow(lBizURL, AStartProc, lExecutor, lFlowValue);
lFlowControl.FlowRunnerbyIndex[0].CurrentTask.State := business.Model.Flow.TTaskState.tsStarted;
lFlowControl.FlowRunnerbyIndex[0].CurrentTask.ExtendAttributeAsString['ESField01']:=Business.System.SysUtils.FormatDateTime('yymmddhh:nn', Business.System.SysUtils.now );
lFlowControl.FlowRunnerbyIndex[0].CurrentTask.ExtendAttributeAsString['ESField02']:='收文';
lFlowControl.FlowRunnerbyIndex[0].CurrentTask.Subject := '收文:'+ASubject;
//流程实例数据保存到数据库
lFlowControl.FlowRunnerbyIndex[0].CurrentTask.SaveToDB;
//////////////////////////////
finally
lFlowControl.Free;
lFlowValue.Free;
lBizURL.Free;
lExecutor.Free;
lQuery.Free;
end;
end;
(2) 流转任务
procedure TFW.FlowOutFWGD();
var
i: Integer;
lTask: TTask;
lTasks: TList;
begin
allowSend := true;
//流转的任务列表
lTasks := TList.Create;
try
for i:= FlowBroker1.FlowControl.TaskCount-1 downto 0 do
begin
lTask := FlowBroker1.FlowControl.TaskByIndex;
// dialogs.ShowMessage(lTask.ProcUnitID);
lTasks.Clear;
lTasks.Add(lTask);
FlowBroker1.FlowControl.FlowOut(lTasks);
end;
finally
lTasks.Free;
end;
end;
在执行到FlowBroker1.FlowControl.FlowOut(lTasks); 的时候程序就卡住了,一直没有响应。 线程存储了主窗体的变量fform.
如果线程里不启动流程是没有问题。
请帮忙分析下。 |
|