脱机移动混合应用程序(云构建)的增量跟踪

2020-08-18 12:37发布

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

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


大家好,

我已经使用WebIDE完整堆栈中的cloud build(打包的应用程序)选项创建了一个脱机Mobile Hybrid应用程序。 脱机功能运行良好,我可以从应用程序执行所有CRUD操作。

现在,我想启用增量跟踪以提高应用程序的性能。 同样,我为后端OData服务启用了增量跟踪,即现在我正在获取增量令牌

基于一些博客,我了解到我们不需要在应用程序中进行任何代码级别更改,因此我的代码未受影响。 请在下面的文件mobile> hybrid> sap-mobile-hybrid.js中找到我添加的自定义代码:

 openStore:函数(){
 sap.m.MessageToast.show("在openStore");
 jQuery.sap.require(" sap.ui.thirdparty.datajs"); //使用SAPUI5和Kapsel离线商店时需要
 var properties = {
 " name":" chek_mainService",
 "主机":sap.hybrid.kapsel.appContext.registrationContext.serverHost,
 "端口":sap.hybrid.kapsel.appContext.registrationContext.serverPort,
 " https":sap.hybrid.kapsel.appContext.registrationContext.https,
 " serviceRoot":fiori_client_appConfig.appID +" _" + mobile_appRoutes [0]。目的地,

 " definingRequests":{
 " chekset":"/img/parentSet",
 " empset":"/img/EmployeeSet"
 }
 };


 store = sap.OData.createOfflineStore(properties);


 var openStoreSuccessCallback = function(){
 sap.m.MessageToast.show("在openStoreSuccessCallback");
 sap.OData.applyHttpClient(); //现在可以针对datajs进行离线OData调用。
 sap.hybrid.startApp();
 }


 var openStoreErrorCallback =函数(错误){
 sap.m.MessageToast.show("在openStoreErrorCallback");
 sap.m.MessageToast.show("发生错误" + JSON.stringify(错误));
 }


 store.open(openStoreSuccessCallback,openStoreErrorCallback);
 },


 refreshStore:function(){
 sap.m.MessageToast.show("离线事件:refreshStore");
 如果(!store){
 sap.m.MessageToast.show("商店必须先打开,然后才能刷新");
 返回;
 }
 store.refresh(sap.hybrid.refreshStoreCallback,sap.hybrid.errorCallback,null,sap.hybrid.progressCallback);
 },


 refreshStoreCallback:function(){
 sap.m.MessageToast.show("离线事件:refreshStoreCallback");
 },


 clearStore:function(){
 sap.m.MessageToast.show("离线事件:clearStore");
 store.close(sap.hybrid.closeStoreCallback,sap.hybrid.errorCallback);
 },


 closeStoreCallback:function(){
 sap.m.MessageToast.show("离线事件:closeStoreCallback");
 store.clear(function(){
 sap.m.MessageToast.show("清除成功");
 },sap.hybrid.errorCallback);
 },


 flushStore:function(){
 sap.m.MessageToast.show("离线事件:flushStore");
 如果(!store){
 sap.m.MessageToast.show("商店必须先打开才可以刷新");
 返回;
 }
 store.flush(sap.hybrid.flushStoreCallback,sap.hybrid.errorCallback,null,sap.hybrid.progressCallback);
 },


 flushStoreCallback:function(){
 sap.m.MessageToast.show("离线事件:flushStoreCallback");
 },


 errorCallback:函数(错误){
 sap.m.MessageToast.show("离线事件:errorCallback");
 sap.m.MessageToast.show("发生错误:" + JSON.stringify(error));
 },


 progressCallback:函数(progressStatus){
//sap.m.MessageToast.show("离线事件:progressCallback");


 var status = progressStatus.progressState;
 var lead ="未知";
 如果(状态=== sap.OfflineStore.ProgressState.STORE_DOWNLOADING){
 lead ="正在下载";
 }否则,如果(status === sap.OfflineStore.ProgressState.REFRESH){
 lead ="刷新";
 }否则,如果(状态=== sap.OfflineStore.ProgressState.FLUSH_REQUEST_QUEUE){
 lead ="冲洗";
 }否则,如果(状态=== sap.OfflineStore.ProgressState.DONE){
 lead ="完成";
 }其他{
 sap.m.MessageToast.show(" unknown status in progressCallback");
 }
 sap.m.MessageToast.show(lead +"已发送:" + progressStatus.bytes已发送+"已接收:" + progressStatus.bytesRecv +"文件大小:" +
 progressStatus.fileSize);
 },


 appLogon:函数(appConfig){
 var context = {};
 var url = appConfig.fioriURL;
 if(url &&(url.indexOf(" https://")=== 0 || url.indexOf(" http://")=== 0)){
 如果(url.indexOf(" https://")=== 0){
 https = true;
 url = url.substring(" https://" .length);
 }其他{
 https = false;
 url = url.substring(" http://" .length);
 }


 如果(url.indexOf("?")> = 0){
 url = url.substring(0,url.indexOf("?"));
 }
 如果(url.indexOf("/")> = 0){
 url = url.split("/")[0];
 }
 如果(url.indexOf(":")> = 0){
 context.serverHost = url.split(":")[0];
 context.serverPort = url.split(":")[1];
 }
 }


//设置auth元素
 如果(appConfig.auth){
 context.auth = appConfig.auth;
 }


//如果设置了communicatorId,则使用它与现有值兼容。 否则,请使用默认的" REST"。
//这样,登录核心不需要向服务器根URL发送ping请求,这将导致身份验证问题。
//当根URL使用与应用程序端点URL不同的auth方法时,就会发生这种情况,因为应用程序只能在其自己的端点URL上处理身份验证。
 context.communicatorId = appConfig.communicatorId?  appConfig.communicatorId:" REST";


//如果(上下文中的" serverHost"和上下文中的" serverPort"和&" https"中的上下文){
////开始SCPms登录
//sap.hybrid.kapsel.doLogonInit(context,appConfig.appID,sap.hybrid.startApp);
 if(上下文中的" serverHost"和上下文中的" serverPort"和上下文中的" https"){
//开始SCPms登录
 sap.hybrid.kapsel.doLogonInit(上下文,appConfig.appID,sap.hybrid.openStore);
//不再需要在清单文件中修改数据源uri。 您可以使用
 }其他{
 console.error("登录的上下文数据不完整");
 }
 },

 

