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

Mar*_*rio 2 javascript model odata hana sapui5

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

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

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

var oModel = this.getView().getModel("data");
var description = oModel.getProperty("/description");
Run Code Online (Sandbox Code Playgroud)

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

csc*_*uff 5

所述的getProperty方法存在上ODataModel(V2)为对任何其它模型.因此用法有很大不同:

ODataModel如何存储数据

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

{
  "EntitySet('Key-1')": {},
  "EntitySet('Key-2')": {},
  "EntitySet('Key-3')": {},
  "ExpandedEntitySet(EntityID='Key-3',ExpandedEntityIS='5')": {}
}
Run Code Online (Sandbox Code Playgroud)

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

ODataModels getProperty

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

oDataModel.getProperty("/EntitySet('Key-1')");
Run Code Online (Sandbox Code Playgroud)

尽管集合的绑定路径正在/EntitySet请求

oDataModel.getProperty("/EntitySet");
Run Code Online (Sandbox Code Playgroud)

什么都不会回报 发生这种情况是因为oData ["EntitySet"]的内部存储数据结构中没有实体,并且该getProperty方法仍然是此内部结构中的查找.

包括扩展实体

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

oDataModel.getProperty("/EntitySet('Key-3')");
Run Code Online (Sandbox Code Playgroud)

还将使用它返回"ExpandedEntitySet(EntityID ='Key-3',ExpandedEntityIS ='5')".

ODataModels getObject

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