起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 424|回复: 15

【结】流转后数据刷新问题

[复制链接]
发表于 2009-11-12 13:49:44 | 显示全部楼层 |阅读模式
在FlowBroker1AfterFlowOut事件中用command.FuncTerminate :=false;使任务流转后窗体不关闭。

在FlowBroker1CreateFlowOutFlowTasks事件或FlowBroker1AfterFlowOut中更改数据并ApplyUpdates,随后Refresh,报错“数据已经被修改,请先提交或回滚数据”
回复

使用道具 举报

发表于 2009-11-12 14:03:12 | 显示全部楼层
你确认是 command.FuncTerminate :=false 引起的么?
我这里做了个测试没有问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-12 14:09:14 | 显示全部楼层
是什么引起的我也不太清楚,
不刷新数据就程序执行正常

FlowBroker1CreateFlowOutFlowTasks事件代码如下

   Command.UserConfirm:=False; //流程界面
   //FlowBroker1.FlowControl.Flow.ID
   lFlowTask := Command.FlowTasks.GetFlowTask('SDYTSTTSBG');                  //限定的环节  报告审定
   ldpt :=  DataSetBrokerYTSTZSJJ.DataSet.FieldByName('approved_dept').AsString;  //审定人部门
   lPost :=  DataSetBrokerYTSTZSJJ.DataSet.FieldByName('approved_post').AsString; //审定人岗位
   lId :=  DataSetBrokerYTSTZSJJ.DataSet.FieldByName('approved_by').AsString;     //审定人
   trust:=  DataSetBrokerYTSTZSJJ.DataSet.FieldByName('No_').AsString;            //报告编号
   applicant_no:=  DataSetBrokerYTSTZSJJ.DataSet.FieldByName('applicant_no').AsString;  //委托号
   dwg_no :=  DataSetBrokerYTSTZSJJ.DataSet.FieldByName('dwg_no').AsString;             //图号
   lOrgURl := TOrgURL.Create(ldpt,lPost,lId);
   lFlowTask.Executors.Add(lOrgURL);
   lxh := DataSetBrokerYTSTZSJJ.DataSet.FieldByName('approved_by').DisplayText;
   lFlowTask.Subject:= '【探伤报告】编号为<'+trust+'>委托号为<'+applicant_no+'>,请-'+ lxh +'-审定。';
   DataSetBrokerYTSTZSJJ.DataSet.Edit ;
   DataSetBrokerYTSTZSJJ.DataSet.FieldByName ('approved_time').AsString :=sysutils.FormatDateTime ('yyyy-mm-dd hh:nn:ss',business.Data.SysSrv.sysservice.time);
   DataSetBrokerYTSTZSJJ.DataSet.FieldByName ('data_state').AsString :='审定' ;
   DataSetBrokerYTSTZSJJ.DataSet.ApplyUpdates ;
   DataSetBrokerYTSTZSJJ.DataSet.Refresh ;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-12 14:10:15 | 显示全部楼层
每执行到最后一句刷新就提示出错
回复 支持 反对

使用道具 举报

发表于 2009-11-12 14:13:09 | 显示全部楼层
为什么要刷新一下呢?
看看数据集其他事件中有没有写代码呢?
还有你把上面对流程任务的代码屏蔽一下看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-12 14:25:48 | 显示全部楼层
刷新是为了让状态为“审定”的数据部再显示
数据集其他事件上也没有代码
把对流程任务的代码屏蔽错误依旧,但把更改数据集的下面代码屏蔽后错误消失了
DataSetBrokerYTSTZSJJ.DataSet.Edit ;
   DataSetBrokerYTSTZSJJ.DataSet.FieldByName ('approved_time').AsString :=sysutils.FormatDateTime ('yyyy-mm-dd hh:nn:ss',business.Data.SysSrv.sysservice.time);
   DataSetBrokerYTSTZSJJ.DataSet.FieldByName ('data_state').AsString :='审定' ;
   DataSetBrokerYTSTZSJJ.DataSet.ApplyUpdates ;

应该是这段代码引起的,该怎么解决啊
回复 支持 反对

使用道具 举报

发表于 2009-11-12 14:37:59 | 显示全部楼层
procedure TMainForm.FlowBroker1AfterFlowOut(Sender: TObject; Command: TFlowOutCommand);
begin
  command.FuncTerminate :=false;
end;

procedure TMainForm.FlowBroker1BeforeFlowOut(Sender: TObject; Command: TFlowOutCommand);
begin
   DataSetBroker1.DataSet.Edit;
   DataSetBroker1.DataSet.FieldByName('zd2').AsString :='abc';
   DataSetBroker1.DataSet.ApplyUpdates;
   DataSetBroker1.DataSet.Refresh;
end;
这个是我写的列子,没有问题哦,其实你不用刷新只要ApplyUpdates那么你编辑的数据也会显示出来,你看一下有其他的字段的自动填充依赖这两个字段了呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-12 14:54:56 | 显示全部楼层
刷新是因为在窗体的数据集策略中限制了该窗体的数据范围为“审核”状态,在数据流转出去后将数据状态更改为“审定”,之后刷新数据集是希望流程后的数据能从该窗体中消失

没有其他的字段的自动填充是依赖这两个字段的

或者不刷新还有什么方法能实现我上面的要求
回复 支持 反对

使用道具 举报

发表于 2009-11-12 15:07:00 | 显示全部楼层
用Close和open数据集就可以了。
如果仅仅是界面上的表现,直接用Filter去过滤一下当前的数据集也可以
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-12 15:39:47 | 显示全部楼层
用Close和open试了一下,流转后的数据依然存在,但点击工具导航条上的刷新却可以实现,是什么原因啊,郁闷
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-14 18:44 , Processed in 0.050457 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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