二维码

[help] 使用exit函数,实现Search help的增强

Twilight发表于 2014-10-11 17:55Twilight 最后回复于 2014-10-11 17:55 [复制链接] 6837 0

1、se11创建一个Elementary srch hlp
Search help enhance 1.png
执行时,只能实现单值的搜索选择
Search help enhance 2.png
2、我们需要创建Search Help Exit函数,可以参考系统标准的F4IF_SHLP_EXIT_EXAMPLE搜索帮助接口函数
1)se37,创建自定义函数
Search help enhance 5.png
Search help enhance 6.png
Changing:
SHLP 搜索帮助描述
CALLCONTROL 具有搜索帮助出口的 F4 处理控制结构
Tables:
SHLP_TAB 替代基本搜索帮助的清单
RECORD_TAB 搜索帮助的结果结构
2)函数source code
  1. DATA:type_info LIKE dfies.

  2.    callcontrol-no_maxdisp = 'X'.

  3.    IF callcontrol-step EQ 'SELECT'.
  4.      callcontrol-step = 'DISP'.
  5.    ENDIF.

  6.    CHECK: callcontrol-step EQ 'DISP'.

  7.    CALL FUNCTION 'TABCONTROL_VISIBLE'
  8.      EXPORTING
  9.        visible = 'F'
  10.        tab_id  = 1.

  11.    SUBMIT YLEON_002 VIA SELECTION-SCREEN AND RETURN."YLEON_002下面代码的程序名
  12.    IMPORT record_tab TO record_tab  FROM MEMORY ID 'REC1'.

  13.    READ TABLE shlp-fielddescr INDEX 1 INTO type_info.
  14.    type_info-leng = 18.
  15.    CLEAR type_info-offset .
  16.    MODIFY shlp-fielddescr INDEX 1 FROM type_info
  17.                           TRANSPORTING leng offset.

  18.    callcontrol-step = 'RETURN'.
复制代码

