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

时间:2015-02-26 08:35:33

标签: xpages lotus-notes xpages-ssjs notesview

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

为了做到这一点,我知道我可以使用Dataview,Datatable或重复控制(其他想法可能?)。我肯定无法将所有数据都带到客户端上,这太过分了。

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

更有效的方法是什么?我真的有很多要计算的数据,所以我需要以最快的方式来完成它。

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

3 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

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

List<salesOrder> getOrders() {}

所以在重复中你调用company.getOrders()并返回你在java中编写并填充的所有行。所以你的&#34; rowData&#34;重复中的集合名称可以访问您想要的所有数据。把它建成一张桌子。

但是现在排序......我们一直在使用jQuery DataTables来做这件事......它是所有客户端......你的重复下来然后DataTables开始并且可以做所有事情可以排序......不需要依赖观点..效果很好...
现在它是所有客户端但支持分页并且工作相当不错。如果你只是抽出大量的记录--6,000+那么你可能想看看输出数据为json并采取一些服务器缓存的优势......我们开始使用它与一些非常大的输出..很多行,它到目前为止运作良好。希望在不久的将来我会在NotesIn9.com上有一些例子。

答案 2 :(得分:1)

为了使处理更快更轻,我将JSON与JQuery DataTables一起使用。 根据数据大小和使用情况,JSON可以动态生成或计划生成,并保存在Lotus Notes文档或ApplicationScope变量中。

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