【问题标题】:Search in view results with multible Fields Xpages在具有多个字段 Xpages 的视图结果中搜索
【发布时间】:2014-02-15 16:03:49
【问题描述】:

我曾多次尝试在“搜索”视图中输入日期范围。 我在视图中放入搜索的搜索字符串如下。

compositeData.Operasjon = "ST-MOD"

" FIELD OprPlanGruppe_1 = " + compositeData.Operasjon + " AND FIELD OprDato_1 = " +

    dates.substring(0, dates.length() - 1);

结果是只使用最后一个键值对(FIELD OprDato_1 = 11.02.2014)进行过滤

孔代码如下:

    var idag:java.util.Date = new java.util.Date();
var cal:java.util.Calendar =java.util.Calendar.getInstance();
var dateFormat:java.text.SimpleDateFormat = new java.text.SimpleDateFormat("dd.MM.yyyy");

cal.set(java.util.Calendar.HOUR_OF_DAY, 0); // ! clear would not reset the hour of day !
cal.clear(java.util.Calendar.MINUTE);
cal.clear(java.util.Calendar.SECOND);
cal.clear(java.util.Calendar.MILLISECOND);

var dates = "";
var i;

for(i = 0; i < 7; i++){
    cal.set(java.util.Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek() + i);
    dates += dateFormat.format(cal.getTime()) + ",";
}

dates = dates.replace("undefined", "");
return " field OprPlanGruppe_1 = " + compositeData.Operasjon + " AND FIELD OprDato_1 = " + dates.substring(0, dates.length() - 1);

是否有可能在过滤查询中的字段后添加多个值?

例如:FIELD OprDato1 = 10.02.2014,11.02.2014

【问题讨论】:

  • @Frantisek:我不确定您所链接的问题是否真的与这里有关:这里我们被问及 XSP 中的 FT 搜索,那里的问题与 NotesDatabase.Search 相关在 LotusScript 中,使用公式语法...;我删除了“lotus-notes”标签以减少混淆
  • 其中一个问题可能是您使用的语法:使用FIELD OprDato1 = 10.02.2014, 11.02.2014 进行搜索会在OprDato111.02.2014 中找到任何字段中带有10.02.2014 的文档。如果您只想在该字段中搜索,则需要将该查询括在括号中:FIELD OprDato1 = (10.02.2014, 11.02.2014)
  • 我试图用括号括起来。结果相同

标签: xpages xpages-ssjs


【解决方案1】:

您希望在视图中显示所有在“OprDato_1”字段中具有当前周内日期的文档。您使用 xp:viewPanel 的“在视图结果中搜索”属性。它使用全文搜索并且必须具有full text search 的语法。您可以使用 ">=" 和 "

FIELD OprDato_1 >= 10.02.2014 AND FIELD OprDato_1 <= 16.02.2014

或更短为

[OprDato_1] >= 10.02.2014 AND [OprDato_1] <= 16.02.2014

计算搜索字符串的代码如下所示:

var cal:java.util.Calendar =java.util.Calendar.getInstance();
var dateFormat:java.text.SimpleDateFormat = new java.text.SimpleDateFormat("dd.MM.yyyy");
cal.set(java.util.Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
var firstDate = dateFormat.format(cal.getTime());
cal.set(java.util.Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek() + 6);
var lastDate = dateFormat.format(cal.getTime());
return "FIELD OprPlanGruppe_1 = " + compositeData.Operasjon + 
       " AND FIELD OprDato_1 >= " + firstDate + 
       " AND FIELD OprDato_1 <= " + lastDate

此代码计算当前周的日期范围。您可以将cal 设置为任何其他日期,然后日期范围将是该日期的周。

【讨论】:

  • 我发现 OprDate_1 字段的类型是字符串而不是日期。如果不将字符串转换为日期,则无法将字符串与日期进行比较。不能直接在 ftsearch 中执行此操作。用于将文本转换为日期。
  • 如果您必须保留 OprDate_1 中的文本,您可以创建如下搜索字符串:... AND ([OprDato_1] = "10.02.2014" OR [OprDato_1] = "11.02.2014" OR ... OR [OprDato_1] = "16.02.2014")。但是,最好将搜索字段转换为日期,因为它会独立于本地设置。在字符串中保存日期和时间总是“危险的”。
  • @user2599699:你能让它运行吗?现在可以全文搜索了吗?
  • 是的。我必须将日期导入为 DateTime。通过 session.createDateTime。现在我可以搜索日期比较。由于某种原因,这只能在 xPage 中实现。不在 Lotus 视图中。我猜数据库以某种方式损坏了。
  • 很高兴您的 XPage 可以进行全文搜索。奇怪的是,Notes 客户端中的全文搜索不显示相同的结果...
猜你喜欢
  • 1970-01-01
  • 2016-10-16
  • 1970-01-01
  • 2017-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多