Xpages 在视图导出中获取摘要计数?
我需要将视图导出到excel。我已经在某处找到了一些代码,它在xpages中运行得非常好。现在,用户希望添加总计的摘要。我会解释的 我有一个包含用户名、项目ID和设备ID的文档。我需要做的是导出具有特定项目ID的所有文档,在导出中显示用户名和设备ID,但在导出视图后,显示类似设备ID的汇总 大概是这样的:Xpages 在视图导出中获取摘要计数?,xpages,Xpages,我需要将视图导出到excel。我已经在某处找到了一些代码,它在xpages中运行得非常好。现在,用户希望添加总计的摘要。我会解释的 我有一个包含用户名、项目ID和设备ID的文档。我需要做的是导出具有特定项目ID的所有文档,在导出中显示用户名和设备ID,但在导出视图后,显示类似设备ID的汇总 大概是这样的: User Selected Equipment Jonh Smith C1 Salley Johnson
User Selected Equipment
Jonh Smith C1
Salley Johnson C2
Fred Days C1
Summary
C1 2
C2 1
我想做的是先在项目ID上使用分类视图,然后在设备ID上使用sum列,从NotesViewEntryCollection中执行getAllDocumentsByKey以获取所选项目的所有文档,然后利用分类行获取所需的总计。但是当我只为getAllDocumentsByKey获取一个文档时。如果我删除设备列并仅根据项目ID进行分类,那么我将获得所有预期的文档
我的另一个想法是拥有一个可以存储在sessionscope variable中的对象,然后使用getalldocumentsbykey再次对项目id进行排序。对象将具有设备ID变量和总计。当我在视图中工作时,我会更新当前设备id的总数。然后在视图导出结束时,导出此sessionscope表。但由于我是javascript新手,我真的不知道从哪里开始。这是正确的方向吗?如果是这样,有人能帮我开始吗
还有其他想法吗
另外,用户不必使用Excel的小计功能。您在最后一段中的思路是正确的,但不需要将值存储在会话范围中。一个标准的javascript对象就可以了。假设您通过循环查看视图中的文档来生成报告,我认为最快、最简单的解决方案是在循环查看文档时对每个设备id进行计数,并将计数存储在对象中: 装备 装备[装备2] . . equipId[equipId] 然后,在循环浏览所有文档之后,循环浏览设备ID对象值,就像上面的示例报告中一样 通过javascript对象循环: 对javascript对象进行排序:
在最后一段中,您的思路是正确的,但不需要将值存储在会话范围中。一个标准的javascript对象就可以了。假设您通过循环查看视图中的文档来生成报告,我认为最快、最简单的解决方案是在循环查看文档时对每个设备id进行计数,并将计数存储在对象中: 装备 装备[装备2] . . equipId[equipId] 然后,在循环浏览所有文档之后,循环浏览设备ID对象值,就像上面的示例报告中一样 通过javascript对象循环: 对javascript对象进行排序:
布鲁斯,让你的生活更轻松,使用ViewNavigator。ViewNavigator具有类别条目,当您设置要求和的值时,该值将显示在ViewNavigator中。它还提供了从一个类别跳到另一个类别的方法,因此您可以读取的数据更少。例如,我使用此函数从分类视图(一个或两个级别)获取摘要数据: 函数getCategoryData(视图名、数据列、getChildren){ var v=database.getView(viewName); var nav=v.createViewNav(); var ve=nav.getFirst(); var isFirst=true; var result=“[”; while(ve){ 如果(!ve.isTotal()){ var curData=ve.getColumnValues(); 如果(!isFirst){ 结果+=“,”; } 结果+=“{label:\”; 结果+=curData[0]; 结果+=“\”,值:; 结果+=curData[dataColumn]; /*对于2个级别的类别,我们获取额外的数据*/ if(getChildren){ var childve=nav.getChild(); var firstChild=true; 结果+=”,子项:[”; while(childve){ var childData=childve.getColumnValues(); 如果(!第一个孩子){ 结果+=“,”; } 结果+=“{label:\”; 结果+=儿童数据[1]; 结果+=“\”,值:; 结果+=childData[dataColumn]; 结果+=“}”; 第一个孩子=假; childve=nav.getNextSibling(childve); } 结果+=“]” } 结果+=“}”; isFirst=false; } ve=导航getNextSibling(ve); } 结果+=“]”; 返回结果; } 注意:它返回一个JSON字符串,而不是JSON对象。我需要字符串,所以你可能想修改它。您可以轻松地修改函数,首先选择基于类别的子集: 函数getCumulativeCategoryData(视图名、键、数据列、fetchChildren){ var v=database.getView(viewName); var nav=v.createViewNavFromCategory(键); var ve=nav.getFirst(); ... }
其中键是字符串或向量。您需要对数据类型稍微小心一点。如果视图中的类别是数字,请确保使用
number()
作为密钥,否则它将不匹配。Bruce,让您的生活更轻松,并使用ViewNavigator。ViewNavigator具有类别条目,当您设置要求和的值时,该值将显示在ViewNavigator中。它还提供了从一个类别跳到另一个类别的方法,因此您可以读取的数据更少。例如,我使用此函数从分类视图(一个或两个级别)获取摘要数据:
函数getCategoryData(视图名、数据列、getChildren){
var v=database.getView(viewName);
var nav=v.createViewNav();
var ve=nav.getFirst();
var isFirst=true;
var result=“[”;
while(ve){
如果(!v