我有一个带有搜索屏幕的自定义控件,允许用户选择最多六个不同字段中的任何一个进行搜索。除了两个日期字段之外,我没有遇到任何其他字段工作的问题。他们可以填写开始日期和结束日期,也可以只填写其中之一。相当标准的东西,但我不知道如何编写代码来使查询工作并让它在涉及日期时进行搜索。
var tmpArray = new Array("");
var cTerms = 0;
if(requestScope.cmbSendTo != null & requestScope.cmbSendTo != "") {
a = @Right(requestScope.cmbSendTo, "(");
b = @Left(a,3);
tmpArray[cTerms++] = "(FIELD Mnemonic = \"" + b + "\")";
}
if(requestScope.edtFrom != & requestScope.edtFrom != "") {
tmpArray[cTerms++] = "(FIELD From = \"" + requestScope.edtFrom + "\")";
}
//**************************************************************************
if(requestScope.edtDateRangeFrom != null & requestScope.edtDateRangeFrom != "") {
tmpArray[cTerms++] = "(FIELD DeliveredDate >= \"" + requestScope.edtDateRangeFrom + "\")";
}
if(requestScope.edtDateRangeTo != null & requestScope.edtDateRangeTo != "") {
tmpArray[cTerms++] = "(FIELD DeliveredDate <= \"" + requestScope.edtDateRangeTo + "\")";
}
//**************************************************************************
if(requestScope.edtOriginal != null & requestScope.edtOriginal != "") {
tmpArray[cTerms++] = "(FIELD SourceFilename = \"" + requestScope.edtOriginal + "\")";
}
if(requestScope.edtCaptiva != null & requestScope.edtCaptiva != "") {
tmpArray[cTerms++] = "(FIELD Filename = \"" + requestScope.edtCaptiva + "\")";
}
qstring = tmpArray.join(" AND ").trim();
requestScope.queryString = qstring;
return qstring
如有任何帮助,我们将不胜感激
此屏幕背后的想法取自此视频: XPages View 控件 - 添加全文搜索 - http://www-10.lotus.com/ldd/ddwiki.nsf/dx/XPagesViewControlAddFullTextSearch.htm
最佳答案
行 if(requestScope.edtFrom != & requestScope.edtFrom != "") {
不完整。您错过了要测试的部分。我认为它缺少空检查,因此应该是:
if(requestScope.edtFrom != null & requestScope.edtFrom != "") {
此外,您需要格式化日期以返回您期望的查询内容(例如 MM/dd/yyyy)。 inputText 控件中的格式仅适用于视觉格式,而不适用于实际内容的格式。
最后,您需要删除日期周围的引号。
以下基于您的代码的代码示例将返回不带格式的日期,然后返回具有正确格式的日期:
<xp:button value="Label" id="button1">
<xp:eventHandler event="onclick" submit="true" refreshMode="partial" refreshId="computedField1"></xp:eventHandler>
</xp:button>
<xp:inputText id="edtDateRangeFrom" value="#{requestScope.edtDateRangeFrom}">
<xp:this.converter>
<xp:convertDateTime type="date"></xp:convertDateTime>
</xp:this.converter>
<xp:dateTimeHelper></xp:dateTimeHelper>
</xp:inputText>
<xp:text escape="true" id="computedField1">
<xp:this.value><![CDATA[#{javascript:var tmpArray = new Array("");
var cTerms = 0;
if(requestScope.edtDateRangeFrom != null & requestScope.edtDateRangeFrom != "") {
tmpArray[cTerms++] = "(FIELD DeliveredDate >= \"" + requestScope.edtDateRangeFrom + "\")";
var dateFormatter = new java.text.SimpleDateFormat( "MM/dd/yyyy" );
var formattedDate = dateFormatter.format( requestScope.edtDateRangeFrom );
tmpArray[cTerms++] = "(FIELD DeliveredDate >= " + formattedDate + ")";
}
qstring = tmpArray.join(" AND ").trim();
requestScope.queryString = qstring;
return qstring}]]>
</xp:this.value>
</xp:text>
它将返回以下内容,其中第二部分是您要查找的格式:
(FIELD DeliveredDate >= "Fri Apr 27 12:00:00 CEST 2012")
AND (FIELD DeliveredDate >= 04/27/2012)
这是包含所有这些更新的代码:
var tmpArray = new Array("");
var cTerms = 0;
var dateFormatter = new java.text.SimpleDateFormat( "MM/dd/yyyy" );
var formattedDate = "";
if(requestScope.cmbSendTo != null & requestScope.cmbSendTo != "") {
a = @Right(requestScope.cmbSendTo, "(");
b = @Left(a,3);
tmpArray[cTerms++] = "(FIELD Mnemonic = \"" + b + "\")";
}
if(requestScope.edtFrom != null & requestScope.edtFrom != "") {
tmpArray[cTerms++] = "(FIELD From = \"" + requestScope.edtFrom + "\")";
}
if(requestScope.edtDateRangeFrom != null & requestScope.edtDateRangeFrom != "") {
formattedDate = dateFormatter.format( requestScope.edtDateRangeFrom );
tmpArray[cTerms++] = "(FIELD DeliveredDate >= " + formattedDate + ")";
}
if(requestScope.edtDateRangeTo != null & requestScope.edtDateRangeTo != "") {
formattedDate = dateFormatter.format( requestScope.edtDateRangeTo );
tmpArray[cTerms++] = "(FIELD DeliveredDate <= " + formattedDate + ")";
}
if(requestScope.edtOriginal != null & requestScope.edtOriginal != "") {
tmpArray[cTerms++] = "(FIELD SourceFilename = \"" + requestScope.edtOriginal + "\")";
}
if(requestScope.edtCaptiva != null & requestScope.edtCaptiva != "") {
tmpArray[cTerms++] = "(FIELD Filename = \"" + requestScope.edtCaptiva + "\")";
}
qstring = tmpArray.join(" AND ").trim();
requestScope.queryString = qstring; // this just displays the query
return qstring // this is what sets the search property
关于lotus-notes - 涉及日期字段的 FTSearch 让我感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10364526/