起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 182|回复: 8

【搞定】怎样在流转发生时进行数据更新**

[复制链接]
发表于 2007-5-28 17:47:34 | 显示全部楼层 |阅读模式
流程中没有对应的事件,在AfterFlowOut中执行太迟了,因为此时如果更新业务数据出错,任务消息状态已经不可回滚了;但若在createflowoutflowtasks中更新业务数据,在用户流转窗体时可选择取消流转,这样当再次真正流转时会重复更新数据,有没有好的办法实现这个功能?
回复

使用道具 举报

发表于 2007-5-28 18:01:48 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-30 11:25:37 | 显示全部楼层
这个我早看过了 一直没有解决 所以才开新贴
版本2435,下面是测试代码,当提交数据出错时,流程还是走到了下一个环节,不知问题出在哪儿?

procedure TMainForm.FlowBroker1AfterFlowOut(Sender: TObject; Command: TFlowOutCommand);
var
  dstKC:TDataSet;
  WLBM:String;
  lTransHandle: TTransactionHandle;
begin
  dstKC:=dstBrokerKC.DataSet;
  with dstBrokerMain.DataSet.Connection do
  begin
    lTransHandle :=Transaction.Start(False);
    with dstBrokeSlave.DataSet do
    try
      First;
      DisableControls;
      if not dstKC.Active then dstKC.Active:=True;
      while not Eof do     //库存处理
      begin
        WLBM:=FieldByName('WLBM').AsString;
        if dstKC.Locate('WLBM',[WLBM],[]) then
        begin
          dstKC.Edit;
          dstKC.FieldByName('SL').AsFloat:=dstKC.FieldByName('SL').AsFloat+FieldByName('SL').AsFloat;
        end else
        begin
          dstKC.Append;
          dstKC.FieldByName('WLBM').AsString:=WLBM;
          dstKC.FieldByName('SL').AsFloat:=FieldByName('SL').AsFloat;
        end;
        Next;
      end;
      EnableControls;
      dstKC.ApplyUpdates;
      with dstBrokerMain.DataSet do  //更新入库单状态
      begin
        Edit;
        FieldByName('RKZT').AsInteger:=1;
        ApplyUpdates;
      end;
      Transaction.Commit(lTransHandle);
    except
      Transaction.Rollback(lTransHandle);
      Raise;
    end;
  end;
end;

procedure TMainForm.BizFormCreate(Sender: TObject);
begin
  FlowBroker1.FlowControl.FlowManager.Transaction:=dstBrokerMain.DataSet.Connection.Transaction;
end;
回复 支持 反对

使用道具 举报

发表于 2007-5-30 14:32:04 | 显示全部楼层
4楼说了,在26XX才可以。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-31 14:24:43 | 显示全部楼层
不是说用这个这句代码就可以将处理置于同一事务吗?FlowBroker1.FlowControl.FlowManager.Transaction:=dstBrokerMain.DataSet.Connection.Transaction;
我想知道的是2435版本要怎么做?
回复 支持 反对

使用道具 举报

发表于 2007-5-31 18:40:38 | 显示全部楼层
FlowBroker1.FlowControl.FlowManager.Transaction:=dstBrokerMain.DataSet.Connection.Transaction;


有了上面的语句,在AfterFlowOut可以不用作事务的控制了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-11 15:45:12 | 显示全部楼层
不作控制就会出现业务数据和流程数据都不回滚,即流程已流向下一个环节,业务数据已经部分更新
回复 支持 反对

使用道具 举报

发表于 2007-6-12 09:07:26 | 显示全部楼层
6楼已经让业务数据和流程数据放到了一个事务中
而流程的任何动作都会启动事务,也就可以保证业务数据和流程数据在一个事务中提交
回复 支持 反对

使用道具 举报

发表于 2007-9-16 10:49:47 | 显示全部楼层
由于楼主长时间未跟贴,此帖先结,有问题请开新帖.
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-1-27 08:40 , Processed in 0.038109 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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