头图

源代码:

*<SCRIPT:PERSISTENT>
REPORT  rstpda_script_template.

*<SCRIPT:HEADER>
*<SCRIPTNAME>CRM_SCRIPT_BOL_SHOW_ENTITY</SCRIPTNAME>
*<SCRIPT_CLASS>LCL_DEBUGGER_SCRIPT</SCRIPT_CLASS>
*<SCRIPT_COMMENT>Display the content of a BOL entity</SCRIPT_COMMENT>
*<SINGLE_STEP>X</SINGLE_STEP>

*</SCRIPT:HEADER>

*<SCRIPT:PRESETTINGS>

*</SCRIPT:PRESETTINGS>

*<SCRIPT:SCRIPT_CLASS>
*---------------------------------------------------------------------*
*       CLASS lcl_debugger_script DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_debugger_script DEFINITION INHERITING FROM  cl_tpda_script_class_super  .

  PUBLIC SECTION.
    METHODS: prologue  REDEFINITION,
             init    REDEFINITION,
             script  REDEFINITION,
             end     REDEFINITION.
    INTERFACES: if_tpda_script_w_input,
     if_tpda_script_w_output.

  PRIVATE SECTION.
    DATA: entity_name TYPE string.
    DATA: value TYPE string.
    DATA: output TYPE tpda_transfer_it_unsorted.
    DATA: bol_object_name TYPE crmt_ext_obj_name.
    METHODS get_attribute
      IMPORTING io_oref_descr TYPE REF TO cl_tpda_script_orefdescr
                iv_attribute_name TYPE string
      RETURNING value(ro_descr) TYPE REF TO cl_tpda_script_data_descr.

ENDCLASS.                    "lcl_debugger_script DEFINITION
*---------------------------------------------------------------------*
*       CLASS lcl_debugger_script IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_debugger_script IMPLEMENTATION.

  METHOD prologue.
*** generate abap_source (source handler for ABAP)
    super->prologue( ).
  ENDMETHOD.                    "prolog

  METHOD if_tpda_script_w_input~get_parameters.

    DATA lt_input      TYPE tpda_transfer_it.
    DATA ls_input      TYPE tpda_transfer_struc.

    ls_input-id   = 'ENTITY'.
    APPEND ls_input TO lt_input.
    p_parameters_it = lt_input.

  ENDMETHOD.                    "if_tpda_script_w_input~get_parameters

  METHOD if_tpda_script_w_input~set_parameter_values.

*   Tabelle mit Inputparameter und Wert
    DATA lt_input     TYPE tpda_transfer_it.
    DATA ls_input     TYPE tpda_transfer_struc.

    lt_input = p_parameter_values_it.
    LOOP AT lt_input INTO ls_input.
      IF ls_input-id = 'ENTITY'.
        entity_name = ls_input-value.
      ENDIF.
    ENDLOOP.

  ENDMETHOD.                    "if_tpda_script_w_input~set_parameter_values

  METHOD init.
*** insert your initialization code here
  ENDMETHOD.                    "init

  METHOD script.

    DATA lr_data_descr      TYPE REF TO cl_tpda_script_data_descr.
    DATA lr_struct_descr    TYPE REF TO cl_tpda_script_structdescr.
    DATA lr_cx              TYPE REF TO cx_root.
    DATA ls_quick           TYPE tpda_scr_quick_info.
    DATA lv_name            TYPE string.
    DATA lt_struct          TYPE tpda_scr_struct_comp_it.
    DATA ls_struct          TYPE tpda_scr_struct_comp.
    DATA ls_output          TYPE tpda_transfer_struc.
    DATA lr_symbsimple      TYPE REF TO tpda_sys_symbsimple.
    DATA ls_varinfo         TYPE tpda_quick_vars.

    FIELD-SYMBOLS: <lv_value> TYPE any.


        CLEAR output.

*        BREAK-POINT.
         me->break( ).

  ENDMETHOD.                    "script

  METHOD end.
