起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 277|回复: 7

[发现]关于代码控制流程的BUG提交

[复制链接]
发表于 2007-4-10 10:28:17 | 显示全部楼层 |阅读模式
问题已在word文档描述,由于问题严重且时间紧张,请求尽快解决,先谢过!

justep bug.rar

55.08 KB, 下载次数: 76

回复

使用道具 举报

 楼主| 发表于 2007-4-10 10:45:40 | 显示全部楼层
//代码生成lRange
lRange:='';
dsbRequireDetail.DataSet.First;
for icount:=0 to dsbRequireDetail.Dataset.RecordCount -1 do
begin
  if dsbRequireDetail.Dataset.FieldByName['IsAgree'].AsInteger=0 then
  begin
    if lRange ='' then
      lRange:='OrgChildren(OrgKey('''+ dsbRequireDetail.DataSet.FieldByName['DepartmentId'].AsString +''','''',''''), '''', True, False)'
    else
      lRange:=lRange + ' or '+'OrgChildren(OrgKey('''+ dsbRequireDetail.DataSet.FieldByName['DepartmentId'].AsString +''','''',''''), '''', True, False)';
    end;
  dsbRequireDetail.DataSet.Next;
end;
//结束生成
//代码控制下一环节的执行人员
lFlowTask:=Command.FlowTasks[0];
if lFlowTask <> nil then
begin
  lFlowTask.ExecutorAmount:=TTaskExecutorAmount.teaAll;
  lFlowTask.AllowExecutorRange:=lRange;
  lFlowTask.ExecutorRange:=lRange;
end;
//结束代码控制下一环节的执行人员
现在的问题是不同的用户执行这一段代码获得的结果会截然不同,而lRange是相同的。

点流转应该是到财务部和生计科的两个主任那里,大部分用户使用这个功能都是正确的,但是孙露这个用户使用这个功能就会出现异常

这时候点添加

可以看到信息中心的孙露根本没有在可执行人员当中。
客户那边几十个用户当中有3个出这样的问题。
请告诉我是我的代码问题还是系统问题,我们现在使用的版本是2617,代码是写在业务信息上的FlowBroker的onCreateFlowOutFlowTasks事件上。


在调试过程中我们发现另外一个问题。

在这个地方设置断点,运行到断点时如果直接选择运行(F9),看到的结果和上面的一样,但是如果执行了一次逐语句执行(F7),再运行下去的话,可以看到

lFlowTask.AllowExecutorRange:=lRange;
lFlowTask.ExecutorRange:=lRange;
这两句根本没有起作用。
回复 支持 反对

使用道具 举报

发表于 2007-4-10 11:22:42 | 显示全部楼层
你在赋 lFlowTask.AllowExecutorRange:=lRange; 之前清一下接受者看一下,参考代码 lFlowTask.Executors.Clear;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-10 13:35:26 | 显示全部楼层
lFlowTask.Executors.Clear;
这样的话,列表是空的。
加上后面代码如下:
          for iCount:=0 to lFlowTask.AllowExecutors.Count -1 do
          begin
            lFlowTask.Executors.Add(lFlowTask.AllowExecutors.Items[iCount]);
          end;  
会出现内存错误,以上代码注销掉就正常。
回复 支持 反对

使用道具 举报

发表于 2007-4-10 14:05:48 | 显示全部楼层
这样试一下
lFlowTask := Command.FlowTasks[0];
  if lFlowTask <> nil then
  begin
    lFlowTask.ExecutorAmount:=TTaskExecutorAmount.teaAll;
    lFlowTask.AllowExecutorRange := '';
    lFlowTask.AllowExecutorRange:=lRange;
    lFlowTask.ExecutorRange:= '';
    lFlowTask.ExecutorRange:=lRange;
  end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-10 20:24:28 | 显示全部楼层
楼上的写法我认为是多余的。。。
回复 支持 反对

使用道具 举报

发表于 2007-4-11 08:35:14 | 显示全部楼层
请按照http://bbs.justep.com/forum.php?mod=viewthread&tid=9780
里面的写法是比较安全的!
回复 支持 反对

使用道具 举报

发表于 2007-4-11 08:44:59 | 显示全部楼层
你也可以先取得部门列表再调用
http://bbs.justep.com/forum.php?mod=viewthread&tid=9962
里面的方法,这个方法的缺点是如果部门超过一定的数量(大概50以上)就会出指针错误!
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-30 03:06 , Processed in 0.045653 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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