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

正在获取SAPUI5 v2 ODataModel的服务元数据?,odata,sapui5,Odata,Sapui5,我尝试获取sapui5 v2 odata模型的服务元数据。 代码: 这应根据本页进行: 无论如何,我得到了oMetadata的“未定义的”。 如果我将代码更改为: var oModel = new sap.ui.model.odata.v2.ODataModel({ loadMetadataAsync : false, serviceUrl : someServiceURL }); 仍然oMetadata==未定义 根据SDK文档,元数据应同步加载: 返回元数

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

这应根据本页进行:

无论如何,我得到了
oMetadata
的“
未定义的
”。
如果我将代码更改为:

var oModel = new sap.ui.model.odata.v2.ODataModel({
        loadMetadataAsync : false,
        serviceUrl : someServiceURL
});
仍然
oMetadata==未定义

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

返回元数据对象。请注意,当使用带有 bloadmetadatasync=true,则此函数可能返回未定义的 因为元数据尚未加载。在这种情况下,连接到 metadataLoaded事件,以便在元数据丢失时收到通知 可用,然后调用此函数

我的代码有什么问题

我正在使用(1.28.11):

是虫子吗?还是我的代码有问题?

解决方案: 以下内容在实际的应用程序环境中适用于我。我想我之所以没有被解雇是因为没有提出实际的数据请求:

var oModel = new sap.ui.model.odata.v2.ODataModel(<ServiceURL>);

oModel.attachMetadataLoaded(null, function(){
   var oMetadata = oModel.getServiceMetadata();
   console.log(oMetadata);
},null);
var-oModel=new sap.ui.model.odata.v2.ODataModel();
oModel.attachMetadataLoaded(null,函数(){
var oMetadata=oModel.getServiceMetadata();
控制台日志(oMetadata);
},空);
引导解决方案:

好吧,我开始玩这个游戏,发现如下:

  • .getServiceMetadata()
    sap.ui.model.odata.ODataModel
    配合良好
  • 使用
    sap.ui.model.odata.v2.ODataModel
    对元数据的请求通过网络发送,但以某种方式
    .getServiceMetadata()
    返回了
    未定义的
  • 我试图
    sap.ui.model.odata.v2.ODataModel.attachMetadataLoaded()
    但事件从未触发。(这仅适用于我使用的jsbin)
我将编辑此与我的任何进一步的调查结果。如果你有什么应该包括在我的调查结果/测试中,请告诉我

编辑:

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

编辑: @user3783327在这里报告了一个错误:

因为,ODataModel现在有一个名为的API,它相应地返回一个承诺。在resolve函数中,我们肯定可以得到服务元数据

myODataModel.metadataLoaded()
。然后(()=>/*对*/myODataModel.getServiceMetadata()执行一些操作);

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

myODataModel.getMetaModel().loaded()
。然后(()=>/*对*/myODataModel.getMetaModel()/*…*/)执行一些操作;

谢谢,这是本期的一个打字错误。当然,我使用了相同的变量。我修改了文本,对它进行了深入研究。编辑了我的答案。是文档错误还是我们检测到了错误?比较该页面:表示返回元数据对象。请注意,当使用bloadmetadatasync=true的模型时,此函数可能会返回undefined,因为元数据尚未加载。在这种情况下,附加到metadataLoaded事件以在元数据可用时获得通知,然后调用此函数_UI5的下一个版本将在模型上有一个返回承诺的方法:这使得使用完全异步的v2模型更加容易:oModel.metadataLoaded().then(function(){[…]});
<script src="https://sapui5.netweaver.ondemand.com/resources/sap-ui-core.js"    ...
this.bLoadMetadataAsync = true;
var oModel = new sap.ui.model.odata.v2.ODataModel(<ServiceURL>);

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