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

标签 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 Platform 中的 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')");

尽管集合的绑定(bind)路径是 /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...注意:它不会加载任何丢失的数据,并且返回的数据可能不完整!

关于javascript - SAPUI5:如何以编程方式访问 ODataModel 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38749935/

相关文章:

javascript - 通过 Office Javascript API 插入评论

javascript - C3 图表中的工具提示不刷新

javascript - 如何在 iframe 内动态创建的表格元素上添加事件

asp.net-mvc - 模型中名为 Title 的属性与 View 中名为 View.Title 的属性之间的绑定(bind)冲突(在 MVC 中)

matlab - 训练新的 LatentSVMDetector 模型

odata - OData select 语句中的别名

javascript - 如何在客户端绑定(bind)之前对 SAPUI5 OData 进行分组以进行控制?

javascript - 如何在html上向左滚动?

model - Joomla 3 模型上的filter_fields

odata - 将 Breeze 与 OData 结合使用