1

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

为了做到这一点,我知道我可以使用 Dataview、Datatable 或重复控制(可能还有其他想法?)。当然,我不能将所有数据都带到客户端,这太多了。

我正在寻找一种解决方案,它允许我进行分页(使用分页器组件很容易做到),但更重要的是对标题单击进行排序。为了清楚起见,我需要对视图的所有条目进行排序,而不仅仅是对客户端上当前显示的页面进行排序。

有什么更有效的方法可以做到这一点?我真的有很多数据要计算,所以我需要最快的方法来计算。

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

4

3 回答 3

2

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

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

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

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

于 2015-02-26T09:01:22.130 回答
1

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

List<salesOrder> getOrders() {}

因此,在重复中,您调用 company.getOrders() 并返回您在 java 中计算并填充的所有行。因此,您在重复中的“rowData”集合名称可以访问您想要的所有数据。只需将其构建成一个表。

但是现在排序......我们一直在使用 jQuery DataTables 来做这个......这都是客户端......你的重复出现了,然后 DataTables 开始并可以让所有东西都可以排序......不需要依赖意见.. 效果很好...
现在都是客户端,但支持分页并且工作得相当不错。如果您只是抽出大量记录 -​​ 6,000 多条,那么您可能希望考虑将数据输出为 json 并利用一些服务器缓存......我们开始将它用于一些非常大的输出......很多行,到目前为止运行良好。希望不久的将来我会在 NotesIn9.com 上提供一些示例。

于 2015-02-26T15:30:47.970 回答
1

为了保持处理速度更快、更轻量,我将 JSON 与 JQuery DataTables 结合使用。根据数据大小和使用情况,JSON 可以动态或按计划生成并保存在 Lotus Notes Documents 或 ApplicationScope 变量中。

$.each(data, function(i, item) {
   dataTable.row.add( [data[i].something1,data[i].something2,data[i].something3])
});
于 2015-02-27T07:47:35.393 回答