使用排序和分页构建链接到 NotesView 的自定义 table 的最佳方法

Best way to build a custom table linked to a NotesView with sorting and paging

我的 Xpage 应用程序中有一个包含很多元素的视图。从这个视图我需要用自定义行构建一个 table (我不能只显示视图,我需要构建行来显示我自己,因为我需要从其他数据库计算数据,你可以'不要直接在视图中执行)。

为此,我知道我可以使用 Dataview、Datatable 或重复控件(也许还有其他想法?)。当然我不能把所有的数据都带到客户端,太多了。

我正在寻找一种解决方案,可以让我进行 分页(使用寻呼机组件很容易做到)但更重要的是 在 [=25] 上进行排序=]点击。明确地说,我需要对视图的所有条目进行排序,而不仅仅是客户端上当前显示的页面。

更有效的方法是什么?我确实有很多数据要计算,所以我需要最快的方法。

(如果需要,我可以创建多个具有不同排序标准的视图)。

任何重复控件都可以应用寻呼机。 View Panels 也可以包含不在当前视图中的数据 - 只需将 columnName 属性 设置为空白并计算值 属性。请记住,您将无法对这些列进行排序 - 它们不是列,它们是在显示时计算的值。

仅针对当前显示的条目计算任何计算数据。因此,如果您在视图中有 5000 个条目但一次只显示 30 个,则计算数据将只计算当前的 30 个。

如果您的用户需要能够对所有列进行排序并且您有大量数据,基本上他们必须接受他们的要求意味着当他们进入视图时所有数据都需要计算......并且每当它由他们自己或任何其他用户更新时。这永远不会很快,需求才是问题所在,而不是架构。如果需要的话,RDBMS 作为后端可能会更好,只要数据不跨多个表。否则图形数据库结构可能是更好的选择。

更大的问题是为什么用户需要对任何列进行排序。用户真的想在第五列排序,然后向下滚动到以 "H" 开头的条目吗?他们是否要在第四列排序并向下滚动到 2014 年 5 月的条目?在 Notes Client 上,这是一种传统方法,因为它比过滤更容易。但通常用户知道他们在寻找什么 - 他们不希望条目以 "H" 开头,他们想要部门是 HR 的条目。如果是这样的话,无论是从数据库设计还是可用性的角度来看,对所有列进行排序和分页都不是最有效的方法。

您可以计算一个 viewColumn,但如果您有很多事情要做,我不会走那条路。
这是 XPages SHINE 中 Java 的位置!
构建一个 Java 对象来表示您的行。所以在 java 中使用后端逻辑来获取你需要的所有数据。假设您有一家公司的销售订单报告。销售订单从不同的地方提取数据。您的公司对象将具有如下方法:

List<salesOrder> getOrders() {}

所以在重复中你调用 company.getOrders() 并且它 returns 你在 java 中计算并填充的所有行。这样你的"rowData" collection name里的repeat就可以访问到你想要的所有数据了。只需将其构建成 table.

但是现在排序...我们一直在使用 jQuery DataTables 来做这件事..这都是客户端...你的重复下来然后 DataTables 开始并可以做一切sortable...无需依赖视图..效果很好...
现在它都是客户端,但支持分页并且工作得很好。如果您只是抽出大量记录 -​​ 6,000 多条,那么您可能希望将数据输出为 json 并利用一些服务器缓存......我们开始将它用于一些非常大的记录输出.. 很多行,到目前为止运行良好。希望我能在不久的将来提供一些关于 NotesIn9.com 的示例。

为了使处理速度更快、更轻便,我将 JSON 与 JQuery DataTables 结合使用。 根据数据大小和用途,JSON 可以即时或按计划生成并保存在 Lotus Notes 文档或 ApplicationScope 变量中。

$.each(data, function(i, item) {
   dataTable.row.add( [data[i].something1,data[i].something2,data[i].something3])
});