【问题标题】:Sorting a NotesDocumentCollection based on a date field in SSJS根据 SSJS 中的日期字段对 NotesDocumentCollection 进行排序
【发布时间】:2012-02-10 19:04:40
【问题描述】:

使用服务器端 javascript,我需要根据集合中包含创建文档的日期或创建文档时的任何内置字段的字段对 NotesDcumentCollection 进行排序。

如果该函数可以接受一个排序选项参数那就太好了,这样我就可以按升序或降序返回结果。

我需要这个的原因是因为我使用了 database.getModifiedDocuments(),它返回一个未排序的 notesdocumentcollection。我需要按降序返回文件。

以下代码是从 openNTF 修改后的 sn-p,它按升序返回集合。

function sortColByDateItem(dc:NotesDocumentCollection, iName:String) {
try{    
    var rl:java.util.Vector = new java.util.Vector();
    var tm:java.util.TreeMap = new java.util.TreeMap();
    var doc:NotesNotesDocument = dc.getFirstDocument();

    while (doc != null) {
        tm.put(doc.getItemValueDateTimeArray(iName)[0].toJavaDate(), doc);
        doc = dc.getNextDocument(doc);
    }
    var tCol:java.util.Collection = tm.values();
    var tIt:java.util.Iterator  = tCol.iterator();
    while (tIt.hasNext()) {
       rl.add(tIt.next());
    }
    return rl;  
}catch(e){

}
}

【问题讨论】:

    标签: sorting collections treemap xpages


    【解决方案1】:

    在构造 TreeMap 时,将 Comparator 传递给构造函数。这允许您定义自定义排序而不是“自然”排序,默认情况下按升序排序。或者,您可以针对 TreeMap 调用 descendingMap 以逆序返回克隆。

    【讨论】:

      【解决方案2】:

      如果您要处理大量文档,这是一种非常昂贵的方法。我主要使用 NotesViewEntrycollection(总是根据源视图排序)或视图导航器。

      对于大型数据库,您可以使用视图,根据修改日期排序并浏览该视图的条目,直到您的代码执行的最近日期(您必须将其保存在某处)。

      对于较小的操作,Tim 的方法很棒!

      【讨论】:

      • getModfiedDocuments() 方法在视图级别不可用
      • 你不需要。按 desc 对视图进行排序。修改时间,从第一行开始往下走,直到最后一次运行你的代码...
      猜你喜欢
      • 2018-03-07
      • 1970-01-01
      • 1970-01-01
      • 2013-04-20
      • 2017-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-11
      相关资源
      最近更新 更多