在SAP Cloud Platform移动服务中,在配置选项卡中针对应用程序的脱机插件,我进行了以下配置。

但是当我使用SCPms中的Analytics(分析)> Network Traces(网络跟踪)进行检查时,仍然可以看到服务调用正在获取整个数据集,而不仅仅是增量。

请告诉我如何解决此问题并在我的应用程序中实现增量跟踪。

谢谢

Kunj Bihari Shukla

(67.7 kB)

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

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


大家好,

我已经使用WebIDE完整堆栈中的cloud build(打包的应用程序)选项创建了一个脱机Mobile Hybrid应用程序。 脱机功能运行良好,我可以从应用程序执行所有CRUD操作。

现在,我想启用增量跟踪以提高应用程序的性能。 同样,我为后端OData服务启用了增量跟踪,即现在我正在获取增量令牌

基于一些博客,我了解到我们不需要在应用程序中进行任何代码级别更改,因此我的代码未受影响。 请在下面的文件mobile> hybrid> sap-mobile-hybrid.js中找到我添加的自定义代码:

 openStore:函数(){
 sap.m.MessageToast.show("在openStore");
 jQuery.sap.require(" sap.ui.thirdparty.datajs"); //使用SAPUI5和Kapsel离线商店时需要
 var properties = {
 " name":" chek_mainService",
 "主机":sap.hybrid.kapsel.appContext.registrationContext.serverHost,
 "端口":sap.hybrid.kapsel.appContext.registrationContext.serverPort,
 " https":sap.hybrid.kapsel.appContext.registrationContext.https,
 " serviceRoot":fiori_client_appConfig.appID +" _" + mobile_appRoutes [0]。目的地,

 " definingRequests":{
 " chekset":"/img/parentSet",
 " empset":"/img/EmployeeSet"
 }
 };


 store = sap.OData.createOfflineStore(properties);


 var openStoreSuccessCallback = function(){
 sap.m.MessageToast.show("在openStoreSuccessCallback");
 sap.OData.applyHttpClient(); //现在可以针对datajs进行离线OData调用。
 sap.hybrid.startApp();
 }


 var openStoreErrorCallback =函数(错误){
 sap.m.MessageToast.show("在openStoreErrorCallback");
 sap.m.MessageToast.show("发生错误" + JSON.stringify(错误));
 }


 store.open(openStoreSuccessCallback,openStoreErrorCallback);
 },


 refreshStore:function(){
 sap.m.MessageToast.show("离线事件:refreshStore");
 如果(!store){
 sap.m.MessageToast.show("商店必须先打开,然后才能刷新");
 返回;
 }
 store.refresh(sap.hybrid.refreshStoreCallback,sap.hybrid.errorCallback,null,sap.hybrid.progressCallback);
 },


 refreshStoreCallback:function(){
 sap.m.MessageToast.show("离线事件:refreshStoreCallback");
 },


 clearStore:function(){
 sap.m.MessageToast.show("离线事件:clearStore");
 store.close(sap.hybrid.closeStoreCallback,sap.hybrid.errorCallback);
 },


 closeStoreCallback:function(){
 sap.m.MessageToast.show("离线事件:closeStoreCallback");
 store.clear(function(){
 sap.m.MessageToast.show("清除成功");
 },sap.hybrid.errorCallback);
 },


 flushStore:function(){
 sap.m.MessageToast.show("离线事件:flushStore");
 如果(!store){
 sap.m.MessageToast.show("商店必须先打开才可以刷新");
 返回;
 }
 store.flush(sap.hybrid.flushStoreCallback,sap.hybrid.errorCallback,null,sap.hybrid.progressCallback);
 },


 flushStoreCallback:function(){
 sap.m.MessageToast.show("离线事件:flushStoreCallback");
 },


 errorCallback:函数(错误){
 sap.m.MessageToast.show("离线事件:errorCallback");
 sap.m.MessageToast.show("发生错误:" + JSON.stringify(error));
 },


 progressCallback:函数(progressStatus){
//sap.m.MessageToast.show("离线事件:progressCallback");


 var status = progressStatus.progressState;
 var lead ="未知";
 如果(状态=== sap.OfflineStore.ProgressState.STORE_DOWNLOADING){
 lead ="正在下载";
 }否则,如果(status === sap.OfflineStore.ProgressState.REFRESH){
 lead ="刷新";
 }否则,如果(状态=== sap.OfflineStore.ProgressState.FLUSH_REQUEST_QUEUE){
 lead ="冲洗";
 }否则,如果(状态=== sap.OfflineStore.ProgressState.DONE){
 lead ="完成";
 }其他{
 sap.m.MessageToast.show(" unknown status in progressCallback");
 }
 sap.m.MessageToast.show(lead +"已发送:" + progressStatus.bytes已发送+"已接收:" + progressStatus.bytesRecv +"文件大小:" +
 progressStatus.fileSize);
 },


 appLogon:函数(appConfig){
 var context = {};
 var url = appConfig.fioriURL;
 if(url &&(url.indexOf(" https://")=== 0 || url.indexOf(" http://")=== 0)){
 如果(url.indexOf(" https://")=== 0){
 https = true;
 url = url.substring(" https://" .length);
 }其他{
 https = false;
 url = url.substring(" http://" .length);
 }


 如果(url.indexOf("?")> = 0){
 url = url.substring(0,url.indexOf("?"));
 }
 如果(url.indexOf("/")> = 0){
 url = url.split("/")[0];
 }
 如果(url.indexOf(":")> = 0){
 context.serverHost = url.split(":")[0];
 context.serverPort = url.split(":")[1];
 }
 }


//设置auth元素
 如果(appConfig.auth){
 context.auth = appConfig.auth;
 }


//如果设置了communicatorId,则使用它与现有值兼容。 否则,请使用默认的" REST"。
//这样,登录核心不需要向服务器根URL发送ping请求,这将导致身份验证问题。
//当根URL使用与应用程序端点URL不同的auth方法时,就会发生这种情况,因为应用程序只能在其自己的端点URL上处理身份验证。
 context.communicatorId = appConfig.communicatorId?  appConfig.communicatorId:" REST";


//如果(上下文中的" serverHost"和上下文中的" serverPort"和&" https"中的上下文){
////开始SCPms登录
//sap.hybrid.kapsel.doLogonInit(context,appConfig.appID,sap.hybrid.startApp);
 if(上下文中的" serverHost"和上下文中的" serverPort"和上下文中的" https"){
//开始SCPms登录
 sap.hybrid.kapsel.doLogonInit(上下文,appConfig.appID,sap.hybrid.openStore);
//不再需要在清单文件中修改数据源uri。 您可以使用
 }其他{
 console.error("登录的上下文数据不完整");
 }
 },

 

在SAP Cloud Platform移动服务中,在配置选项卡中针对应用程序的脱机插件,我进行了以下配置。

但是当我使用SCPms中的Analytics(分析)> Network Traces(网络跟踪)进行检查时,仍然可以看到服务调用正在获取整个数据集,而不仅仅是增量。

请告诉我如何解决此问题并在我的应用程序中实现增量跟踪。

谢谢

Kunj Bihari Shukla

(67.7 kB)
付费偷看设置
发送
1条回答
我是小鹏鹏啊
1楼-- · 2020-08-18 13:01

嗨,
我有同样的问题。 找到任何解决方案了吗?

一周热门 更多>