赞
踩
Core data services指,HANA CDS和ABAP CDS。
HANA CDS只支持HANA数据库,ABAP CDS理论上支持多种数据库,所以,ABAP CDS阉割了一些功能。导致某些场景,无法直接使用ABAP CDS解决。需要使用一种变通的方法,即通过ABAP Managed Database Procedures (AMDP)创建ABAP CDS Table Function。
下面的例子就是一个简单的TABLE functions 例子
1: 打开eclipse ,创建一个新的Core Data Services -> Data Definition
选择define table function with parameters
2: 编辑生成的实体:字段 类 方法
@EndUserText.label: 'TABLE FUNCTION'
define table function YDEMO_TABLE_FUNCTION
with parameters p_carrid : abap.char(5)
returns {
client : abap.clnt;
carrid : abap.string;
connid_arr : abap.string;
}
implemented by method ZCL_SPFLI_DEMO_CDS=>GET_connid;
3: 创建类:ZCL_SPFLI_DEMO_CDS
增加:IF_AMDP_MARKER_HDB接口,ABAP类转换为AMDP类,并且允许在类的方法内写存储过程
4:类实施代码
红色为新增代码,其他为自动生成
CLASS zcl_spfli_demo_cds DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES if_amdp_marker_hdb .
CLASS-METHODS:
get_connid FOR TABLE FUNCTION YDEMO_TABLE_FUNCTION.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_spfli_demo_cds IMPLEMENTATION.
METHOD get_connid
BY DATABASE FUNCTION
FOR HDB
LANGUAGE SQLSCRIPT
OPTIONS READ-ONLY
USING SPFLI.
it_connid =
SELECT DISTINCT
SPFLI.mandt as client,
SPFLI.carrid as carrid,
SPFLI.connid as connid
FROM SPFLI
WHERE CARRID = p_carrid;
RETURN
SELECT client,
carrid,
STRING_AGG(connid, ', ' ORDER BY connid) as connid_arr
FROM :it_connid
GROUP BY client,
carrid;
endmethod.
ENDCLASS.
5:测试结果 STRING_AGG 串起connid字段
参考:Concatenate multiple records in a single field using ABAP CDS Table Function
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。