如何在dataView中有条件地选择一些文档(NotesXspViewEntry)(xe:dataView或xe:dynamicViewPanel)

时间:2014-06-17 22:24:37

标签: xpages xpages-extlib

我需要这样的时间间隔:

SELECT ( resDueDateBegin >= @Today) & (resDueDateEnd <@Adjust(@Today;0;1;0;0;0;0))

其中resDueDateBeginresDueDateEndNotesDateTime对象(项目或字段)。

2 个答案:

答案 0 :(得分:2)

最好不要在视图本身的select语句中进行日期过滤。

相反,您可以使用通过键(或一组键)过滤视图的功能。在这种情况下,您可以使用日期范围作为过滤器。

首先,确保您的视图按两个日期字段排序。然后添加您的过滤器键。

下面显示了一个日期范围的过滤器,用于过滤动态视图面板的视图,仅显示日期范围内的文档(由compositeData.limitDays指定的x天)并过滤视图某个类别(compositeData.catFilter)。

<xp:this.keys><![CDATA[#{javascript:
    try {
        var cal = java.util.Calendar.getInstance();
        cal.add(java.util.Calendar.DATE, compositeData.limitDays)
        var endDate = cal.getTime();

        cal.set(1970, 0, 1);
        var startDate = cal.getTime();

        var vDateRange = session.createDateRange(startDate, endDate);

        var v = new java.util.Vector();
        v.addElement(compositeData.catFilter);
        v.addElement(vDateRange);
        return v;                       
    }catch(e){
        print("view filter error: " + e.toString())
    }
}]]></xp:this.keys>

使用上述内容,您应该能够过滤两个日期列。

答案 1 :(得分:0)

这是我的扩展名:(现在也是正确的时间)

    try {
    var cal = java.util.Calendar.getInstance();
    cal.add(java.util.Calendar.DATE, 1)
    cal.set(java.util.Calendar.HOUR, 0);
    cal.set(java.util.Calendar.MINUTE, 0);
    cal.set(java.util.Calendar.SECOND, 0);
    cal.set(java.util.Calendar.HOUR_OF_DAY, 0);
    var endDate = cal.getTime();

    cal.set(1970, 0, 1,0,0,0);
    var startDate = cal.getTime();

    var vDateRange = session.createDateRange(startDate, endDate);

    var cal2 = java.util.Calendar.getInstance();
    cal2.add(java.util.Calendar.DAY_OF_MONTH, 0)
    cal2.set(java.util.Calendar.HOUR, 0);
    cal2.set(java.util.Calendar.MINUTE, 0);
    cal2.set(java.util.Calendar.SECOND, 0);
    cal2.set(java.util.Calendar.HOUR_OF_DAY, 0);

    var startDate2 = cal2.getTime();

    cal2.set(2100, 0, 1,0,0,0);
    var endDate2 = cal2.getTime();

    var vDateRange2 = session.createDateRange(startDate2, endDate2);


    var v = new java.util.Vector();
    v.addElement("Car");
    v.addElement(vDateRange);
    v.addElement(vDateRange2);
    return v;                       
}catch(e){
    print("view filter error: " + e.toString())
}

,Vector v的结果是


Car,01.01.70 00:00:00 CET - 20.06.2014 00:00:00 CEDT,19.06.2014 00:00:00 CEDT - 01.01.2100 00:00:00 CET

bevor时间调整

Car,01.01.70 00:00:00 CET - 18.06.2014 23:06:58 CEDT,17.06.2014 23:06:58 CEDT - 01.01.2100 00:00:00 CET

但唯一的麻烦就是TIME

18.06.2014 21:22:50 CEDT我们需要18.06.2014 23:59:59 CEDT19.06.2014 00:00:00 CEDT