首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取SAPUI5 v2 ODataModel的服务元数据?

获取SAPUI5 v2 ODataModel的服务元数据?
EN

Stack Overflow用户
提问于 2015-08-11 10:01:53
回答 2查看 20.1K关注 0票数 3

我尝试获取sapui5 v2 odata模型的服务元数据。代码:

代码语言:javascript
复制
var oModel = new sap.ui.model.odata.v2.ODataModel(someServiceURL);
var oMetadata = oModel.getServiceMetadata();

这应该根据这个页面工作:https://openui5beta.hana.ondemand.com/docs/guide/6c47b2b39db9404582994070ec3d57a2.html

不管怎么说,我给oMetadata买了"undefined“。如果我将代码更改为:

代码语言:javascript
复制
var oModel = new sap.ui.model.odata.v2.ODataModel({
        loadMetadataAsync : false,
        serviceUrl : someServiceURL
});

静止oMetadata === undefined

根据SDK文档,元数据应该同步加载:

返回元数据对象。请注意,当使用带有bLoadMetadataAsync = true的模型时,由于元数据尚未加载,此函数可能返回未定义的数据。在本例中,附加到metadataLoaded事件以在元数据可用时得到通知,然后调用此函数。

我的密码怎么了?

我正在使用(1.28.11):

代码语言:javascript
复制
<script src="https://sapui5.netweaver.ondemand.com/resources/sap-ui-core.js"    ...

我开始调试UI5代码并检测到以下行: this.bLoadMetadataAsync = true;

我开始调试SAPUI5代码,并检测到以下行(似乎每次都被调用):

代码语言:javascript
复制
this.bLoadMetadataAsync = true;

是虫子吗?还是我的代码出了什么问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-11 11:41:00

解决方案:在实际的应用程序环境中为我工作。我想是因为没有提出实际的数据要求,所以我的小提琴里没有被射中:

代码语言:javascript
复制
var oModel = new sap.ui.model.odata.v2.ODataModel(<ServiceURL>);

oModel.attachMetadataLoaded(null, function(){
   var oMetadata = oModel.getServiceMetadata();
   console.log(oMetadata);
},null);

通向解决方案:

好的,我开始玩这个游戏,并发现了以下内容:

  • .getServiceMetadata()sap.ui.model.odata.ODataModel合作得很好。
  • 使用sap.ui.model.odata.v2.ODataModel,元数据请求是通过网络发送的,但不知何故,.getServiceMetadata()返回了undefined
  • 我试着sap.ui.model.odata.v2.ODataModel.attachMetadataLoaded(),但事件从未被炒鱿鱼。(这仅适用于我使用的jsbin )

我将编辑这与任何进一步的发现,我所做的。如果你有什么东西应该包括在我的发现/测试,就告诉我。

编辑:

bLoadMetadataAsync是您可以在sap.ui.model.odata.ODataModel上设置的参数。该参数不再存在于sap.ui.model.odata.v2.ODataModel的API中。我假设异步加载已经被选择为默认加载。

编辑: @user3783327在这里报告了一个bug:https://github.com/SAP/openui5/issues/564

票数 4
EN

Stack Overflow用户

发布于 2017-11-20 11:24:02

作为天狼星,ODataModel现在有一个名为metadataLoaded的API,它相应地返回一个承诺。在解析函数中,我们肯定可以得到服务元数据getServiceMetadata()

代码语言:javascript
复制
myODataModel.metadataLoaded()
  .then(() =>/* Do something with */myODataModel.getServiceMetadata());

或者,我们也可以使用ODataMetaModel,它可以在任何ManagedObject (包括视图)上设置,并提供与服务元数据相关的几个有用的访问器。为了获得元模型,我们需要从ODataModel中使用适当的API,而不是直接实例化模型:

代码语言:javascript
复制
myODataModel.getMetaModel().loaded()
  .then(() =>/* Do something with */myODataModel.getMetaModel()/*...*/);

文档: OData V2的元模型

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31938755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档