起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 187|回复: 6

【结帖】请解释新闻公告过滤条件部分内容?**

[复制链接]
发表于 2008-1-24 12:29:48 | 显示全部楼层 |阅读模式
lFilter := ' ftype = ''NEWSPLACARDDEAL'' ';(1)确定显示的是“新闻公告”的任务)
  。。。。。。

  begin
    lFilter := lFilter + SysUtils.Format('and TTask.FPLANSTARTTIME <= ''%s''',
                             [SysUtils.FormatDateTime('yyyy-mm-dd hh:mm:ss', sysutils.now())]);
    lFilter := lFilter + SysUtils.Format('and TTask.FPLANFINISHTIME >= ''%s''',
                             [SysUtils.FormatDateTime('yyyy-mm-dd hh:mm:ss', sysutils.now())]); (1)这段代码确定了新闻的时间范围。在新闻开始,和结束之间的新闻将被显示
---------------------------------------------------------
lFilter := lFilter + 'and (TTASK.FGUID IN '+
                '     (SELECT TTASKMESSAGE.FTASKGUID '+
                '         FROM TTASKMESSAGE '+
                '        WHERE (TTASKMESSAGE.FSTATE IN '+
//                '              (''tmsSend'', ''tmsReceived'', ''tmsProcessing'')) '+  
                '               (''tmsFinished'')) '+    {(A)??这里怎么查的是已经完成的啊??}
                '          AND (TTASKMESSAGE.FRORGURL IN ('+DoGetQueryURLStr(PersonMemberAndParentURLs)+') or '+
                '              (TTASKMESSAGE.FRORGURL = ''\ROOT\_UNEXIST_.OGN\.DPT\.PTM\.PSM'' and TTASKMESSAGE.FROGN = '''+lorg+''' )) ) '+
{(B) 上面好像说是:如果选择的是组织机构,那么看看当前登录的人是否在该机构下面,如果是就应该显示该条数据给这个人。OR,组织机构是当前登录的机构,并且人员成员是当前登录人员,也就是发送目标类型是人员成员的。}
                '  or (TTASK.FGUID IN '+
                '     (SELECT T1.FGUID '+
                '         FROM TTASK T1 '+
                '        WHERE (T1.FSTATE IN (''tsStarted'', ''tsProcessing'')) '+
                '          AND ((T1.FSDEPT = '''+lDept+''') AND (T1.FSPOSITION = '''+lPosition+''') AND '+
                '              (T1.FSPERSON = '''+lPerson+'''))))) ';
(C: 这段说的是:还有那些 状态是tsStarted 和tsProcessing ,且 部门,岗位是当前登录的人)
--------------------------------
(A,B,C)是我的理解:  其中部分我理解,还有不理解的。
比如为什么查的是已经完成的啊??、为什么还要显示状态是tsStarted 和tsProcessing 的??为什么要加上TTASKMESSAGE.FROGN = '''+lorg+'''   所在机构的限制条件。??
TTASKMESSAGE.FRORGURL = ''\ROOT\_UNEXIST_.OGN\.DPT\.PTM\.PSM''  ??看不懂这是什么写法??
回复

使用道具 举报

 楼主| 发表于 2008-1-24 13:10:50 | 显示全部楼层

用Debug 看了后,得到下面的语句!

ftype = 'NEWSPLACARDDEAL'
and
计划开始时间 <= '2008-01-24 12:33:36'and 计划完成时间>= '2008-01-24 12:33:36' //在任务表中查询显示那些开始时间在今天一前 ,结束时间在今天以后的新闻公告。
and    //对上面查出的总体GUID,再进行过滤
(任务ID IN  //任务id必须在下面的限制内:那些在业务信息表中

(
SELECT  任务消息表.任务ID  FROM  任务消息表
  WHERE (任务状态 IN  (‘完成'))  
  AND (TTASKMESSAGE.FRORGURL IN
('\ROOT\JG1.OGN\BM1.DPT\GW1.PTM\RY1.PSM' , //查找给了当前登录人。。。。。。。。。。。的消息  //这四种就是过滤了:可以看到父机构得到的通知。关键是在时间和类型范围的基础上,挑出了当前登录人的任务ID)
'\ROOT\JG1.OGN\BM1.DPT\GW1.PTM' , //给当前登录人岗位。。。。。。。。。。。。。。。。。
'\ROOT\JG1.OGN\BM1.DPT' ,//给当前登录人部门。。。。。。。。。。。。。。。。。。。。。。
'\ROOT\JG1.OGN') //给当前登录人机构。。。。。。。。。。。。。。。。。。。。。。。。。。。
or  
     { (或者那些)加上那些当前登录人所属机构的,'\ROOT\_UNEXIST_.OGN\.DPT\.PTM\.PSM' 什么意思??}      
  (TTASKMESSAGE.FRORGURL = '\ROOT\_UNEXIST_.OGN\.DPT\.PTM\.PSM' and TTASKMESSAGE.FROGN = 'JG1' )) )  
or //又或着 //任务id必须在下面的限制内


{(或者加上那些)任务表中,处理状态是“tsStarted', 'tsProcessing'“并且 ,部门,和岗位是空,人员是当前登录人员的 任务。什么意思??}
(任务ID IN  
    (SELECT T1.FGUID   FROM TTASK T1  WHERE (T1.FSTATE IN ('tsStarted', 'tsProcessing'))           AND ((T1.FSDEPT = '') AND (T1.FSPOSITION = '') AND               (T1.FSPERSON = 'RY1')))))
回复 支持 反对

使用道具 举报

发表于 2008-1-25 10:25:11 | 显示全部楼层
比如为什么查的是已经完成的啊??、为什么还要显示状态是tsStarted 和tsProcessing 的??
新闻公告产生的任务状态就是已完成状态,至于查询条件里也包含了'tmsSend'', ''tmsReceived'', ''tmsProcessing''状态当时应该是出于考虑严谨,实际新闻公告不会有这样的状态。

为什么要加上TTASKMESSAGE.FROGN = '''+lorg+'''   所在机构的限制条件。??
TTASKMESSAGE.FRORGURL = ''\ROOT\_UNEXIST_.OGN\.DPT\.PTM\.PSM''  ??看不懂这是什么写法??

当发送新闻公告的时候如果选择的发布范围中存在岗位或部门不存在的人员的时候任务消息表的FRorgURL字段存的就是\ROOT\_UNEXIST_.OGN\.DPT\.PTM\.PSM,也是出于严谨考虑,在新闻公告中也不会存在这样的任务。
加TTASKMESSAGE.FROGN = '''+lorg+''' 这个条件是为了限制当前机构。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-25 11:07:40 | 显示全部楼层
我总结一下:
(1)lFilter := ' ftype = ''NEWSPLACARDDEAL'' ';(1)确定显示的是“新闻公告”的任务)
  。。。。。。

  begin
    lFilter := lFilter + SysUtils.Format('and TTask.FPLANSTARTTIME <= ''%s''',
                             [SysUtils.FormatDateTime('yyyy-mm-dd hh:mm:ss', sysutils.now())]);
    lFilter := lFilter + SysUtils.Format('and TTask.FPLANFINISHTIME >= ''%s''',
                             [SysUtils.FormatDateTime('yyyy-mm-dd hh:mm:ss', sysutils.now())]); (1)这段代码确定了新闻的时间范围。在新闻开始,和结束之间的新闻将被显示