*** insert your code which shall be executed at the end of the scripting (before trace is saved)
*** here

  ENDMETHOD.                    "end

  METHOD if_tpda_script_w_output~get_parameter_values.

    DATA lt_param TYPE tpda_transfer_it_unsorted.
    DATA ls_param TYPE tpda_transfer_struc.

    ls_param-id = 'VARIABLE'.
    ls_param-value = entity_name.
    APPEND ls_param TO lt_param.
    ls_param-id = 'OBJECT_NAME'.
    ls_param-value = bol_object_name.
    APPEND ls_param TO lt_param.

    APPEND INITIAL LINE TO lt_param.

    APPEND LINES OF output TO lt_param.

    p_parameter_values_it = lt_param.

  ENDMETHOD.                    "if_tpda_script_w_output~get_parameter_values

  METHOD get_attribute.

    DATA lr_oref_descr     TYPE REF TO cl_tpda_script_orefdescr.
    DATA lr_object_descr   TYPE REF TO cl_tpda_script_objectdescr.
    DATA ls_varinfo        TYPE tpda_quick_vars.
    DATA lv_longname       TYPE string.

    DATA lt_attributes TYPE tpda_script_object_attribut_it.

    lr_oref_descr   = io_oref_descr.
    lr_object_descr = lr_oref_descr->get_object_handle( ).

    lt_attributes = lr_object_descr->attributes( ).

    ro_descr = lr_object_descr->get_attribut_handle( lv_longname  ).

  ENDMETHOD.                    "get_oref_attribute

ENDCLASS.                    "lcl_debugger_script IMPLEMENTATION
*</SCRIPT:SCRIPT_CLASS>

*</SCRIPT:PERSISTENT>

这段 ABAP 代码是一个脚本,设计用于展示 SAP Business Object Layer (BOL) 实体的内容。通过深入分析,我们可以揭示其编程逻辑、技巧和目的。整个代码以 *<SCRIPT:PERSISTENT> 开头和结尾,表示这是一个持久化脚本,用于在 SAP 的 TPDA(Test Procedure Development Assistant)工具中定义自动化测试或演示脚本。

脚本元数据

脚本通过 *<SCRIPT:HEADER> 部分提供了元数据,包括脚本名称 (CRM_SCRIPT_BOL_SHOW_ENTITY)、脚本类 (LCL_DEBUGGER_SCRIPT) 和脚本描述。此外,<SINGLE_STEP> 标志设置为 X,暗示该脚本可能在单步执行模式下运行,便于调试。

类定义与实现

CLASS lcl_debugger_script DEFINITION 中,我们看到类 lcl_debugger_script 继承自 cl_tpda_script_class_super。这表明脚本利用了 SAP TPDA 的框架来实现其功能。类公共部分声明了四个方法:prologueinitscriptend,这些方法重定义了父类的同名方法,用于脚本的不同阶段。此外,还实现了两个接口 if_tpda_script_w_inputif_tpda_script_w_output,分别用于处理输入和输出参数。

在私有部分,定义了几个重要的数据属性,如 entity_namebol_object_name,用于存储 BOL 实体的名称和其他相关信息。

方法分析

  • prologue 方法通过调用父类的 prologue 方法,为脚本执行做初步准备。
  • if_tpda_script_w_input~get_parameters 方法中,定义了输入参数 ENTITY,这意味着脚本在执行时需要接收一个 BOL 实体名称作为输入。
  • if_tpda_script_w_input~set_parameter_values 方法则负责读取传入的参数值,并将其存储到类的内部属性中。
  • init 方法提供了一个空白模板,可以根据需要插入初始化代码。
  • script 方法是脚本的核心,虽然在这段示例代码中并未展示具体的业务逻辑,但它通常用于处理主要的脚本逻辑,如读取 BOL 实体的属性、执行业务操作等。
  • end 方法同 init,为最后执行的代码提供位置,可以用于清理工作或最终的输出。
  • if_tpda_script_w_output~get_parameter_values 方法用于生成脚本的输出参数,这里将 ENTITYOBJECT_NAME 作为示例输出。

特殊处理

代码中的 METHOD 声明和注释使用了特殊符号 **** 来标记,这在 SAP ABAP 编程中是常见的注释方法,用于增强代码的可读性和维护性。

总结而言,这段代码展示了一个 SAP TPDA 脚本的结构和基本元素,通过定义一个类来实现脚本逻辑,并与 TPDA 框架交互,从而达到展示 SAP BOL 实体内容的目的。通过分析这段代码,可以获得对 SAP ABAP 编程和 TPDA 脚本开发的深入理解。


注销
1k 声望1.6k 粉丝

invalid