sort getAllUnreadEntries()用于重复控制

时间:2013-07-26 08:14:37

标签: xpages xpages-ssjs

我需要开发一个自定义控件,对于任何notesview,在一个小方框中显示未读文档列表...... 因此,我通过重复控制来遵循我的谓词问题解决方案:

show only unread document

问题是在我的目标视图中..我有第一列(@modified是值)降序。

当重复控制显示结果时......条目是升序。

你有任何建议要解决吗?

Tnx you

2 个答案:

答案 0 :(得分:2)

如果您发布一些代码会很好......但是这里有一些想法...... 使用notes视图导航器,您可以按视图排序顺序浏览视图。我认为你想做的就是对所有保持相同顺序的文件进行“处理”。

我假设您不使用Java而只使用SSJS。没关系。但这并不意味着你不能使用Java对象!

现在我在创建一个带有SSJS的JavaObject的过程中做了一个NotesIn9,用于与你想要的东西非常相似的东西...... http://notesin9.com/index.php/2011/07/11/notesin9-ee-009-using-java-hashmaps-and-treemaps-with-xpages/

在那个节目中,我选择了直播文档而不是仅使用SSJS逻辑来抓取它们。

我认为你想要做的是制作一个SSJS功能,让你持有,并走过你的视野。对于SSJS,我没有任何类似的东西......我做的Java。但这是一个可能至少让你开始的功能。

 function getViewEntryCollection(myKey:string) {
    // this assumes sub directories are involved.
var dbPath = database.getFilePath().split(database.getFileName())[0];
var myDb:NotesDatabase = session.getDatabase(session.getServerName(),dbPath + "myNSF",false);
var myView:NotesView = myDb.getView("viewName");
var vec:NotesViewEntryCollection = myView.getAllEntriesByKey(myKey, true);
return vec
}

现在这是有趣的部分。您想循环遍历文档。在XpagesCheatsheet.com的cheatsheet上有一个例子。循环时你想存储UNIDS。

我上面提到的视频谈论了java对象的hashmap和treemap。它们很酷但你需要我认为是一个java LinkedHashSet ..(可能是一个LinkedList - 不确定)代替HashMap。该视频应该有希望告诉您如何创建它们并添加到它们中。

尝试在函数中创建它,然后在UNID的循环中创建到LinkedHashSet。我的理解是它保持了输入的顺序。现在控制着我的观点。

实际上我猜你不需要UNIDS ......你可以将viewEntry放到LinkedHashSet中...从长远来看会更好。

无论如何 - 希望有所帮助

戴夫

答案 1 :(得分:0)

我已将此代码用于我的重复控制以解决问题:

Ventry=function(ve:NotesViewEntry){
this.dataModify = ve.getDocument().getLastModified().toJavaDate().getTime();
this.unid=entry.getDocument().getUniversalID()
}

sortFunctionDescending = function(a,b) {
var x = a.dataModify;
var y = b.dataModify;
return ( (x<y) ? 1 : ((x>y) ? -1 : 0)); 
}

var viewEntries=[];
database.getView('(MY VIEW THAT I SHOW UNREAD)').refresh();
var Collection:NotesViewEntryCollection=database.getView('(AllDocumentsUnread)').getAllUnreadEntries();
var entry:NotesViewEntry=Collection.getFirstEntry();
while (entry!=null){ //loop over all entryes
viewEntries.push( new Ventry( entry) );
entry = Collection.getNextEntry();
}
Collection.recycle();
viewEntries.sort(sortFunctionDescending);  //effettua il sorting
return (viewEntries);

这样我就可以使用文档值来访问(例如将最后修改的数据转换为computedfield)

var unid=rowData.unid;
return(database.getDocumentByUNID(unid).getLastModified().toJavaDate());