我的表行名为"查看所有主题"其中有一个计算字段,表示来自名为" topic"的视图中文档的总数。
此视图是分类视图,并且没有单独的响应表单。
所以现在我想从这个视图中获取文档的总数,但是,我只想返回父文档计数而不是所有带有响应文档的条目(子文档)。
视图中的总文档数为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>
答案 0 :(得分:1)
嗯,有可能有几种方法可以解决这个问题。尊重你的代码不是其中之一。你应该不惜一切代价避免“getNthEntry()”,因为这是一个可怕的表演者。如果你确实想坚持你的解决方案,你应该摆脱for循环并使用你可以做getNextEntry(entry)或getNextDocument(doc)的东西。
如果这是一个选项,SIMPLEST方法可能只是更新视图。父文档的表单可能与响应不同。所以你可以在@if(@contains(“form”,“myParentForm”); 1; 0)的效果中添加一列......就像那样。所以如果是父母则返回1,否则返回0。然后设置列以获取总数,然后使用NotesViewNavigator类将该数字拉回来。
如果您不想添加列。那么你最好的解决方案可能是使用NotesViewNavigator。这应该非常快。你想导航到第一个条目 - 这可能是一个父级。然后循环执行getnextSibling来处理任何响应文档。应该是很多例子,但这里是一个: http://www-12.lotus.com/ldd/doc/lotusscript/lotusscript.nsf/1efb1287fc7c27388525642e0074f2b6/11c5837eb09e23a78525675300720a16?OpenDocument
我猜你当然可以创建一个新的隐藏视图,它具有相同的选择公式减去拾取响应的部分。如果您只有父母的视图,那么您可以将所有文档或条目放入集合中,然后只需执行collection.getCount()......就像那样。
祝你好运!