ABAP学习(32):ABAP Source Scan

ABAP Source Scan

ABAP提供Report扫描程式,Program:RS_ABAP_SOURCE_SCAN

定义Class:lcl_source_scan;

主要方法:

get_source_names,获取各种类型代码源代码object name;

get_report_names,获取report类型源代码object name;

get_function_names,获取function类型源代码object name;

get_class_names,获取class类型源代码object name;

get_interface_names,获取interface类型源代码object name;

get_includes,获取include类型源代码object name;

示例:添加Web Dynpro Application程式扫描方法

Selection Screen中添加Web Component名输入框,wdaname保存输入的component name;

BEGIN OF BLOCK a14.
SELECT-OPTIONS    wdaname FOR wdy_wb_geninfo-component_name.
SELECTION-SCREEN: END OF BLOCK a14,

在Selection Screen中package选项添加是否检查wda check box,表示直接查询package时,是否扫描package中wda代码;

SELECT-OPTIONS    devclass FOR tadir-devclass.
PARAMETERS        p_cwda TYPE char1 AS CHECKBOX .
SELECTION-SCREEN: END OF BLOCK a11,

class中添加 get_wda_names方法,其中WDA程式在table:tadir中object类型为WDYN

  METHOD get_wda_names.
    DATA:lt_wdaid TYPE STANDARD TABLE OF WDY_COMPONENT_NAME.
    DATA:ls_wdaid TYPE WDY_COMPONENT_NAME.
    DATA:lt_wb_geninfo TYPE STANDARD TABLE OF WDY_WB_GENINFO.
    DATA:ls_wb_geninfo TYPE WDY_WB_GENINFO.
    DATA:lt_r_actname TYPE RANGE OF trdir-name.
    DATA:ls_r_actname LIKE LINE OF lt_r_actname.

    IF wdaname[] IS NOT INITIAL.
      "根据component,WDA对应的WDA程式id
      SELECT * FROM wdy_wb_geninfo APPENDING TABLE lt_wb_geninfo
        WHERE component_name IN wdaname
         AND controller_name = space.
    ENDIF.

    IF p_cwda = 'X'.
      "通过package,获取package中WDA程式
      SELECT obj_name INTO TABLE lt_wdaid
         FROM tadir
         WHERE pgmid  = 'R3TR'
         AND   object = 'WDYN'
         AND   devclass IN devclass.                       "#EC CI_GENBUFF
      IF lt_wdaid IS INITIAL.
        EXIT.
      ENDIF.
      "WDA对应的WDA程式id
      SELECT * FROM wdy_wb_geninfo APPENDING TABLE lt_wb_geninfo
        FOR ALL ENTRIES IN lt_wdaid
        WHERE component_name = lt_wdaid-table_line
         AND controller_name = space.
    ENDIF.
   "实际WDA对应的WDA程式id,/1BCWDY/开头
    LOOP AT lt_wb_geninfo INTO ls_wb_geninfo.
      CLEAR ls_r_actname.
      ls_r_actname+0(3) = 'ICP'.
      ls_r_actname-low = '/1BCWDY/' && ls_wb_geninfo-guid && '*'.
      APPEND ls_r_actname TO lt_r_actname.
    ENDLOOP.
    SORT lt_r_actname.
    DELETE ADJACENT DUPLICATES FROM lt_r_actname.

    SELECT name APPENDING TABLE gt_object
       FROM trdir
       WHERE name IN lt_r_actname.

  ENDMETHOD.  "get_wda_names

修改get_source_names方法,添加get_wda_names逻辑

    IF devclass[] IS NOT INITIAL.
      get_report_names( ).
      get_function_names( ).
      get_class_names( ).
      get_interface_names( ).
    "查询package时,添加查询wda source code
      IF p_inwda = 'X'.
        get_wda_names( ).
      ENDIF.
    ENDIF.
  "新增wda source code查询
    IF wdaname[] IS NOT INITIAL.
      get_wda_names( ).
    ENDIF.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偶是不器

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值