将新建的函数保存激活,然后将函数名填到Search Help Exit
Search help enhance 3.png
3、创建程序,代码如下:
  1. TABLES: mara,makt.
  2. TYPE-POOLS: slis.
  3. DATA:   gs_fcat   TYPE  slis_fieldcat_ALV  ,
  4.          gt_fcat   TYPE STANDARD TABLE OF slis_fieldcat_alv   ,
  5.          gs_layout TYPE slis_layout_alv   .

  6. DATA: record_tab TYPE STANDARD TABLE OF seahlpres,
  7.        gs_record  TYPE seahlpres.

  8. DATA:BEGIN OF gs_output,
  9.         matnr TYPE matnr,
  10.         brand_id TYPE mara-brand_id,
  11.         saiso TYPE mara-saiso,
  12.         saisj TYPE mara-saisj,
  13.         saity TYPE mara-saity,
  14.         maktx TYPE makt-maktx,
  15.         chk TYPE c,
  16.        END OF gs_output,
  17.        gt_output LIKE STANDARD TABLE OF gs_output.

  18. SELECT-OPTIONS:matkl FOR mara-matkl matchcode object wwg1,
  19.                 brand  FOR mara-brand_id,
  20.                 saiso  FOR mara-saiso NO INTERVALS NO-EXTENSION,
  21.                 saisj  FOR mara-saisj NO INTERVALS NO-EXTENSION,
  22.                 saity  FOR mara-saity NO INTERVALS NO-EXTENSION.

  23. START-OF-SELECTION.

  24.    SELECT mara~matnr
  25.           mara~matkl
  26.           mara~brand_id
  27.           mara~saiso
  28.           mara~saisj
  29.           mara~saity
  30.           makt~maktx
  31.       FROM mara INNER JOIN makt ON mara~matnr = makt~matnr AND makt~spras EQ sy-langu
  32.      INTO CORRESPONDING FIELDS OF TABLE gt_output
  33.      WHERE mara~matkl        IN matkl            AND
  34.            mara~brand_id     IN brand            AND
  35.            mara~saiso        IN saiso            AND
  36.            mara~saisj        IN saisj            AND
  37.            mara~saity        IN saity .

  38.    PERFORM build_fcat USING :   'MATNR'   'Article'   'X' ,
  39.                                 'BRAND_ID'   'Brand Id' '' ,
  40.                                 'SAISO'   'Season Category' ''       ,
  41.                                 'SAISJ'   'Season Year'    ''    ,
  42.                                 'SAITY'   'Rollout'      ''  ,
  43.                                 'MAKTX'   'Description'  ''    .

  44.    gs_layout-box_fieldname = 'CHK'.
  45.    gs_layout-colwidth_optimize = 'X'.

  46.   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  47.      EXPORTING
  48.        i_callback_program       = sy-repid
  49.        i_callback_pf_status_set = 'PF_STATUS_ALV'
  50.        i_callback_user_command  = 'USER_COMMAND_ALV'
  51.        is_layout                = gs_layout
  52.        it_fieldcat              = gt_fcat
  53.      TABLES
  54.        t_outtab                 = gt_output
  55.      EXCEPTIONS
  56.        program_error            = 1
  57.        OTHERS                   = 2.
  58.    IF sy-subrc <> 0.
  59.      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  60.              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  61.    ENDIF.
  62. *&---------------------------------------------------------------------*
  63. *&      Form  build_fcat
  64. *&-------------------------------------------------------------------
  65. FORM build_fcat  USING    us_fieldname TYPE c
  66.                            us_seltext_m TYPE c
  67.                            us_key       TYPE c.
  68.    gs_fcat-fieldname = us_fieldname .
  69.    gs_fcat-seltext_l = us_seltext_m .
  70.    gs_fcat-key       = us_key       .
  71.    APPEND gs_fcat TO gt_fcat        .
  72.    CLEAR gs_fcat .
  73. ENDFORM.                    " build_fcat

  74. *&---------------------------------------------------------------------*
  75. *&      Form  pf_status_alv
  76. *&-------------------------------------------------------------------

  77. FORM pf_status_alv USING rt_extab  TYPE slis_t_extab.
  78.    SET PF-STATUS 'YSTANDARD' EXCLUDING rt_extab.
  79. ENDFORM.                    "pf_status_alv

  80. *&---------------------------------------------------------------------*
  81. *&      Form  user_command_alv
  82. *&-------------------------------------------------------------------
  83. FORM user_command_alv USING r_ucomm LIKE sy-ucomm
  84.          rs_selfield TYPE slis_selfield.
  85.    CASE r_ucomm.
  86.      WHEN 'EXC'.
  87.        LOOP AT gt_output INTO gs_output WHERE chk EQ 'X'.
  88.          WRITE gs_output-matnr TO gs_record-string(18).
  89.          APPEND gs_record TO record_tab.
  90.        ENDLOOP.
  91.        EXPORT record_tab TO MEMORY ID 'REC1'.
  92.        LEAVE PROGRAM.
  93.      WHEN '&IC1'.
  94.        READ TABLE gt_output INTO gs_output INDEX rs_selfield-tabindex.
  95.        IF sy-subrc EQ 0.
  96.          WRITE gs_output-matnr TO gs_record-string(18).
  97.          APPEND gs_record TO record_tab.
  98.          EXPORT record_tab TO MEMORY ID 'REC1'.
  99.          LEAVE PROGRAM.
  100.        ENDIF.
  101.      WHEN '&FB03'.
  102.        SET SCREEN 0 .
  103.        LEAVE SCREEN.
  104.    ENDCASE.
  105. ENDFORM.                    "user_command_alv
复制代码

4、返回到search help,执行,效果如下
Search help enhance 4.png
执行选择屏幕,出现alv,单击任一行,就会返回选中的值
Search help enhance 7.png
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表