2012-02-10 132 views
1

使用服務器端JavaScript,我需要根據集合中包含創建文檔的日期或任何內置字段創建文檔時的字段對NotesDcumentCollection進行排序。根據SSJS中的日期字段對NotesDocumentCollection進行排序

這將是很好,如果函數可以採取一個排序選項參數,所以我可以投入,如果我想結果回到升序或降序。

我需要這個的原因是因爲我使用了database.getModifiedDocuments(),它返回未排序的notesdocumentcollection。我需要按降序返回文檔。

以下代碼是來自openNTF的修改片段,它以升序方式返回集合。

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){ 

} 
} 

回答

3

當您構造TreeMap時,將一個Comparator傳遞給構造函數。這使您可以定義自定義排序,而不是「自然」排序,默認排序爲升序排序。或者,您可以針對TreeMap調用descendingMap以相反的順序返回一個克隆。

0

如果您處理大量文檔,這是一種非常昂貴的方法。我主要使用NotesViewEntrycollection(總是根據源視圖排序)或查看導航器。

對於大型數據庫,您可以使用視圖,根據修改日期排序並瀏覽該視圖的條目,直到執行代碼的最近日期(您必須將其保存到某處)。

對於較小的操作,Tim的方法非常棒!

+0

getModfiedDocuments()方法在視圖級別 – 2012-02-11 07:58:08

+0

不可用您不需要。按desc排序視圖。修改時間,從第一行開始,直到最後一次運行代碼... – 2012-02-13 22:36:34

相關問題