------》这段找出的是在这个时间范围内的所有人所提交的任务(新闻公告),下面要对这些过滤出登录人,及其父辈的新闻公告。
(2)lFilter := lFilter + 'and (TTASK.FGUID IN '+
                '     (SELECT TTASKMESSAGE.FTASKGUID '+
                '         FROM TTASKMESSAGE '+
                '        WHERE (TTASKMESSAGE.FSTATE IN '+
//                '              (''tmsSend'', ''tmsReceived'', ''tmsProcessing'')) '+  
                '               (''tmsFinished'')) '+    {(A)??这里怎么查的是已经完成的啊??}
                '          AND (TTASKMESSAGE.FRORGURL IN ('+DoGetQueryURLStr(PersonMemberAndParentURLs)+')  '+
-----------------》这一段就是找出那些发给自己的,和自己上层机构的新闻公告,一直能追溯到机层次。按说现在已经正确地找出了所有数据。
(3)只是为了严谨,又进行了下面的过滤,这些过滤的条件对于新闻公告来说,不存在这样的条件的值。由于用的是"or"所以,不会在前面过滤处理的记录中增加新的记录。
or  (TTASKMESSAGE.FRORGURL = ''\ROOT\_UNEXIST_.OGN\.DPT\.PTM\.PSM'' and TTASKMESSAGE.FROGN = '''+lorg+'''
以及 or (TTASK.FGUID IN '+
                '     (SELECT T1.FGUID '+
                '         FROM TTASK T1 '+
                '        WHERE (T1.FSTATE IN (''tsStarted'', ''tsProcessing'')) '+
                '          AND ((T1.FSDEPT = '''+lDept+''') AND (T1.FSPOSITION = '''+lPosition+''') AND '+
                '              (T1.FSPERSON = '''+lPerson+'''))))) ';

你看看我说的对不对?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-25 11:31:37 | 显示全部楼层
有个小问题:
or (TTASK.FGUID IN '+
                '     (SELECT T1.FGUID '+
                '         FROM TTASK T1 '+
                '        WHERE (T1.FSTATE IN (''tsStarted'', ''tsProcessing'')) '+
                '          AND ((T1.FSDEPT = '''+lDept+''') AND (T1.FSPOSITION = '''+lPosition+''') AND '+
                '              (T1.FSPERSON = '''+lPerson+'''))))) ';
这段是找出自己发的公告吧??(虽然''tsStarted'', ''tsProcessing''是不存在的);
但是这段代码执行结果:((T1.FSDEPT = '') AND (T1.FSPOSITION = '') AND               (T1.FSPERSON = 'RY1'  其中 的部门 ,岗位 是空的。而任务提交任务表这两个字段都不是空的,这个过滤即使有数据,也过滤不出来啊?写的是不是有问题? 在系统的代码中 部门和岗位都没有给予赋值???是不是写错了??
回复 支持 反对

使用道具 举报

发表于 2008-1-25 11:57:40 | 显示全部楼层
4楼,理解是对的。
5楼,新闻公告最早是过滤包含本人提交的任务,后来已经改成不包含本人提交的了,所以5楼这一块代码实际已经没有意义了,可以注释掉。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-1-26 07:59:03 | 显示全部楼层
明白了
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-6 01:03 , Processed in 0.038499 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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