SapUI5: Передача параметра в oData

Очень часто возникает потребность передать какой-нибудь параметр в бэкенд (oData). Как это сделать?

Передача параметра в бэкенд(oData) при помощи фильтра.

Сделать это можно путем обычного фильтра (примеры можно посмотреть тут) (похожую конструкцию мы уже рассматривали тут):

//сделаем два условия в фильтре: year = sKey и Pernr = oGlobalData.Pernr
var aFlt = [new sap.ui.model.Filter({
		path: "year",
		operator: sap.ui.model.FilterOperator.EQ,
		value1: sKey
	}),
	new sap.ui.model.Filter({
		path: "Pernr",
		operator: sap.ui.model.FilterOperator.EQ,
		value1: oGlobalData.Pernr
	})
];
 
//Прочитаем AppSet и передадим фильтр
oDataMdl.read("/AppSet", {
	filters: aFlt,
 
	success: function(oEvt) {
		//обрабатываем положительный ответ
	},
 
	error: function(oEvt) {
		//обрабатываем ошибку
	}
});

А затем, уже на стороне бэкенда, обработать либо таблицу IT_FILTER_SELECT_OPTIONS:
IT_FILTER_SELECT_OPTIONS

либо строчную переменную IT_FILTER_STRING:
IT_FILTER_STRING

Но если у вас в oData нету полей «year» и «Pernr»:
odata properties entity types
то вы получите ошибку!

Есть второй способ передать параметр, даже если у вас нет соответствующих полей в oData!

Передача параметра в бэкенд(oData) при помощи url параметра.

Передадим параметр «isruk»(добавим url параметр isruk со значением true):

oModel.read("/PeopleSet/$count", {
	urlParameters: {
		"isruk": "true"
	},
	groupId: "peopleset",
	success: function(oData, response) {
		//запрос выполнен успешно
	},
	error: function() {
		//ошибка
	}
});

Обрабатываем его в бэкенде (прочитаем url параметр из общего url):

READ TABLE me->mr_request_details->technical_request-request_header ASSIGNING FIELD-SYMBOL(< fs_header >) WITH KEY name = '~request_uri'.
    IF sy-subrc EQ 0.
      SPLIT < fs_header >-value AT '&isruk=' INTO lv_v1 lv_v2.
      IF strlen( lv_v2 ) >= 4.
        lv_isruk = lv_v2(4).
      ENDIF.
    ENDIF.

Сплитуем URL на на две строки:

  • lv_v1 — URL без параметра
  • lv_v2 — значение нашего параметра isruk

В результате в переменной lv_isruk будет значение, которое мы передали с фронтенда!
user url param