起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 1806|回复: 45

【结】严重BUG**

[复制链接]
发表于 2008-10-13 12:31:59 | 显示全部楼层 |阅读模式
流程流转前,出现错误提示:cannot foucs a disabled or invisible window
电话沟通时说是代码错误,应该是窗体的显示属性设置引起的.
代码里只有一段改变数据业务状态的代码,不显示任何窗体,
如:FlowBrokerAfterFlowOut中:
    TSQLDataset(InfoBroker.Info.DataSetByID('CommonInfo')).Edit;
    TSQLDataset(InfoBroker.Info.DataSetByID('CommonInfo')).FieldByName('Status').AsString := 'B';
    TSQLDataset(InfoBroker.Info.DataSetByID('CommonInfo')).FieldByName('Def1').AsString := '1';
    TSQLDataset(InfoBroker.Info.DataSetByID('CommonInfo')).ApplyUpdates;


此问题无规律的出现,而且是大面积的出现,只有关掉IE再打开才可能能使用.
经过跟踪代码,此错误是流程流转窗体在打开前报出来的,请尽快给出解决办法!!
回复

使用道具 举报

发表于 2008-10-13 13:16:23 | 显示全部楼层
afterflowout发生在流转窗体关闭后!

你注释掉这段代码还有错误吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-13 13:51:38 | 显示全部楼层
确实和这段代码没关系,是在弹出窗体时报的,代码中除此之外没有和流程相关的代码,将与流程相关的代码全部取掉,还是有可能报出来!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-13 14:00:14 | 显示全部楼层
另外,以前从来没出现过这个问题,自从用3002版本以来,才出现了这样的问题.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-13 14:17:02 | 显示全部楼层
现在越来越多的地方出现了这种错误,请尽快给出解决方案!
回复 支持 反对

使用道具 举报

发表于 2008-10-13 14:19:09 | 显示全部楼层
这个错误的出现有什么规律吗?

把错误的调用栈贴出来看看。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-13 14:49:19 | 显示全部楼层
static function TFLOWOUTFORM.EditFlowOutFlowTasks(AContext: TContext;
  AFlowTasks, AAllowFlowTasks: TFlowTasks; AFlowTaskGraph: TFlowTaskGraph;
  const AShowUnPassNode: Boolean): Boolean;
begin
  with TFlowOutForm.Create(AContext) do
    try
      FlowTasks := AFlowTasks;
      AllowFlowTasks := AAllowFlowTasks;

      ShowUnPassNode := AShowUnPassNode;
      FlowTaskGraph := AFlowTaskGraph;

      Result := (ShowModal = Business.Forms.Controls.mrOk);
    finally
      Free;
    end;
end;

function TBASESYSTEMINTERFACE.EditFlowOutFlowTasks(ACommand: TFlowOutCommand): Boolean;
begin
  if ACommand.FlowControl.CurrentProcUnit.ID = '' then
    Result := TAdHocFlowTasksForm.EditAdHocFlowOutFlowTask(Self.Context, ACommand.FlowTasks)
  else
    Result := TFlowOutForm.EditFlowOutFlowTasks(Self.Context, ACommand.FlowTasks,
      ACommand.AllowFlowTasks, ACommand.FlowTaskGraph, True);
end;

function TPrepareFlowTasksBizMessageHandler.DoPrepareFlowCommand(ACommand: TFlowCommand;
  const AAbstractSystemFormLibrary: TAbstractSystemInterface): Boolean;
var
  lCommand: TFlowTaskCommand;
begin
  Result := True;
  lCommand := ACommand as TFlowTaskCommand;
  if not lCommand.UserConfirm then
    Exit;
  TSystemCore.FlowManager.doOnPrepareFlowTasksCommand(lCommand);
  case lCommand.ID of
    Flow.FLC_FLOWOUT:
      Result := AAbstractSystemFormLibrary.EditFlowOutFlowTasks(ACommand as TFlowOutCommand);
    Flow.FLC_FLOWBACK:
      Result := AAbstractSystemFormLibrary.EditFlowBackFlowTasks(ACommand as TFlowBackCommand);
    Flow.FLC_FLOWTRANSMIT:
      Result := AAbstractSystemFormLibrary.EditFlowTransmitFlowTasks(ACommand as TFlowTransmitCommand);
    Flow.FLC_FLOWNOTIFY:
      Result := AAbstractSystemFormLibrary.EditFlowNotifyFlowTasks(ACommand as TFlowNotifyCommand);
  end;
end;

111.jpg

15.38 KB, 下载次数: 419

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-13 14:50:44 | 显示全部楼层
流程流转时,调用这个showmodal时出的错
回复 支持 反对

使用道具 举报

发表于 2008-10-13 17:44:23 | 显示全部楼层
TmainForm: MyExProc的代码在哪里?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-14 09:51:20 | 显示全部楼层
是自定义 的处理异常的
     TempProc:=  Forms.Application.OnException ;  //记录下原来的异常处理程序
     Forms.Application.OnException:= MyExProc;
代码很简单:
procedure TMainForm.MyExProc(Sender: Business.System.TObject; E: Business.System.Exception);
var
   msg:string;
begin
     msg:=e.Message;
     //Cannot focus a disabled or invisible window
     if strUtils.AnsiContainsStr(msg,'Cannot focus a disabled or invisible window') then
       exit;
     if strUtils.AnsiContainsStr(msg,'当前修改的数据已经被其他用户修改') then
     begin
           //在这里处理你需要处理的异常。Xxx为你要截获的异常的信息。
           jsdialogs.ShowWarning('当前修改的数据已经被其他用户修改,不能进行保存操作.'+#10#13+'请刷新数据后重新操作.','错误');

     end
     else
         jsdialogs.ShowWarning(msg,'错误');

end;
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-29 02:34 , Processed in 0.045912 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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