答案是CDS 表函数。基本思想是将搜索下推到由AMDP实现的 HANA 。我做了一些本地测试,通过具体代码来回答这个问题。
我创建了一个表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);
}
定义了一个zza_test_tf
带参数的 CDS 表函数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 视图并输入搜索参数以获取结果。您甚至可以使用模糊搜索在您的 AMDP 实现中定义您的 HANA SQL 。
为了满足要求,您在网关层的此 CDS 视图上实现 Open SQL 选择。
data:
lt_test type standard table of ZZA_TEST_TF.
select * from ZZA_TEST_TF( search_str = 'DUM' ) into table @lt_test.
一切都应该工作。希望能帮助到你。谢谢!