【问题标题】:viewJsonService returning too many entries to dataGridviewJsonService 向 dataGrid 返回太多条目
【发布时间】:2016-01-12 09:13:14
【问题描述】:

我已将 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。所以我的问题是重复的,真的......(对此感到抱歉)

【问题讨论】:

    标签: xpages xpages-extlib


    【解决方案1】:

    洛萨,

    正如你所指出的,我以前经历过这种情况。我相信答案是使用“keys”属性来过滤掉无效条目。

    我不确定您的应用程序的结构,但如果用户只能在视图中看到某些条目,我会考虑按用户分类,然后使用键仅向他们显示他们有权访问的行.

    您询问是否可以更改道场网格以排除条目。我认为答案是否定的。您可以选择通过 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) 我个人为解决这个问题所做的就是在这个 SO 答案中:How to configure an xe:viewFileItemService on an XPage to filter the data in a categorized view?

    鉴于您所说的视图结构,我不确定这是否适用于您。

    【讨论】:

    • 实际上我尝试了“getAllEntriesByKey”中的“keys”,但结果是一样的。有帮助的是我在 99% 的视图中使用的单一类别方法,但在这个视图中没有。当我发现一些不起眼的财产时,我正要改变这种观点(请参阅我自己的答案,不幸的是这导致了另一个问题......)
    • 我编辑了我的答案,尝试了 2 个附加内容。祝你好运
    【解决方案2】:

    警告:请仔细阅读此答案的底部,因为您可能会遇到意想不到的问题!

    最后,在玩了一些之后,我偶然发现了一个似乎有帮助的不起眼的属性,无论出于何种原因(我将提出这个新问题):
    属性globalValues 似乎可用于服务类型xe:documentJsonServicexe:viewItemFileServicexe:viewJsonLegacyServicexe:viewJsonServicexe:viewXmlLegacyService。此属性具有三个固定选项,称为 Entries (= 0x0001)、Top Level (= 0x0002) 和 Timestamp (= 0x0004)。只是通过玩古老的“试错”游戏,我发现将此属性设置为 1(= Entries)会修改/过滤结果数据:

    默认情况下,xe:viewItemFileService 返回的原始 JSON 如下所示:

    {
        "@timestamp":"2015-10-14T12:57:59Z",
        "@toplevelentries":63,
        "items":
        [
          {
              ...
          }
        ]
    }
    

    globalValues 设置为“1”会从输出中删除@timestamp@toplevelentries 字段:

    {
        "items":
        [
          {
              ...
          }
        ]
    }
    

    而且,更重要的是,这还会从我的数据网格中删除空行!

    只有一件事让我感到紧张,那就是我根本找不到关于该属性的任何解释。所以我真的不知道是否有任何不需要的副作用......

    更新:感谢 Knut Herrmann,我对此进行了更多测试(请参阅此答案下方的 cmets)。在我的测试用例中,我认为有超过 13,000 个文档;只要我的测试用户只能阅读其中的一小部分,一切似乎都很好。然后我将 200 多个文档添加到启用读取的列表中。结果是一个数据网格,它不断地重新计算它的滚动条:我滚动得越往下,滚动句柄就越小。然而,一旦我到达底线,网格就会变得狂暴并决定只显示前 13 行(?!?),并且滚动条也被一起删除。不过,性能并不像我预期的那么糟糕。

    所以我必须同意 Knut 的观点,即对于将大视图与大量可访问条目组合起来,这不是一个很好的解决方案!

    【讨论】:

    • 如果您有一个视图,例如1000 个条目?垂直滑块是否仍然有效?这对于数据网格可能很难处理,因为它不再获取信息,总共有多少条目以及当前 REST 块的位置...
    • 说实话我不知道;此特定视图的条目不会超过 100 个。目前它包含 63 个条目,并且 - 设置为一次显示 25 个条目 - 正在显示一个垂直滚动条。然而,在我决定切换到单个类别之前,对于其他视图,我遇到了同样的问题,这些视图包含超过 10,000 个条目。滚动条正在处理这些,虽然我不知道是否确实有 10,000 个空行... - 在真正的大视图上尝试该选项是个好主意
    • @Knut:刚刚尝试了一个包含 13,100 个条目的非分类视图,我的测试用户可以访问 7 个条目。如果没有 globalValues = "1",数据网格会显示 thiose 7 文档加上一个巨大的空行数;滚动条工作正常,因为我可以向下滚动到最后并再次备份(不,我没有计算空虚......)。然后将 globalValues 设置为 1,重新构建页面源。结果显示我的 7 个可访问条目,仅此而已。性能似乎还可以,尽管目前该服务器上没有任何并发​​用户。 - 接下来我将尝试为我的用户启用更多文档
    • 感谢测试。我认为使用选项 globalValues = "1" 的性能会相同甚至更好,因为 REST 服务不必添加一些全局属性,也不必计算条目。仅当用户可以阅读大量文档(例如 1000...
    • 我上一条评论的跟进:你是对的,数据网格在某些时候显然正在迷失方向:现在 13,000 个文档中有 200 多个是可读取的,数据网格需要不断更新- 计算滚动条的大小和位置,如果我向下滚动到它的最底部,它就会完全丢失,即它会消失。恐怕这个选项没有真正的用处(我将在上面编辑我的答案 - 感谢您让我更详细地介绍!)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    • 2011-12-01
    相关资源
    最近更新 更多