起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 135|回复: 4

[问题]线程的问题**

[复制链接]
发表于 2008-8-7 11:01:19 | 显示全部楼层 |阅读模式
情况如下:
点击按钮后在进程里面使用线程启动一些流程,然后调用一个过程流转任务

(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.

如果线程里不启动流程是没有问题。

请帮忙分析下。
回复

使用道具 举报

发表于 2008-8-7 11:02:45 | 显示全部楼层
流程在平台里是在一个事物里面,不能用线程做。
回复 支持 反对

使用道具 举报

发表于 2008-8-7 11:02:48 | 显示全部楼层
流程在平台里是在一个事务里面,不能用线程做。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-7 11:12:00 | 显示全部楼层
现在需要代码启动多个流程,很耗时间的,请问有什么办法?
回复 支持 反对

使用道具 举报

发表于 2008-8-7 11:19:51 | 显示全部楼层
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-20 15:14 , Processed in 0.038475 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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