当我在代码中创建模型时,我通常使用:
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结构?
答案 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 ...注意:它不会加载任何丢失的数据,并且返回的数据可能不完整!