SAPUI5:如何以编程方式访问ODataModel数据?

时间:2016-08-03 17:16:12

标签: javascript model odata sapui5 hana

当我在代码中创建模型时,我通常使用:

var oData = {
  "name" : "",
  "description" : "",
  "phone" : ""
};
var oModel = new JSONModel(oData);
this.setModel(oModel, "data");

之后,我可以使用以下方式访问模型及其值:

var oModel = this.getView().getModel("data");
var description = oModel.getProperty("/description");

但是,那是使用内部json结构。当我从Hana平台使用oData目标或在我的SAPUI5项目上使用模拟服务器时,如何获得oModel结构?

1 个答案:

答案 0 :(得分:5)

与任何其他模型一样,ODataModel(v2)上存在getProperty方法。因此用法有很大不同:

ODataModel如何存储数据

这是因为ODataModel通过它的密钥存储数据,例如

{
  "EntitySet('Key-1')": {},
  "EntitySet('Key-2')": {},
  "EntitySet('Key-3')": {},
  "ExpandedEntitySet(EntityID='Key-3',ExpandedEntityIS='5')": {}
}

检查oMyODataDataModel.oData以查看实际存储的数据(但请不要以这种方式使用或操作它,因为这是内部API)。

ODataModels getProperty

要检索单个实体,您必须说出以下内容:

oDataModel.getProperty("/EntitySet('Key-1')");

尽管该集合的绑定路径是/EntitySet请求

oDataModel.getProperty("/EntitySet");

什么都不会返回。发生这种情况是因为oData [“EntitySet”]的内部存储数据结构中没有实体,而getProperty方法仍然是此内部结构中的查找。

包含展开的实体

ODataModels getProperty方法的一个有趣之处是bIncludeExpandEntries参数。如果将其设置为true,则将返回所访问的实体,包括所有可能已扩展的NavigationProperties。在上面的例子中

oDataModel.getProperty("/EntitySet('Key-3')");

也将返回“ExpandedEntitySet(EntityID ='Key-3',ExpandedEntityIS ='5')”。

ODataModels getObject

ODataModels getObject方法具有更大的灵活性,因为它允许本地使用OData参数$select$expand。仍然无法获取EntitySet ...注意:它不会加载任何丢失的数据,并且返回的数据可能不完整!