2016-11-03 4 views
0

Уважаемый SAPUI5 разработчиков,Сортировка OData модель SAPUI5

Я разработал SAPUI5 Fiori Worklist проект с использованием WebIDE проектов шаблона.

В файле Component.js была выбрана модель OData.

var sServiceUrl = this.getMetadata().getManifestEntry("sap.app").dataSources.mainService.uri; 
     var oModel = new sap.ui.model.odata.ODataModel(sServiceUrl, { 
      json: true, 
      loadMetadataAsync: true 
     }); 
     oModel.attachMetadataFailed(function() { 
      // Call some functions from APP controller to show suitable message 
     }, this); 
     this.setModel(oModel, "BrandSet"); 

Эта часть кода вызывает вызов сервера OData для извлечения данных с удаленного сервера. Теперь я хочу заказать данные в бэкэнд, а затем получить данные. Предположим, что функция сортировки была правильно реализована в бэкэнд. Таким образом, если я использую $orderby=name или $orderby=price, его необходимо сортировать по названию или по цене соответственно.

В некоторых тотариалах они заявили, что заказывают опцию sorter внутри файла представления XML. Как здесь: https://sapui5.hana.ondemand.com/#docs/guide/c4b2a32bb72f483faa173e890e48d812.html

Теперь мои вопросы:

  1. Как применить эту сортировку внутри Component.js файла, где начинается модель?

  2. Второй вопрос заключается в том, как применить этот заказ, когда мы применяем фильтр к модели? Как пример, в следующей ссылке применяется фильтр: https://sapui5.hana.ondemand.com/#docs/guide/5295470d7eee46c1898ee46c1b9ad763.html

На самом деле я ищу для функции или любого рода метода, которые добавляют в $orderby=xxx к вызову службы OData.

Я нашел способ здесь: https://sapui5.hana.ondemand.com/docs/api/symbols/sap.ui.model.odata.ODataModel.html#constructor

Если я использую mParameters.serviceUrlParams то я могу добавить параметр URL для запроса на обслуживание, но это уже было сказано «эти параметры будут добавлены ко всем запросам». Означает ли это, если я добавлю $orderby с помощью этого метода, тогда я не могу избавиться от этого в последующих запросах на эту модель данных, например, для фильтрации?

ответ

1

Приложение, как правило, будет структурировано несколько иначе, чем вы предлагаете. Общее предположение состоит в том, что из бэкэнд имеется много данных и загрузка всех этих данных сразу может вызвать проблемы с производительностью, особенно при использовании в сети мобильных телефонов. Кроме того, данные представляют собой набор объектов OData, то есть список многих элементов одного и того же типа, поэтому данные будут представлены в пользовательском интерфейсе с помощью списка или таблицы.

Обычно приложение отображает данные в каком-то списке, например sap.m.List или sap.m.Table. Эти элементы управления предназначены для работы с большими объемами данных и первоначально загружают первые 20 элементов из набора объектов. Только когда пользователь прокручивает список данных, будут загружены дополнительные элементы. Кроме того, с помощью этих элементов управления пользователь может решить сортировать или фильтровать данные в соответствии с определенными полями в ваших данных.

Предполагая, что ваше приложение работает так, вот стандартный подход.

Основная модель (как определено в манифесте) не загружается в Component.js, а загружается через привязку, определенную в представлениях xml приложения.В представлениях вы можете определить фиксированную сортировку и/или фильтр в привязке, или вы можете позволить пользователю установить критерии сортировки и фильтрации. Это будет обрабатываться программно в соответствующих контроллерах. Обычно изменения, которые пользователь делает для сортировки и фильтрации, будут применяться отдельно. Например, он/она выбирает новый порядок сортировки, oData перечитывается и новый порядок сортировки, показанный в пользовательском интерфейсе. Тогда пользователь может выбрать критерии фильтра, и это также применяется. Конечно, в вашей логике программирования в контроллерах вам нужно было бы применить любые критерии сортировки и фильтрации по умолчанию, а затем, возможно, объединить или заменить их критериями, выбранными пользователем.

Чтобы увидеть пример этого, я бы предложил посмотреть приложение шаблона «SAP Fiori Master-Detail Application» в WebIDE.

+0

Спасибо. Идеальный ответ. Это сделало для меня многое. Но у меня есть этот вопрос еще ... Можно ли программным способом установить исходный порядок для модели OData? (Я имею в виду в JavaScript, а не в представлении XML). –

+0

Также обратите внимание, что я использовал шаблон рабочего списка WebIDE, и загрузка данных внутри Component.js была сделана с помощью WebIDE. –

+0

Да, прагматически можно задать начальный порядок сортировки. См. [Связывание агрегирования] (https://sapui5.hana.ondemand.com/#docs/guide/91f057786f4d1014b6dd926db0e91070.html) –