如何为智能表实现异步行计数

2020-08-17 01:26发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)你好, 后端速度很慢,我需要在...

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

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


你好,

后端速度很慢,我需要在其上使用sapui5智能表。

我每次只获取20条记录的块("智能增长"),但是客户仍然需要在第一个查询中查看符合过滤条件的行总数。

我使用showRowCount属性获取总行数(这意味着它将触发一个单独的oData请求$ count)。

所以总结一下:

-oData请求$ count非常慢(胖后端是原因)

-而前20条记录可以快速获取(不到几秒钟)

我的问题是,在收到2个请求之前,智能表将保持"繁忙"状态(=不显示任何内容)。 其中一个请求速度很快,但另一个请求($ count)则降低了性能……

有没有一种方法可以在收到智能表中的前20行后立即显示它们,然后等到最终可用时才更新行数??

非常感谢任何想法

克里斯托夫

(13.9 kB)
2条回答
暮风yp
2020-08-17 02:06 .采纳回答

Hello Makesh,

感谢您的答复,对不起您的答复。

这就是我发现的东西:

-$ inlinecount = allpages无济于事,因为它减慢了答案的速度(count(*)慢于计算非常复杂的后端数据库模型的20个首次出现的次数)

-实际上,智能表控件将发出两个并行请求:一个并行请求,例如odata_srv/Products?$ top = 20,另一个并行请求,例如odata_srv/Products/$ count。 只要这两个请求都没有完成,Smart Table控件就不会显示任何内容(保持繁忙状态)

因此,我设法解决了问题,但是在清单中将countMode设置为" none"。 这样,当收到第一个请求时(例如/Products?$ top = 20),将立即显示20条第一条记录。

然后在onBeforeRebindTable()中,

 oEvent.getSource()。attachEventOnce(" dataReceived",
 {"过滤器":aFilters,
  " customQueryParam":customQueryParam},
 this.onDataReceivedOnce,this);
 

在onDataReceivedOnce()中,我手动执行如下oData请求:odata_srv/Products/$ count。

收到后,我更新了智能表格内部工具栏的标题,就是这样...

如果您设置oData服务的软状态模式,可能会出现另一个问题:由于在软状态模式处于活动状态时,SAP GW无法处理并行oData请求,因此您可能需要在SEGW中创建«镜像»oData服务。 (=对其他服务的引用),处于无状态模式。 那是,如果您真的希望能够执行并行请求,那么。

克里斯托夫

一周热门 更多>