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_STRING:
Но если у вас в oData нету полей «year» и «Pernr»:
то вы получите ошибку!
Есть второй способ передать параметр, даже если у вас нет соответствующих полей в 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 будет значение, которое мы передали с фронтенда!
Привет, я передаю параметры при помощи search на oData v2 он не зарезервирован, но использовать в личных целях можно)