ABAP AMDP编写

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条件

过滤器
在这里插入图片描述

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
ABAP(Advanced Business Application Programming)是SAP系统中使用的一种编程语言,用于开发和定制SAP应用程序。ABAP代码编写是指使用ABAP语言编写程序,以实现特定的功能或满足特定的业务需求。 在ABAP代码编写过程中,首先需要了解SAP系统的数据结构和业务流程。ABAP程序通常是在SAP系统中运行的,所以熟悉系统的数据模型、数据表和数据字典非常重要。此外,也需要了解相应的业务流程,以便于在代码中正确处理和操作相关数据。 编写ABAP代码的基本步骤包括:定义数据、声明变量、编写操作逻辑。在ABAP中,可以使用内置的数据类型和结构来定义所需的数据,也可以通过在数据字典中创建自定义数据对象。变量的声明包括数据类型和变量名,用于存储和操作数据。 操作逻辑是ABAP代码的核心部分,通过语句和表达式完成特定的功能。ABAP提供了丰富的语言结构和内置函数,可以进行数据的读取、写入、修改、删除、计算等操作。同时,也可以使用控制结构如条件语句、循环语句和函数模块来实现复杂的逻辑流程。 在编写ABAP代码时,需要注重代码的可读性和可维护性,使用合理的命名规范、注释和缩进方式。此外,还要注意异常处理和错误处理,以保证程序的稳定性和可靠性。 总而言之,ABAP代码编写是一项技术性任务,需要熟悉SAP系统的数据结构和业务流程,掌握ABAP语言的语法和特性。通过合理的逻辑设计和编程方式,可以有效地实现SAP应用程序的开发和定制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值