如何检查字段值然后触发DQL

时间:2013-05-28 07:12:55

标签: documentum

我的自定义类型和日期类型属性r_creation_date上有一些字符串类型属性。我想将它们全部用于搜索,以便随着更多字段输入值,结果将缩小。

我正在使用D2-Client 3.1并使用D2-Composer构建搜索属性页面和查询表单(我指定DQL)。

对于字符串类型字段的过滤我已经形成了这个DQL:

select * from my_custom_type
    where (strattrib1 like '%$value(strattribinput1)%') and
          ("strattrib2" like '%$value(strattribintput2)%') and
          ("strattrib3" like'$value(strattribintput3)%') and
          ("strattrib4" like '%$value(strattribintput4)%') and
          ("strattrib5" like '%$value(strattribintput5)%') and
          ("strattrib6" like '%$value(strattribintput6)%')

此处LIKE %有两个目的: 首先,无论何时输入某个字符串,都会检查该属性中该字符串的出现位置。 当没有输入时,它会考虑该属性中的所有值。这允许AND而不显式检查空输入。 (作为$value(strattrib1)<>''

现在我想将日期类型属性r_creation_date上的过滤器添加到此查询中。但是我无法得到如何做到这一点,因为我必须使用DATEDIFF()函数进行日期比较,并且必须在r_creation_date中明确检查没有输入,如下所示:

select * from my_custom_type
    where (strattrib1 like '%$value(strattribinput1)%') AND
          ("strattrib2" like '%$value(strattribintput2)%') AND
          ("strattrib3" like'$value(strattribintput3)%') AND
          ("strattrib4" like '%$value(strattribintput4)%') AND
          ("strattrib5" like '%$value(strattribintput5)%') AND
          ("strattrib6" like '%$value(strattribintput6)%') AND
          (DATEDIFF(day, "r_creation_date", DATE('$value(r_creation_date_intput)')) >= 0 AND $value(r_creation_date_input)<>'')          

如果用户未选择r_creation_date_input的任何日期,$value(r_creation_date_input)<>''会导致FALSE将整个查询评估为FALSE。因此,选择查询不会返回任何内容。

问题

  • 我该怎么做?
  • 有没有其他方法可以做到这一点?
  • 标准方法是什么?
  • 我想在日期字段上添加更多过滤器到同一个DQL。那可能吗?
  • 如何验证字符串属性的输入?我可以编写Java并将其附加到D2-Client吗?

1 个答案:

答案 0 :(得分:0)

其中一种方法就是这样

AND((DATEDIFF(天,&#34; r_creation_date&#34;,DATE(&#39; $ value(r_creation_date_intput)&#39;)OR $ value(r_creation_date_intput)=&#39;&#39; )

如果用户没有进入,则第二个条件将等于true,并且查询的所有其他部分都将正常工作。

但是,当用户输入为空时,Documentum通常会自动排除子句。例如,使用任务空间搜索表单Documentum会自动执行。我不确定D2,但也许它会起作用。