我有一个名为“查看所有主题”的表行,其中有一个计算字段,该字段指示名为“主题”的 View 中的文档总数。
此 View 是分类 View ,没有单独的回复表单。
所以现在我希望从此 View 中获取文档的总数,但是,我只想返回父文档计数,而不是返回带有响应文档(子文档)的所有条目。
View 中的文档总数为 6,其中 2 个是响应。因此,除了响应之外,我想检索父文档计数为 4。
我用这个javascript找到了解决方案。但需要知道是否有更简单的解决方案。 任何建议将不胜感激。
<xp:text escape="true" id="computedField1">
<xp:this.value><![CDATA[#{javascript:var currentDb:NotesDatabase = session.getCurrentDatabase();
var currentView:NotesView = currentDb.getView("topic");
var docColl:NotesViewEntryCollection = currentView.getAllEntries();
var c = docColl.getCount();
var r =0;
for(i=1;i<=c;i++){
var en:NotesViewEntry = docColl.getNthEntry(i);
var docs:NotesDocument = en.getDocument();
if(!docs.isResponse())
r++;
}
return r;}]]>
</xp:this.value>
<xp:this.converter>
<xp:convertNumber type="number"></xp:convertNumber>
</xp:this.converter>
</xp:text>
最佳答案
嗯,可能有几种方法可以解决这个问题。尊敬的,您的代码不是其中之一。你应该不惜一切代价避免“getNthEntry()”,因为它的表现很糟糕。如果您确实想坚持使用您的解决方案,您应该摆脱 for 循环并使用可以执行 getNextEntry(entry) 或 getNextDocument(doc) 的方法。
最简单的方法可能只是更新 View (如果可以的话)。父文档的形式可能与响应不同。因此,您可以添加一列以达到 @if(@contains("form", "myParentForm");1;0)... 类似的效果。因此,如果它是父级,则返回 1,否则返回 0。然后设置该列以获取总计,然后使用 NotesViewNavigator 类拉回该数字。
如果您不想添加列。那么,最好的解决方案可能是使用 NotesViewNavigator。这应该非常快。您想要导航到第一个条目 - 这可能是父条目。然后,您可以循环执行 getnextSibling 来处理任何响应文档。应该有很多例子,但这里有一个: http://www-12.lotus.com/ldd/doc/lotusscript/lotusscript.nsf/1efb1287fc7c27388525642e0074f2b6/11c5837eb09e23a78525675300720a16?OpenDocument
我想您当然可以创建一个新的隐藏 View ,该 View 具有相同的选择公式,减去获取响应的部分。如果您有一个仅包含父级的 View ,那么您可以将所有文档或条目放入一个集合中,然后只需执行 collection.getCount()...类似的操作。
祝你好运!
关于javascript - 从 Xpages 中的 "view"开始计算父文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29917984/