0

我正在快速将 XAgent 样式视图导出到 excel。但首先我需要获得与我在 XPage 上选择的条件相匹配的文档的 UNID。我有一个按钮,可以获取找到的文档数量。我已经确认并验证了我拥有基于我选择的值的文档,但在 Web 浏览器中它总是在警报中返回零文档。现在按钮中的代码如下:

uifrom = getComponent("from_dtpicker").getValue(); // a date-time picker
uito = getComponent("to_dtpicker").getValue(); // a date-time picker
uitag = getComponent("tag_combox").getValue(); // a combobox

var from:NotesDateTime = session.createDateTime(uifrom);
from.setAnyTime();
var to:NotesDateTime = session.createDateTime(uito);
to.setAnyTime();

var vw:NotesView = database.getView("(Document View by Tag)");
var docUNIDarray:Array = []; // for the quick XAgent excel export later on

if (uitag == "All") {
    var vec:NotesViewEntryCollection = vw.getAllEntries();
} else {
    var vec:NotesViewEntryCollection = vw.getAllEntriesByKey(uitag, true);
}

var total:Number = 0;

var ve:NotesViewEntry = vec.getFirstEntry();
while (ve != null) {
    // document must have StartDate and EndDate
    if (ve.getDocument().hasItem("StartDate") && ve.getDocument().hasItem("EndDate")) {
        var vefrom:NotesDateTime = ve.getDocument().getItemValue("StartDate").elementAt(0);
        vefrom.setAnyTime();
        // as long as the StartDate is between the selected from and to
        if (vefrom >= from && vefrom <= to) {
            if (ve.getDocument().getItemValueString("StaffName") != "Company") {
                docUNIDarray.push(ve.getDocument().getUniversalID());
                total += 1; 
            }
        }
    }
    ve = vec.getNextEntry(ve);
}

view.postScript('alert("total:'+total+', from:'+from+', to:'+to+', tag:'+uitag+'")');

此外,我所做的唯一完全刷新是单击按钮时。此页面中也没有作用域变量。只有 2 个日期时间选择器、一个组合框和按钮本身。对此有何解释?我确认代码是正确的,因为它在 XPiNC 中工作。

我得到的文档总数应该是 18。如果我将 .toJavaDate() 附加到 from、to 和 vefrom,那么我会得到 10 个错误的文档。我检查了每个文档的“StartDate”和“EndDate”的基础值,每个值都是时间/日期,例如 08/12/2013 12:00:00 PM ZE8。我假设将我的代码中的任何日期值转换为 NotesDateTime 将确保它们都具有相同的类型并且可以与之进行比较,但是对于这个我完全不知道我做错了什么。

4

1 回答 1

1

您需要在比较中去掉时间部分。有几种选择可以做到这一点。首先,查看视图条目而不是文档,并将所有数据放入列中。对于日期值,请使用字符串:

   @Text(@Year(startdate)*10000+@month(startdate)*100+@day(startdate)) 

另一种方法是处理 Java Date 方法

于 2013-08-27T06:40:32.577 回答