连接到OData服务时如何在客户端对数据进行排序?

2020-08-22 22:04发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

我想制作一个应用程序,以显示来自OData服务的数据,并且用户可以使用在排序对话框中选择的顺序对数据进行排序。

我是这样的

 handleSortingdialogConfirm:function(oEvent){
     var oTable = this.byId(" dataTable"),
         oBinding = oTable.getBinding(" items"),
         mParams = oEvent.getParameters(),
         sPath,
         b下降

     sPath = mParams.sortItem.getKey();
     bDescending = mParams.sortDescending;
     aSorters.push(new Sorter(sPath,bDescending,this.fnComparator));

     oBinding.sort(aSorters);
 },
 

但是,此程序发送请求以" order by"从服务中选择数据。

我认为,此请求是不必要的,因为所有数据已经​​在客户端中,可以在表中显示。

我想知道如何在不发送请求的情况下对数据进行排序,这意味着在客户端进行排序。

我在Internet上找到了一些示例,但它们仅解释了在XML视图中实现" sorter"属性的静态排序,并且我不确定它是否可以支持用户通过对话框选择排序顺序。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

我想制作一个应用程序,以显示来自OData服务的数据,并且用户可以使用在排序对话框中选择的顺序对数据进行排序。

我是这样的

 handleSortingdialogConfirm:function(oEvent){
     var oTable = this.byId(" dataTable"),
         oBinding = oTable.getBinding(" items"),
         mParams = oEvent.getParameters(),
         sPath,
         b下降

     sPath = mParams.sortItem.getKey();
     bDescending = mParams.sortDescending;
     aSorters.push(new Sorter(sPath,bDescending,this.fnComparator));

     oBinding.sort(aSorters);
 },
 

但是,此程序发送请求以" order by"从服务中选择数据。

我认为,此请求是不必要的,因为所有数据已经​​在客户端中,可以在表中显示。

我想知道如何在不发送请求的情况下对数据进行排序,这意味着在客户端进行排序。

我在Internet上找到了一些示例,但它们仅解释了在XML视图中实现" sorter"属性的静态排序,并且我不确定它是否可以支持用户通过对话框选择排序顺序。

付费偷看设置
发送
4条回答
jovirus
1楼-- · 2020-08-22 22:45

嗨,

根据您的问题,我认为您表的项目绑定是ODataMdel。

您可以将OperationMode设置为 sap.ui.model ODataModel中的.odata.OperationMode.Client 作为 Mahesh Kumar Palavalli 指出

操作在客户端上执行。 仅当所有条目均已加载到客户端时,此方法才有效。 初始请求会获取完整的集合,过滤和排序不会触发其他请求。

如果要在客户端进行排序,建议您使用以下模式:

在option2中,binding.sort()方法将不发送服务器请求。

服务器端排序-为什么?

发送请求以从服务器选择数据的概念是选择适当的数据,同时最大程度地减少通过网络发送的数据量。 看一下查询:$ orderby查询选项旁边有一个$ top选项,其值是20或100,取决于表的配置。 这是因为表格只会向用户显示该数量的项目。 如果用户向下滚动,则基于项目计数,Table组件将知道应该使用skip和top组合来查询数据的哪一部分。

考虑您有一百万个产品项,并且按字母顺序查询,将发出top = 20的请求。 比您将顺序更改为反向。 您期望看到什么? 是20种商品按逆序排序,还是订购的100万种产品中排在前20名的商品?

此致

Peter

落灬小鱼
2楼-- · 2020-08-22 22:53

感谢Mahesh,我用您的评论更新了答案

lukcy2020
3楼-- · 2020-08-22 22:49

您好宫口信吉

完全同意佩塔尼亚诺

< 但是,还有一种方法可以通过使用operationMode在具有odata绑定的表上进行客户端过滤。 当然,不建议使用此方法。 (如果要使用此方法,请确保使用最大阈值加载UI中的所有数据。)

https://ui5.sap.com/#/api/sap.ui.model.odata.v2.ODataListBinding%23constructor

检查以下答案。

https ://answers.sap.com/questions/11999300/client-side-filter-on-sapui5-table.html

-马赫什语

吹牛啤
4楼-- · 2020-08-22 23:05

你好 ,

为什么不使用智能表,您在服务器端会自动执行所有这些操作?

佩特·卡塔诺(PéterCatano)是正确的,在提示端进行排序不是一个明智的主意,后端应该执行此操作。

致谢,

约瑟夫

# p#

一周热门 更多>