0

我有一个名为“查看所有主题”的表格行,其中有一个计算字段,该字段指示来自名为“主题”的视图的文档总数。

此视图是分类视图,没有单独的响应表单。

因此,现在我希望从此视图中获取文档的总数,但是,我只想返回父文档计数,而不是返回所有带有响应文档(子文档)的条目。

视图中的文档总数为 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>
4

1 回答 1

1

嗯嗯,可能有几种方法可以解决这个问题。尊重您的代码不是其中之一。你应该不惜一切代价避免“getNthEntry()”,因为它的表现很糟糕。如果您确实想坚持自己的解决方案,则应该摆脱 for 循环并使用可以执行 getNextEntry(entry) 或 getNextDocument(doc) 的方法。

如果可以的话,最简单的方法可能只是更新视图。父文档的表单可能与响应不同。因此,您可以在 @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()... 类似的事情。

祝你好运!

于 2015-04-28T11:37:55.130 回答