起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 1337|回复: 40

提交流程弹出流程处理窗体速度很慢!!急!!!**

[复制链接]
发表于 2007-10-9 15:01:19 | 显示全部楼层 |阅读模式
procedure TFlowOutForm.RefreshFlowTaskNodes;
var
  I: Integer;
  lFlowTask: TFlowTask;
  lNode: TFlowTaskNode;
begin
  for I := 0 to FlowTaskGraph.NodeCount - 1 do
  begin
    lNode := TFlowTaskNode(FlowTaskGraph.Nodes[I]);
    if lNode.ProcUnit.Kind in Flow.SProcActivityKinds then
    begin
      lFlowTask := FlowTasks.FindFlowTask(lNode.ProcUnit);
      lNode.Selected := (lFlowTask <> nil) and (lFlowTask.Executors.Count > 0);
    end
    else
      lNode.Selected := False;
  end;
end;


跟踪了一下,发现在这边会停很久,特别是在 lNode.Selected := (lFlowTask <> nil) and (lFlowTask.Executors.Count > 0);
这一边会停很久,正常情况下第一次要近15秒,第二次之后就很快了。

请给出解决方案,急!!!!

我们的版本是 2401 的,目前组织机构里面的人员有 1000个左右

而我们最终的人员将会有3000个左右,所以速度影响很大,请尽快处理!!!!!!!!!!!!
回复

使用道具 举报

发表于 2007-10-10 15:12:27 | 显示全部楼层
要看你的执行规则怎么定义了
执行规则中的组织机构表达式是怎么写的
执行规则中的组织机构表达式执行结果有多少个组织单元?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-11 15:08:37 | 显示全部楼层
这样写的:OrgChildren(OrgManager(GetProcUnitExecutorPosition('', True), '搜查_A', True), '', True, True) AND GetProcUnitExecutorDept('', True)

跟这样写:OrgChildren(OrgKey('', 'PCSLD', ''), '', True, False) AND GetProcUnitExecutorDept('', True)

两个结果都是一样,很慢。取的是当前操作者的一上级管理者。结果出来的都是四个人,但速度很慢。

急!给个详细的方案。。。。。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-12 11:26:18 | 显示全部楼层
人呢?哪去了。!!!!!!!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-12 11:39:10 | 显示全部楼层
来人啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-12 14:43:43 | 显示全部楼层
???????????????????????????????????????????????
回复 支持 反对

使用道具 举报

发表于 2007-10-12 17:24:15 | 显示全部楼层
这个问题比较复杂了
请楼主把你们系统数据库的组织机构相关表发到support@justep.com
我们直接用你们的数据看看,是否可以给出替代的组织机构表达式

组织机构相关表是TORG*  一共是四个
回复 支持 反对

使用道具 举报

