Служба доступа к данным SAP Gateway с длинной строкой
Я разрабатываю приложение SAPUI5, использующее службы oData, с помощью SAP Gateway. Я реализовал функцию поиска, которая производит SQL, где условие. Одна часть условия выглядит следующим образом: ... OR DESCRIPTION LIKE '%searchString%'...
, В моей таблице базы данных у меня есть поле DESCRIPTION
который имеет тип LCHR
длина 32000
, Единственная проблема в том, что поле DESCRIPTION
не может быть в WHERE
пункт.
Каков будет правильный подход для поиска длинных строк в таблице базы данных с помощью сервисов oData? Нужно ли жестко закодировать функцию поиска или есть какой-то более понятный способ?
1 ответ
Ответ CDS Table Function. Основная идея состоит в том, чтобы подтолкнуть поиск к HANA, который реализован AMDP. Я провел локальное тестирование, чтобы ответить на этот конкретный код.
Я создал таблицу zza_test
@EndUserText.label : 'TEST'
@AbapCatalog.enhancementCategory : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
@AbapCatalog.dataMaintenance : #LIMITED
define table zza_test {
key mandt : mandt not null;
key bukrs : bukrs not null;
cnt : abap.int4;
des : abap.lchr(2000);
}
Определена табличная функция CDS zza_test_tf
с параметром search_str
,
@EndUserText.label: 'TEST TF'
define table function zza_test_tf
with parameters
@Environment.systemField: #CLIENT
clnt :abap.clnt,
search_str : char255
returns
{
mandt : mandt;
bukrs : bukrs;
cnt : abap.int4;
des : abap.lchr(2000);
}
implemented by method zcl_zza_test_tf=>search_des;
Создан класс zcl_zza_test_tf
с интерфейсом if_amdp_marker_hdb
и реализовать метод search_des
class zcl_zza_test_tf definition
public
final
create public .
public section.
interfaces if_amdp_marker_hdb.
class-methods search_des
for table function zza_test_tf.
endclass.
class zcl_zza_test_tf implementation.
method search_des by database function for hdb
language sqlscript
options read-only
using zza_test.
return select mandt,bukrs, cnt, des
from zza_test where des like concat( concat( '%',
:search_str), '%');
endmethod.
endclass.
Теперь у нас есть функция таблицы CDS с параметрами. Запустите представление CDS и введите параметр поиска, чтобы получить результат. Вы даже можете определить свой HANA SQL в своей реализации AMDP с помощью нечеткого поиска.
Чтобы выполнить требование, вы реализуете выбор Open SQL в этом представлении CDS на своем уровне GateWay.
data:
lt_test type standard table of ZZA_TEST_TF.
select * from ZZA_TEST_TF( search_str = 'DUM' ) into table @lt_test.
Все должно работать. Надеюсь, поможет. Спасибо!