1

我的自定义类型和日期类型属性上有一些字符串类型属性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 %有双重目的:首先,只要输入了一些字符串,它就会检查该字符串在该属性中的出现。当没有输入时,它会考虑该属性中的所有值。这允许ANDing 无需显式检查空输入。(作为$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 吗?
4

1 回答 1

0

一种方法是这样的

AND ((DATEDIFF(day, "r_creation_date", DATE('$value(r_creation_date_intput)') OR $value(r_creation_date_intput) = '')

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

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

于 2013-10-31T10:59:42.747 回答