SAPUI5:如何以编程方式访问 OData 模型数据?
SAPUI5: How can I access ODataModel data programatically?
当我在代码中创建模型时,我通常使用:
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 结构?
getProperty 方法存在于 ODataModel (v2) 和任何其他模型上。因此用法差异很大:
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");
return 什么都不会。发生这种情况是因为 oData["EntitySet"] 的内部存储数据结构中没有实体,并且 getProperty
方法仍然只是在此内部结构中进行查找。
包括展开的实体
ODataModels getProperty
方法的一个有趣之处是 bIncludeExpandEntries
参数。如果将其设置为 true,访问的实体将被 returned,包括所有可能扩展的 NavigationProperties。在上面的例子中
oDataModel.getProperty("/EntitySet('Key-3')");
也会return"ExpandedEntitySet(EntityID='Key-3',ExpandedEntityIS='5')"用它。
ODataModels getObject
ODataModels getObject
方法具有更大的灵活性,因为它允许在本地使用 OData 参数 $select
和 $expand
。获取 EntitySet 仍然是不可能的...注意:它不会加载任何丢失的数据并且 returned 数据可能不完整!
当我在代码中创建模型时,我通常使用:
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 结构?
getProperty 方法存在于 ODataModel (v2) 和任何其他模型上。因此用法差异很大:
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");
return 什么都不会。发生这种情况是因为 oData["EntitySet"] 的内部存储数据结构中没有实体,并且 getProperty
方法仍然只是在此内部结构中进行查找。
包括展开的实体
ODataModels getProperty
方法的一个有趣之处是 bIncludeExpandEntries
参数。如果将其设置为 true,访问的实体将被 returned,包括所有可能扩展的 NavigationProperties。在上面的例子中
oDataModel.getProperty("/EntitySet('Key-3')");
也会return"ExpandedEntitySet(EntityID='Key-3',ExpandedEntityIS='5')"用它。
ODataModels getObject
ODataModels getObject
方法具有更大的灵活性,因为它允许在本地使用 OData 参数 $select
和 $expand
。获取 EntitySet 仍然是不可能的...注意:它不会加载任何丢失的数据并且 returned 数据可能不完整!