Служба доступа к данным 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.

Все должно работать. Надеюсь, поможет. Спасибо!

Другие вопросы по тегам