SAPUI5: как программно получить доступ к данным ODataModel?

Когда я создаю модель в коде, я обычно использую:

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. Как я могу получить структуру oModel, когда я использую назначение oData из платформы Hana или когда я использую mockup-сервер в своем проекте SAPUI5?


person Mario    schedule 03.08.2016    source источник
comment
Точно так же можно получить данные свойств с помощью ODataModel; в чем именно ваша проблема?   -  person Qualiture    schedule 04.08.2016


Ответы (1)


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");

ничего бы не вернул. Это происходит потому, что во внутренней структуре данных для oData["EntitySet"] ​​нет объекта, а метод getProperty по-прежнему не что иное, как поиск в этой внутренней структуре.

Включить развернутые объекты

Одна интересная вещь в методе ODataModels getProperty — это параметр bIncludeExpandEntries. Если вы установите для него значение true, доступный объект будет возвращен, включая все потенциально расширенные свойства навигации. В приведенном выше примере

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

также вернет "ExpandedEntitySet(EntityID='Key-3',ExpandedEntityIS='5')" вместе с ним.

ODataModels getObject

ODataModels getObject обладает гораздо большей гибкостью, поскольку позволяет локально использовать параметры OData $select и $expand. Получение EntitySet по-прежнему невозможно... ПРИМЕЧАНИЕ. Отсутствующие данные не загружаются, а возвращаемые данные могут быть неполными!

person cschuff    schedule 04.08.2016