我需要将视图导出到 Excel。我已经在某处找到了一些代码,它在 xpages 中运行得很好。现在用户想要添加总计摘要。我会解释。
我有一个包含用户名、项目 ID 和设备 ID 的文档。我需要做的是导出具有特定项目 ID 的所有文档,在导出中显示用户名和设备 ID,但在导出视图后,显示类似设备 ID 的摘要总数。
像这样的事情:
User Selected Equipment
Jonh Smith C1
Salley Johnson C2
Fred Days C1
Summary
C1 2
C2 1
我想做的是首先在项目 ID 上使用分类视图,然后在带有总和列的设备 ID 上使用分类视图,从 NotesViewEntryCollection 执行 getAllDocumentsByKey 来获取所选项目的所有文档,然后利用类别行获取所需的总计。但是当我只通过 getAllDocumentsByKey 获取一份文档时。如果我删除“设备”列并仅按项目 ID 进行分类,那么我将获得所有预期的文档。
我的另一个想法是拥有一个可以存储在 sessionscope 变量中的对象,然后使用 getalldocumentsbykey 再次对项目 id 进行排序。该对象将具有设备 ID 变量和总计。当我处理视图时,我会更新当前设备 ID 的总数。然后在视图导出结束时导出此 sessionscope 表。但由于我是 javascript 新手,我真的不知道从哪里开始。这是正确的方向吗?如果是这样,有人可以让我开始吗?
还有其他想法吗?
附:用户宁愿不必使用 Excel 的小计功能。
Bruce,使用 ViewNavigator 让您的生活更轻松。 ViewNavigator 具有类别条目,当您设置要求和的值时,该值位于视图导航器中。它还具有从一个类别跳转到另一个类别的方法,因此您需要读取的数据更少。例如,我使用此函数从分类视图(一层或两层)获取摘要数据:
function getCategoryData(viewName, dataColumn, getChildren) {
var v = database.getView(viewName);
var nav = v.createViewNav();
var ve = nav.getFirst();
var isFirst = true;
var result = "[";
while (ve) {
if (!ve.isTotal()) {
var curData = ve.getColumnValues();
if (!isFirst) {
result += ",";
}
result += "{label : \"";
result += curData[0];
result += "\", value : ";
result += curData[dataColumn];
/* for 2 level categories we fetch additional data */
if (getChildren) {
var childve = nav.getChild();
var firstChild = true;
result += ", children : [";
while (childve) {
var childData = childve.getColumnValues();
if (!firstChild) {
result += ",";
}
result += "{label : \"";
result += childData[1];
result += "\", value : ";
result += childData[dataColumn];
result += "}";
firstChild = false;
childve = nav.getNextSibling(childve);
}
result += "]"
}
result += "}";
isFirst = false;
}
ve = nav.getNextSibling(ve);
}
result += "]";
return result;
}
注意:它返回一个 JSON 字符串,而不是 JSON 对象。我需要这个字符串,所以你可能想改变它。您可以轻松修改该函数以首先选择基于类别的子集:
function getCumulativeCategoryData(viewName, key, dataColumn, fetchChildren) {
var v = database.getView(viewName);
var nav = v.createViewNavFromCategory(key);
var ve = nav.getFirst();
...
}
其中 key 可以是字符串或向量。您需要对数据类型稍微小心一些。如果视图中的类别是数字,请确保使用Number()
为您的密钥,否则它将不匹配。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)