Xpages:获取视图中多值字段中的值计数
我有100个带有多值字段的文档。该字段包含5个可能的值(Albert、Ben、Chris、Don、Ed)。该字段必须包含1个值,但最多可以包含5个值 我需要计算包含每个值的文档数,所以Xpages:获取视图中多值字段中的值计数,xpages,xpages-ssjs,Xpages,Xpages Ssjs,我有100个带有多值字段的文档。该字段包含5个可能的值(Albert、Ben、Chris、Don、Ed)。该字段必须包含1个值,但最多可以包含5个值 我需要计算包含每个值的文档数,所以 Albert 56 Ben 22 Chris 79 等等 这似乎很容易。我构建了一个包含文档的视图,第一列是字段,我选择了显示多个提要的多个文档 在SSJS中,通过字段中的主值列表循环,并为每个值执行getDocumentByKey myArray = applicationScope.applica
Albert 56
Ben 22
Chris 79
等等
这似乎很容易。我构建了一个包含文档的视图,第一列是字段,我选择了显示多个提要的多个文档
在SSJS中,通过字段中的主值列表循环,并为每个值执行getDocumentByKey
myArray = applicationScope.application;
var dc:NotesDocumentCollection;
for (index = 0; index < myArray.length; ++index) {
dc = view1.getAllDocumentsByKey(myArray[index]);
Print(dc.getCount())
}
myArray=applicationScope.application;
var dc:NotesDocumentCollection;
对于(索引=0;索引
这将正确地获取第一个值,但之后没有。如果我只是硬编码一个特定的值,它就会工作。但是当我第二次调用getAllDocumentsByKey时,它没有返回正确的值
我认为这在LS中很好,但在SSJS中我必须清除或回收或休息一些东西,但我不知道是什么。Bryan
按此顺序尝试两件事:
myArray=applicationScope.application代码>看起来不对。我怀疑你实际上并没有得到一个数组。我认为您正从应用程序范围中获得第一个价值。在print(myArray.length)的下一行添加一个print语句代码>如果它总是等于一,那就是你的问题。您没有使用var
,应该使用冒号将变量设置为某个java类型
是否有任何多值字段值不明确
getAllDocumentsByKey(向量)
进行部分匹配。除非您想要这样做,否则我建议使用第二个参数并将其设置为true
,对于getAllEntriesByKey()
,始终如此
另一种方法是在视图中添加一个total列,这无疑会提高性能。在视图索引中,这会对性能产生影响,但是您可以将
ViewNavigator
与getColumnValues()
和getNextSibling()
一起使用getCount()
在LS中的性能非常差,几乎可以肯定在SSJS/Java中的性能也同样差。如果我理解正确的话,请看几年前的这篇博文:您想计算大量文档中可能出现的所有值,以得到一个5值列表,并对应5值计数,对吗?
您可以循环浏览所有文档,循环浏览所有值,并向HashMap添加条目,其中值为key,int为value(每次都应该增加)。毕竟,您有一个包含5个值的映射,其中包含每个键的总和。使用
getAllDocumentsByKey()
您永远不会得到正确的答案。当文档显示在一个类别中时,它将从下一个类别的集合中丢失。这就是它的工作方式
改用
ViewNavigator
。按类别构建它,只需ViewEntries
或者在for循环的末尾尝试dc=null或dc.recycle()。此外,第一行看起来有些不对劲。您缺少var,并且没有为其指定类型。你确定你真的得到了一个数组吗?在循环之前,添加print(myArray.length)并确保长度正确。我猜你会有“1”,这解释了为什么你只看到第一个值。根据我的评论回答