起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 349|回复: 13

【搞定】运行20186第19楼的代码会出现如下图所示的错误。**

[复制链接]
发表于 2008-3-7 19:22:40 | 显示全部楼层 |阅读模式
运行20186第19楼的代码会出现如下图所示的错误。请问该如何避免?
只要删了那段代码?运行就正常了。我的那段代码是写在FlowBroker1AfterFlowOut下的。

1.gif

90.85 KB, 下载次数: 174

回复

使用道具 举报

发表于 2008-3-8 08:29:36 | 显示全部楼层
请问在FlowBroker1AfterFlowOut 这个事件上做啥动作了,把代码帖出来看看。
从错误信息看,应该是提交数据了吧。分析有两个原因,一个是where条件中的字段的值被其他的地方修改了,另一个原因应该是where语句中有浮点或者时间型字段(因为这些字段的精度问题),所以造成where过去找不到记录了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-10 09:53:49 | 显示全部楼层

代码如下所显示

var
    Feng: TFlowEngine;
    fparam:TLoadFlowParam;
    iquery: TQuery;
    guid: string;
    tparam: TLoadTaskParam;
begin
Feng:=TFlowEngine.Create();  //删除与本条业务数据相关的流程和任务数据
         fparam:=TLoadFlowParam.Create();
         tparam:=TLoadTaskParam.create();
         iquery:=TQuery.Create(nil);
      try
         iquery.ConnectionString:=BizObjConsts.cSysDatabaseConnectionString;
         iquery.CommandText:='select FFlowGuid from TFlowID where FID='''+DataSetBroker1.DataSet.FieldByName('MeetingID').AsString+'''';
         //iquery.CommandText:='select FFlowGuid from TFlowID where FID='''+FlowBroker1.FlowControl.Flow.ID+'''';
         iquery.Open;
         guid:=iquery.FieldByName('FFLowGUID').AsString;
         fparam.GUIDs.Add(guid);
         tparam.FlowGUIDs.Add(guid);
         Feng.DeleteFlows(fparam,tparam);
         Feng.DeleteTasks(tparam);
      finally
         Feng.Free;
         fparam.Free;
         iquery.Free;
      end;
我用在这里的目的是:
首先这是一个会议管理的功能,会议管理者向会议参加者发布会议任务消息,然后会议参加者反馈是否参加会议.这时可能有的人有别的原因不在公司不能参加会议,也不能反馈消息.当会议已经开完后之前给那些没有在公司的人发的通知参加会议的任务消息就成了冗余的消息了,这时就要删除那些人代办任务的消息.所以我就加上了上面的代码.但是一直会出现如上的错误.
回复 支持 反对

使用道具 举报

发表于 2008-3-10 10:20:18 | 显示全部楼层
看楼主的需求,应该是删除任务或者任务消息,而不是删除流程
Feng.DeleteFlows(fparam,tparam);
这句话是删除流程实例的,肯定不能删除的

另外,删除任务或者任务消息,也应该是删除没有处理的任务,而不是这个flowID下的所有任务
tparam要增加任务状态的条件
另外,当前任务也要注意了,因为在AfterFlowOut事件中,当前正在处理的任务也是未处理的,因此要注意排除当前环节正在处理的任务(可以给tparam增加环节的条件)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-10 10:30:08 | 显示全部楼层

那麻烦您帮忙修改一下这段代码

那麻烦您帮忙修改一下这段代码.这段代码我也是从帖子上找见的啊.另外因为本功能是流程的最后一个功能了.AfterFlowOut后该流程的所有消息都可以删除了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-10 10:33:16 | 显示全部楼层

您说的给tparam增加环节的条件

您说的给tparam增加环节的条件,请具体一点,最好是有个例子谢谢.
回复 支持 反对

使用道具 举报

发表于 2008-3-10 10:45:42 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-10 14:36:28 | 显示全部楼层

我将代码做了修改

我将代码作了如下修改,但是仍然出下图的错误.
Feng:=TFlowEngine.Create();  //删除与本条业务数据相关的流程和任务数据
         tparam:=TLoadTaskParam.create();
         iquery:=TQuery.Create(nil);
      try
         iquery.ConnectionString:=BizObjConsts.cSysDatabaseConnectionString;
         iquery.CommandText:='select FFlowGuid from TFlowID where FID='''+DataSetBroker1.DataSet.FieldByName('MeetingID').AsString+'''';
         iquery.Open;
         guid:=iquery.FieldByName('FFLowGUID').AsString;
         tparam.FlowGUIDs.Add(guid);
         tparam.ProcUnitIDs.Add('WSFCJ');//要删除的消息所对应的功能单元ID
         tparam.States:=[TTaskState.tsStarted, TTaskState.tsProcessing, TTaskState.tsWaiting];//要删除的消息的状态
         Feng.DeleteTasks(tparam);//删除任务消息
      finally
         Feng.Free;
         iquery.Free;
      end;
AfterFlowOut所在的本条正在处理的的消息不在tparam.ProcUnitIDs.Add('WSFCJ');

2.gif

48.04 KB, 下载次数: 153

回复 支持 反对

使用道具 举报

发表于 2008-3-10 14:53:42 | 显示全部楼层
这个错误应该是DataSetBroker没有设置对应的数据集吧
if not Assigned(DataSetBroker3) then
  raise Exception.Create('DataSetBroker3为空');
if not Assigned(DataSetBroker3.DataSet) then
  raise Exception.Create('DataSetBroker3.DataSet为空');
if DataSetBroker3.DataSet.ReadOnly then
  Dialogs.Showmessage('True')
else
  Dialogs.Showmessage('False');
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-10 15:55:29 | 显示全部楼层

上面的错误没了.但是发现根本不能删除冗余的信息并没有删除掉

上面的错误注释掉tparam.States:=[TTaskState.tsStarted, TTaskState.tsProcessing, TTaskState.tsWaiting]; 后就没有了
但是发现根本不能删除冗余的信息并没有删除掉.不知道什么原因啊.我想问一下  tparam.ProcUnitIDs.Add('WSFCJ'); 中的ProcUnitIDs是指流程环节的ID吧.
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-8 04:23 , Processed in 0.037971 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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