Bil*_*l F 1 lotus-notes xpages xpages-ssjs
在这篇文章中使用读者字段从分类视图的第一列返回我提出的问题是,如果我在分类视图上执行getColumnValue(0)我只是唯一的类别值,但由于Reader字段可能存在用户的类别无法访问其下的文档.另一个选项是创建NotesViewNavigator并遍历导航器并构建值的treeMap.我担心的是视图可能包含数千个条目,它必须遍历所有条目以构建类别列表,通常可能有10到12个条目.
所以我的问题是NotesViewNavigator进程的性能影响和可伸缩性是什么和/或是否有更好的方法来获取视图中的类别并识别用户的Reader权限.
新编辑
似乎无法让这个工作.我有一个分类视图,并使用此代码WFSUtils.sysOut()只是打印到控制台.
vw.setAutoUpdate(false);
var nav:NotesViewNavigator = vw.createViewNav();
nav.setEntryOptions(NotesViewNavigator.VN_ENTRYOPT_NOCOUNTDATA);
nav.setBufferMaxEntries(400);
nav.setMaxLevel(0);
var rtn:java.util.TreeMap=new java.util.TreeMap();
var entry:NotesViewEntry = nav.getFirst();
try{
while (entry != null){
WFSUtils.sysOut("Entry not null");
var thisCat:String = entry.getColumnValues().firstElement().toString();
WFSUtils.sysOut("thisCat = " + thisCat);
rtn.put(thisCat,"Nothing");
WFSUtils.sysOut("did put " + thisCat)
var tEntry:NotesViewEntry = nav.getNextCategory(entry);
entry.recycle();
entry = tEntry;
tEntry.recycle();
}
viewScope.put("vsCats", rtn.keySet());
}catch(e){
WFSUtils.sysOut("Error in getCategory " + e.toString())
}
Run Code Online (Sandbox Code Playgroud)
控制台打印输出是这样的:
25/08/2014 11:47:36 AM HTTP JVM:Get Navigator 25/08/2014 11:47:36 AM HTTP JVM:Entry not null 25/08/2014 11:47:36 AM HTTP JVM:thisCat = Approved ~Bill Fox ^ WFS自动化后端流程示例25/08/2014 11:47:36 AM HTTP JVM:确实放了Approved~Bill Fox ^ WFS自动后端流程示例25/08/2014 11:47:36 AM HTTP JVM :getCategory方法中的错误找不到NotesViewNavigator.getNextCategory(lotus.domino.local.ViewEntry)或非法参数
该视图有9个类别,所以我希望它可以做9个getNextCategories.我把它改成了getNext,控制台输出是:
25/08/2014 11:52:42 AM HTTP JVM:Get Navigator 25/08/2014 11:52:43 AM HTTP JVM:Entry not null 25/08/2014 11:52:43 AM HTTP JVM:thisCat = Approved ~Bill Fox ^ WFS自动后端流程示例25/08/2014 11:52:43 AM HTTP JVM:确实放了Approved~Bill Fox ^ WFS自动后端流程示例25/08/2014 11:52:43 AM JVM :条目不为空25/08/2014 11:52:43 AM HTTP JVM:getCategory出错异常发生调用方法NotesViewEntry.getColumnValues()25/08/2014 11:52:43 AM HTTP JVM:null
因此它在第一次工作但不是第二次工作的getColumnValues上失败 - 不确定JVM:null的来源.任何想法非常感谢.
它看起来像View-design-level选项"Do not show empty categories"为你做这个 - 我以前认为这只是客户隐藏它们的一个提示,但看起来它会影响行为ViewNavigator也是如此(否则将显示完整的类别).
一旦你做了检查,这样的事情可能会做到这一点:
List<String> categories = new ArrayList<String>();
View view = database.getView("Some View");
view.setAutoUpdate(false);
ViewNavigator nav = view.createViewNav();
nav.setEntryOptions(ViewNavigator.VN_ENTRYOPT_NOCOUNTDATA);
nav.setBufferMaxEntries(400);
nav.setMaxLevel(0);
ViewEntry entry = nav.getFirst();
while (entry != null) {
Vector<?> columnValues = entry.getColumnValues();
String category = String.valueOf(columnValues.get(0));
categories.add(category);
entry.recycle(columnValues);
ViewEntry tempEntry = entry;
entry = nav.getNext();
tempEntry.recycle();
}
Run Code Online (Sandbox Code Playgroud)
我认为那应该是最快/最安全的方式.setMaxLevel(0)表示第一个/下一个操作将仅包含类别(或任何是您的顶级),而其他ViewNavigator设置用于性能调整.