发表于 2007-10-12 17:26:00 | 显示全部楼层
还有就是告诉我
GetProcUnitExecutorPosition('', True)  得到的岗位ID
GetProcUnitExecutorDept('', True)得到的部门ID
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-17 11:16:34 | 显示全部楼层
跟踪了一下后台的SQL语句,发现问题所在:


      
      
       SELECT FGUID
          FROM TORGSYSTEM
         WHERE (FGUID IN
               (
               
               SELECT b.FGUID
                   FROM TORGSYSTEM b, TORGSYSTEM a
                  where a.FGUID IN
                        (SELECT FGUID
                           FROM TORGSYSTEM
                          WHERE FGUID IN
                                (SELECT OI1.FGUID
                                   FROM TORGINDEX OI1, TORGSYSTEM OS1
                                  WHERE (OI1.FID =
                                        'OrgUnit.Subordination.变更强制措施_A')
                                    AND (OS1.FGUID IN
                                        (SELECT FGUID
                                            FROM TORGSYSTEM
                                           WHERE FGUID IN
                                                 (SELECT b.FGUID
                                                    FROM TORGSYSTEM b,
                                                         TORGSYSTEM a
                                                   where a.FGUID IN
                                                         (SELECT FGUID
                                                            FROM TORGSYSTEM
                                                           WHERE FGUID IN
                                                                 (SELECT FGUID
                                                                    FROM TORGSYSTEM
                                                                   WHERE (FDEPT = '' or
                                                                         FDEPT is null)
                                                                     and (FPOSITION =
                                                                         'BAMJ')
                                                                     and (FPERSON = '' or
                                                                         FPERSON is null)))
                                                     AND ((((b.FPATH LIKE
                                                         a.FPATH || a.FID ||
                                                         a.FKIND || '\%') OR
                                                         ((a.FKIND = '.PTN') AND
                                                         ((b.FID = a.FID AND
                                                         b.FKIND = '.PTM') OR
                                                         (b.FPATH || b.FID ||
                                                         b.FKIND LIKE
                                                         '%\' || a.FID ||
                                                         '.PTM' || '\%')))) OR
                                                         (a.FPATH || a.FID ||
                                                         a.FKIND =
                                                         b.FPATH || b.FID ||
                                                         b.FKIND))))))
                                    AND (OS1.FSPACE || OS1.FID || OS1.FKIND =
                                        UPPER(OI1.FVALUE))))
                    AND ((((b.FPATH LIKE a.FPATH || a.FID || a.FKIND || '\%') OR
                        ((a.FKIND = '.PTN') AND
                        ((b.FID = a.FID AND b.FKIND = '.PTM') OR
                        (b.FPATH || b.FID || b.FKIND LIKE
                        '%\' || a.FID || '.PTM' || '\%')))) OR
                        (a.FPATH || a.FID || a.FKIND =
                        b.FPATH || b.FID || b.FKIND)))
               
               
               
               
               ) AND
               FGUID IN
               (
               
               SELECT b.FGUID
                   FROM TORGSYSTEM b, TORGSYSTEM a
                  where a.FGUID IN
                        (SELECT FGUID
                           FROM TORGSYSTEM
                          WHERE FGUID IN
                                (SELECT FGUID
                                   FROM TORGSYSTEM
                                  WHERE (FDEPT = '350302520000')
                                    and (FPOSITION = '' or FPOSITION is null)
                                    and (FPERSON = '' or FPERSON is null)))
                    AND ((((b.FPATH LIKE a.FPATH || a.FID || a.FKIND || '\%') OR
                        ((a.FKIND = '.PTN') AND
                        ((b.FID = a.FID AND b.FKIND = '.PTM') OR
                        (b.FPATH || b.FID || b.FKIND LIKE
                        '%\' || a.FID || '.PTM' || '\%')))) OR
                        (a.FPATH || a.FID || a.FKIND =
                        b.FPATH || b.FID || b.FKIND)))
                        
               
               ) AND
               ((UPPER(FFILENAME) LIKE '%.PSM')) and FDELETELEVEL = 0)
           AND (FDELETELEVEL = 0)
      
      


这一段取值,差不多要三秒,可取回四个结果
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-17 11:18:57 | 显示全部楼层
select 0 as FILEINDEX,
       A.*,
       (select COUNT(FGUID)
          from TORGSYSTEM
         where FCLIENTACCOUNT = 'JUSTEP.COM'
           and FPARENTGUID = A.FGUID
           and FDELETELEVEL = 0) AS CHILDRENCOUNT
  from TORGSYSTEM A
where FCLIENTACCOUNT = 'JUSTEP.COM'
   and FGUID IN
       ('52D20F7519764B7991A6A0C73559DA78','7BB4D17463744D5E9D773165B65B30E7',
       '92070B5D28674550A150608108292395','C638AE67164F4EC88877F3C348234513')



如果把这四个结果写到临时表中,再从临时表中来读值,如上,则只要一秒。


而你们的语句是把上一面写到这一段的最后这个IN里面,形成多重 IN 欠套,能不慢才怪了。

如果欠套进去,则要 14 秒才能出现结果。晕。


上一面如果分成三段来写的话,也只要 1 秒就可解决
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-6-29 04:01 , Processed in 0.041813 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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