ODataModel:元数据失败时捕获错误

2020-08-18 20:14发布

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

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


你好,
当OData模型在清单中声明并由框架初始化时,如何在尝试加载元数据时检测错误?

例如,如果后端服务不可用,或者存在授权问题,则对 $ metadata 端点的调用将返回404或403错误。 这已记录在控制台中。

但是,如文档中所述,在发生错误的情况下, model.metadataLoaded()承诺无法解决。 这意味着,如果控制器稍后尝试在该模型上调用 read(),则其回调(成功/错误)都不会解决,因为在内部, read()是 也称为 metadataLoaded 承诺(永远无法解决)。 因此,异步 read()永远不会触发其回调之一。

PS:按照最近的最佳实践,将异步加载组件(async = true,manifestFirst = true)。 因此 model.attachMetadataFailed 事件处理程序不可靠。 类似于" metadataLoaded ...

",具有" metadataFailed"承诺将非常有用。

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

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


你好,
当OData模型在清单中声明并由框架初始化时,如何在尝试加载元数据时检测错误?

例如,如果后端服务不可用,或者存在授权问题,则对 $ metadata 端点的调用将返回404或403错误。 这已记录在控制台中。

但是,如文档中所述,在发生错误的情况下, model.metadataLoaded()承诺无法解决。 这意味着,如果控制器稍后尝试在该模型上调用 read(),则其回调(成功/错误)都不会解决,因为在内部, read()是 也称为 metadataLoaded 承诺(永远无法解决)。 因此,异步 read()永远不会触发其回调之一。

PS:按照最近的最佳实践,将异步加载组件(async = true,manifestFirst = true)。 因此 model.attachMetadataFailed 事件处理程序不可靠。 类似于" metadataLoaded ...

",具有" metadataFailed"承诺将非常有用。
付费偷看设置
发送
3条回答
Haoba3210
1楼-- · 2020-08-18 20:50

更新:从UI5 1.79开始,调用.metadataLoaded( true )将返回一个承诺,该承诺实际上会在加载元数据失败的情况下拒绝(请参阅 commit 08dc441 )。

 myV2ODataModel.metadataLoaded(true).then(//*...*/)
* ... */); //从1.79开始

_____

原始答案:

>拥有" metadataFailed"承诺将非常有用,类似于元数据已加载...。 em>

我同意。 目前,它尚未实现。 这是利用以下API的解决方法:

在Component.js中

返回UIComponent.extend(" my.Component",{
   元数据:{
     清单:" json"
   },

   初始化:function(){
     UIComponent.prototype.init.apply(this,arguments);
     this.metadataFailed()。then(/*...*/);
   },

   metadataFailed:function(){
     const myODataModel = this.getModel(" odata"); //从描述符
     const failedAlready = myODataModel.isMetadataLoadingFailed();
     返回失败?  Promise.resolve():新的Promise(resolve => {
       myODataModel.attachEventOnce(" metadataFailed",resolve);
     });
   },

 });
 
Nir深蓝
2楼-- · 2020-08-18 20:32

我刚刚在此处添加了有关" metadataFailed"承诺的增强请求: https://github.com/SAP/openui5/issues/2239

N-Moskvin
3楼-- · 2020-08-18 20:54

只需在下面更新我的答案即可。 我想说这个问题现在已经解决。

一周热门 更多>