我已将ExtLib REST服务设置为“xe:viewJsonService”并将其连接到多米诺骨牌视图。目前该视图包含63个条目。这些条目背后的文档具有读访问限制。
服务返回的Json由Dojo数据网格(取自ExtLib库)使用。
该页面由对64个条目中只有一个具有读访问权限的测试用户访问。但是,该用户看到的数据网格包含一个数据元素,后面跟着63个空条目,如下所示:
查看原始Json数据,我发现该服务确实只返回一个条目,但它知道有63个兄弟:
[
{
"@entryid":"1-6C5763E4A122F1D3C1257EC700355386",
"@unid":"6C5763E4A122F1D3C1257EC700355386",
"@noteid":"3FD2E",
"@position":"1",
"@read":true,
"@siblings":63,
"@form":"fInvoice",
"colIconStatus":"imgInvExported.gif",
"colIconLock":"blank.gif",
"invInvoiceDate":"2015-09-21T09:44:27Z",
"invJobInvNumbers":"111\/5152\/52567\/ 001",
"invSupplierNameShort":"My Test Company GmbH",
"invAmount":121.5
}
]
从技术上讲,这是正确的,因为该服务可以访问所有64个条目。问题是数据网格为64个条目而不是只有一个条目创造了空间。
问题是:如何告诉数据网格显示正确的数据量?或者我是否需要操纵REST服务?
编辑:继续寻找可能的解决方案,同时找到了Eric McCormick的其他一些相关问题this one(包括Stephan Wissel的一个非常好的方法),或者是Steve Zavocki的this one。所以我的问题是重复的,真的......(对不起)
答案 0 :(得分:2)
警告:请阅读本答案的底部,因为您可能遇到意想不到的问题!
最后经过一些游戏之后,我偶然发现了一个似乎有所帮助的不起眼的财产,无论出于何种原因(我将把这个问题作为一个新问题):
属性globalValues
似乎可用于服务类型xe:documentJsonService
,xe:viewItemFileService
,xe:viewJsonLegacyService
,xe:viewJsonService
和xe:viewXmlLegacyService
。此属性有三个固定选项,称为Entries
(= 0x0001),Top Level
(= 0x0002)和Timestamp
(= 0x0004)。只是通过玩goold旧的“试错”游戏,我发现将此属性设置为1(=条目)会修改/过滤结果数据:
默认情况下,xe:viewItemFileService
返回的原始JSON如下所示:
{
"@timestamp":"2015-10-14T12:57:59Z",
"@toplevelentries":63,
"items":
[
{
...
}
]
}
将globalValues
设置为“1”会从输出中删除@timestamp
和@toplevelentries
字段:
{
"items":
[
{
...
}
]
}
更重要的是,这也会从我的数据网格中删除空行!
只有一件事让我感到紧张,那就是我找不到任何有关该财产的解释。所以我真的不知道是否有任何不必要的副作用......
更新:感谢Knut Herrmann我对此做了更多测试(请参阅下面的评论)。在我的测试案例中,我认为有超过13,000份文件;只要我的测试用户只能阅读少量的那些东西似乎都很好。然后我在启用读取的列表中添加了200多个文档。结果是一个数据网格,不断重新计算其滚动条:我滚动得越远,滚动句柄越小。一旦我到达底线但是网格变为berzerk并且决定仅显示前13行(?!?),并且还将滚动条全部移除。但性能并不像我预期的那么糟糕。
所以我必须同意Knut的观点,对于大型视图与大量可访问条目的组合,这不是一个很好的解决方案!
答案 1 :(得分:1)
洛萨,
我之前已经经历过这一点,正如你所指出的那样。我相信答案是使用'keys'属性来过滤掉无效的条目。
我不确定您的应用程序是如何构建的,但如果用户只能在视图中看到某些条目,我会考虑按用户分类,然后使用这些键仅向他们显示他们有权访问的行
您询问是否可以更改dojo网格以排除条目。我认为答案是否定的。您可以选择通过REST服务或Notes视图进行过滤。
这是我写的关于我遇到的问题的相关博客文章。 http://notesspeak.blogspot.com/2013/07/creating-updatable-rest-service-for-use.html
编辑 2其他要尝试的事项
1)您是否在我的博文中看到了评论?我自己没试过。归功于博客评论 - “Goo Goo”。
“我在网格的onstyleRow
事件中使用此代码来解决空白行问题”
使用viewJsonService:
var row = arguments[0];
var rowItem = djxDataGrid1.getItem(row.index);
var rowCount = Object.keys(restService1._index).length - 1; //-1 for omit the onUpdate event
if(row.index >= rowCount){
row.customStyles += 'display:none;';
}
2)我个人为解决这个问题所采取的措施是在这个答案:How to configure an xe:viewFileItemService on an XPage to filter the data in a categorized view?
鉴于您对视图结构所说的内容,我不确定这是否适用于您。