起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 877|回复: 14

关于流程事务的问题

[复制链接]
发表于 2010-5-25 10:16:20 | 显示全部楼层 |阅读模式
lQuery:=TQuery.Create(nil);
  lQuery.Connection:=DataSetBroker_hgz.DataSet.Connection;
  try
     lTransactionHandle:=DataSetBroker_hgz.DataSet.Connection.Transaction.Start(false);   
     try
        DataSetBroker_hgz.DataSet.Edit;
        DataSetBroker_hgz.DataSet.FieldByName('status').AsString:='办理中';
        DataSetBroker_hgz.DataSet.Post;
        DataSetBroker_hgz.DataSet.ApplyUpdates;        

        lQuery.Close;
        lquery.CommandText:='insert into x3_drp_flowid (id, biztablename)values '
                            +' (:id,:biztablename)';
        lquery.Params.ParamByName('id').AsString:=AFlowID;
        lquery.Params.ParamByName('biztablename').AsString:='qm_hgzbf';
        lQuery.Execute;
         //下面这句是通过代码来创建一个新的流程成功
        TZLGLXX_info(InfoBroker.Info).UserStartFlow(ADept,ARole,APerson,AFlowUrl,AStartProc,AFlowID,ASubject,ADescription);
         
         //如果下面 提交事务时失败。怎样取消前面创建的流程?
        DataSetBroker_hgz.DataSet.Connection.Transaction.Commit(lTransactionHandle);   
     except
           
        DataSetBroker_hgz.DataSet.Connection.Transaction.Rollback(lTransactionHandle);
        raise;
     end;

  finally
    lQuery.Free;
  end;
回复

使用道具 举报

发表于 2010-5-25 10:26:23 | 显示全部楼层
应该把你的操作放到流程事务中去。
启动流程的时候会自动启动一个事务的。(FlowControl.FlowManager.Transaction)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-5-27 11:47:48 | 显示全部楼层
procedure TZLGLXX_info.UserStartFlow(ADept,ARole,APerson,AFlowUrl,AStartProc,AFlowID,ASubject,ADescription:string);
var
  lBizURL:TBizURL;
  lFlowValue:TFlowValue;
  lFlowControl:TFlowControl;
  lExecutor:Org.TOrgURL;
begin

  lBizURL := TBizURL.Create;
  lFlowValue := TFlowValue.Create;
  lFlowControl := TFlowControl.Create(Self.Context);
  lExecutor := Org.TOrgURL.Create(ADept, ARole, APerson);
  lBizURL.URL := AFlowUrl;

  try
    lFlowValue.IDs.Add(AFlowID);       //流程ID
    lFlowValue.Subject := ASubject;    //流程主题
    lFlowValue.Description := ADescription;  //流程描述
    //启动流程实例
    lFlowControl.StartupFlow(lBizURL, AStartProc, lExecutor, lFlowValue);
    //流程实例数据保存到数据库
    lFlowControl.FlowRunnerbyIndex[0].CurrentTask.SaveToDB;
  finally
    lFlowControl.Free;
    lFlowValue.Free;
    lBizURL.Free;
  end;
end;

1楼启动流程调的是这个方法。我到那里去找流程事务 ?谢谢!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-5-27 14:34:31 | 显示全部楼层
路过
回复 支持 反对

使用道具 举报

发表于 2010-5-27 14:46:59 | 显示全部楼层
把你query的Transaction 设置成 FlowControl.FlowManager.Transaction试试。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-5-27 16:20:08 | 显示全部楼层
lQuery:=TQuery.Create(nil);
  lQuery.Connection:=DataSetBroker_hgz.DataSet.Connection;
  try
    lFlowValue.IDs.Add(AFlowID);       //流程ID
    lFlowValue.Subject := ASubject;    //流程主题
    lFlowValue.Description := ADescription;  //流程描述
    //启动流程实例
    lFlowControl.StartupFlow(lBizURL, AStartProc, lExecutor, lFlowValue);

    DataSetBroker_hgz.DataSet.Connection.Transaction:=lFlowControl.FlowManager.Transaction;

    DataSetBroker_hgz.DataSet.Edit;
    DataSetBroker_hgz.DataSet.FieldByName('status').AsString:='办理中';
    DataSetBroker_hgz.DataSet.Post;
    DataSetBroker_hgz.DataSet.ApplyUpdates;

    lQuery.Close;
    lquery.CommandText:='insert into x3_drp_flowid (id, biztablename,OP_USER,OP_date)values '
                        +' (:id,:biztablename,:OP_USER,:OP_date)';
    lquery.Params.ParamByName('id').AsString:=AFlowID;
    lquery.Params.ParamByName('biztablename').AsString:='qm_hgzbf';
    lquery.Params.ParamByName('OP_USER').AsString:=SystemUtils.TContextUtils.GetOperator(self.Context).DisplayName; //操作者用户名
    lquery.Params.ParamByName('OP_date').AsDateTime:=business.Data.SysSrv.SysService.Time;
    lQuery.Execute;


    //流程实例数据保存到数据库
    lFlowControl.FlowRunnerbyIndex[0].CurrentTask.SaveToDB;
  finally
    lQuery.Free;
    lFlowControl.Free;
    lFlowValue.Free;
    lBizURL.Free;
  end;

我不知道这种写法对不对。(事务没有启作用)
回复 支持 反对

使用道具 举报

发表于 2010-5-27 16:26:40 | 显示全部楼层
没看到你有写 啊
lQuery.Transaction = FlowControl.FlowManager.Transaction;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-5-27 16:32:46 | 显示全部楼层
DataSetBroker_hgz.DataSet.Connection.Transaction:=lFlowControl.FlowManager.Transaction;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-5-27 16:33:59 | 显示全部楼层
因为lQuery.Connection:=DataSetBroker_hgz.DataSet.Connection;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-5-28 09:15:09 | 显示全部楼层
???
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-8 22:42 , Processed in 0.047985 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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