AR Skurka
AR Skurka

Reputation: 35

How can I select conditionally some Documents (NotesXspViewEntry) in a dataView (xe:dataView or xe:dynamicViewPanel)

I need something like this for a time interval:

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

where resDueDateBegin and resDueDateEnd are a NotesDateTime object (item or Field).

Upvotes: 1

Views: 211

Answers (2)

AR Skurka
AR Skurka

Reputation: 35

here is my extension: (now with right TIME too)

    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())
}

and the result of Vector v is


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 Time adjustment

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

but the only trouble that remains here is the TIME

18.06.2014 21:22:50 CEDT we need here 18.06.2014 23:59:59 CEDT or 19.06.2014 00:00:00 CEDT

Upvotes: 0

Per Henrik Lausten
Per Henrik Lausten

Reputation: 21709

It's good practice not to do date filtering in the select statement for the view itself.

Instead you can use the ability to filter the view by a key (or a set of keys). In this case you then use a date range as the filter.

First, make sure that your view is sorted by the two date fields. Then add your filter keys.

The following shows a filter by a date range that I use to filter a view for a dynamic view panel to only show documents within a date range (of x days as specified by compositeData.limitDays) and to filter the view by a certain category (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>

Using the above you should be able to make your filtering of two date columns work.

Upvotes: 2

Related Questions