ECLIPSE
登录
创建class类
CLASS ZCL_GET_MATERIAL_DEMO_09 DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
"指定的Marker接口
interfaces if_amdp_marker_hdb. "HANA数据库,那么就是实现接口IF_AMDP_MARKER_HDB
types: begin of ty_mara,
matnr type mara-matnr,
mtart TYPE mara-mtart,
maktx TYPE makt-maktx,
end of ty_mara.
types: tt_mara type table of ty_mara.
methods get_mara
importing
value(iv_where) type string
exporting
value(et_mara) type tt_mara
.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS ZCL_GET_MATERIAL_DEMO_09 IMPLEMENTATION.
method get_mara by database procedure "//AMDP method marker//
for hdb "//Database platform//
language sqlscript "//Database language//
options read-only "//Database-specific options//
using mara makt. /*List of used DDIC entities and AMDPs*/
vt_mara = SELECT mara.matnr,
mara.mtart,
makt.maktx
from mara
left join makt on mara.matnr = makt.matnr
WHERE mara.mandt = session_context('CLIENT' )
;
*内置函数SESSION_CONTEXT本机访问会话变量
et_mara = apply_filter (:vt_mara,:iv_where);
*apply_filter 过滤器,根据iv_where过滤视图vt_mara
ENDMETHOD.
ENDCLASS.
session变量
如果SAP HANA数据库充当AS ABAP的数据库,那么我们可以访问以下三个全局会话变量:
1、CLIENT
2、APPLICATIONUSER
3、LOCALE_SAP
ABAP运行时环境使用与上述系统字段的内容相对应的值填充这些数据库变量。我们可以使用内置函数SESSION_CONTEXT本机访问会话变量,即EXEC SQL,ADBC和AMDP 。AMDP示例:
METHOD get_session_variables_amdp
BY DATABASE PROCEDURE FOR HDB
LANGUAGE SQLSCRIPT.
clnt := session_context(‘CLIENT’);
unam := session_context(‘APPLICATIONUSER’);
>lang := session_context(‘LOCALE_SAP’);
>ENDMETHOD.
然后运行
运行后SAP中就会生成类
类中的方法
编写ABAP代码
*&---------------------------------------------------------------------*
*& REPORT ZCDS_DEMO1
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZAMDP_DEMO1_09.
TABLES: MARA.
PARAMETERS: P_MTART TYPE MARA-MTART.
SELECT-OPTIONS: S_MATNR FOR MARA-MATNR.
INITIALIZATION.
START-OF-SELECTION.
PERFORM FRM_GET_DATA.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& FORM FRM_GET_DATA
*&---------------------------------------------------------------------*
*& TEXT
*&---------------------------------------------------------------------*
*& --> P1 TEXT
*& <-- P2 TEXT
*&---------------------------------------------------------------------*
FORM FRM_GET_DATA .
* 构造内表
RANGES: R_MTART FOR MARA-MTART.
R_MTART-SIGN = 'I'.
R_MTART-OPTION = 'EQ'.
R_MTART-LOW = P_MTART.
APPEND R_MTART.
* 获取数据
DATA: LT_DATA TYPE ZCL_GET_MATERIAL_DEMO_09=>TT_MARA,
LW_DATA TYPE ZCL_GET_MATERIAL_DEMO_09=>TY_MARA.
DATA: LV_AMDP002 TYPE REF TO ZCL_GET_MATERIAL_DEMO_09,
LV_WHERE TYPE STRING.
DATA: LT_NAMED_SELTABS TYPE CL_SHDB_SELTAB=>TT_NAMED_SELTABLES,
LS_NAMED_SELTABS TYPE CL_SHDB_SELTAB=>TS_NAMED_SELTABLE.
TRY.
IF P_MTART IS NOT INITIAL.
CLEAR: LT_NAMED_SELTABS,LS_NAMED_SELTABS.
LS_NAMED_SELTABS-NAME = 'MTART'.
LS_NAMED_SELTABS-DREF = REF #( R_MTART[] ).
APPEND LS_NAMED_SELTABS TO LT_NAMED_SELTABS.
ENDIF.
CLEAR LS_NAMED_SELTABS.
LS_NAMED_SELTABS-NAME = 'MATNR'.
LS_NAMED_SELTABS-DREF = REF #( S_MATNR[] ).
APPEND LS_NAMED_SELTABS TO LT_NAMED_SELTABS.
LV_WHERE = CL_SHDB_SELTAB=>COMBINE_SELTABS( LT_NAMED_SELTABS ). "RETURNS A SQL WHERE CONDITION FOR MULTIPLE SELTABS
LV_AMDP002 = NEW ZCL_GET_MATERIAL_DEMO_09( ).
LV_AMDP002->GET_MARA(
EXPORTING
IV_WHERE = LV_WHERE
IMPORTING
ET_MARA = LT_DATA
).
CATCH CX_AMDP_ERROR.
ENDTRY.
* CLEAR: LW_DATA.
* LOOP AT LT_DATA INTO LW_DATA.
* WRITE: LW_DATA-MATNR,LW_DATA-MAKTX.
* ENDLOOP.
* 显示数据
CALL METHOD CL_DEMO_OUTPUT=>DISPLAY( LT_DATA ).
ENDFORM.
CL_SHDB_SELTAB=>COMBINE_SELTABS把ranges变成sql语句的where条件
过滤器