XPage [TypeError] view.getNextDocument(curDoc)的异常

时间:2015-09-07 21:57:05

标签: xpages xpages-ssjs

这是我的设置:

在我的XPage中,我有一个嵌入式视图,可以在相邻的Panel中打开文档。 单击视图中的doc链接可在viewScope变量中设置doc的UNID,并刷新Panel。 UNID变量用于定义页面的数据源文档(doc)。

现在在Button中,我想获得视图中下一个文档的句柄,但是当运行以下SSJS代码时,最后一行会出现错误:

var v:NotesView = database.getView("ViewByYear");
var curDoc:NotesDocument = doc.getDocument();
// curDoc = v.getFirstDocument(); /* if this line is uncommented the error does not occur */

if (curDoc==null) return(false);
var nextDoc = v.getNextDocument(curDoc);

错误消息为:Script interpreter error, line=11, col=32: [TypeError] Exception occurred calling method NotesView.getNextDocument(lotus.domino.local.Document) null

如果我取消注释注释行(将curDoc设置为视图中的第一个文档),则不会发生错误。

知道为什么会这样吗?如何从数据源生成的文档不同?无论如何,这个文档来自同一个嵌入在同一XPage中的视图。

感谢您的见解

2 个答案:

答案 0 :(得分:0)

我已经修改了我使用NotesViewNavigator的答案:

var v:NotesView = database.getView("ViewByYear");
var curDoc:NotesDocument = doc.getDocument();

// curDoc = v.getFirstDocument(); /* if this line is uncommented the error does not occur */

if (curDoc==null) return(false);
var nav:NotesViewNavigator = v.createViewNavFrom(curDoc);
var entry:NotesViewEntry = nav.getNext();
if (entry == null) { return false; }  // check to see if curDoc is last doc in view
var nextDoc:NotesDocument = entry.getDocument();

curDoc是否可能是您代码中视图中的最后一个文档?

答案 1 :(得分:0)

实际上,这与预期完全一致: - )

它与变量类型等无关。基本上,如果要遍历视图,则需要设置“起始”点,在这种情况下,使用curDoc = v.getFirstDocument();。然后当你想要下一个文档时使用nextDoc = v.getNextDocument(curDoc);,即告诉它在curDoc之后返回文档。自从LotusScript在版本4中引入后,这就是后端对象的工作方式。无论您使用的是LotusScript,SSJS还是Java,它都是相同的模式: - )

所以常见的模式是:

var v:NotesView = database.getView("ViewByYear");
var curDoc = v.getFirstDocument();
while(null != curDoc){
  // Do some work with curDoc
  curDoc = v.getNextDocument(curDoc);
}

现在,您可能听说过与遍历视图有关的内存注意事项。基本上,Domino通常会为您处理内存处理。但是,特别是在迭代大型文档集合时,您应该使用稍微不同的模式(您也可以将其用于小型文档集合):

var v:NotesView = database.getView("ViewByYear");
var curDoc = v.getFirstDocument();
var nextDoc = null;
while(null != curDoc){
  nextDoc = v.getNextDocument(curDoc);
  // Do some work with curDoc
  curDoc = null; // reclaim memory
  curDoc = nextDoc;
}

/约翰