二维码

[help] F4搜索帮助返回多列值的实现方法

Twilight发表于 2015-02-28 11:35Twilight 最后回复于 2015-02-28 11:35 [复制链接] 4712 0

项目中经常会遇到这种需求,下面我们以MATNR的F4帮助,返回matnr和maktx为例进行说明:

1、程序代码
  1. TYPES: shlp_descr_t TYPE shlp_descr .
  2. DATA: BEGIN OF itab OCCURS 0 ,
  3.         matnr LIKE mara-matnr ,
  4.         maktx LIKE makt-maktx ,
  5.       END OF itab.
  6. DATA: return_tab TYPE ddshretval OCCURS 0 .
  7. PARAMETERS: p_matnr LIKE itab-matnr ,
  8.             p_maktx LIKE itab-maktx .

  9. INITIALIZATION.
  10.   SELECT matnr maktx INTO TABLE itab FROM makt UP TO 20 ROWS
  11.     WHERE spras = '1'.

  12. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_matnr .
  13.   PERFORM f4.

  14. *&---------------------------------------------------------------------*
  15. *&      Form  f4
  16. *&---------------------------------------------------------------------*
  17. FORM f4.
  18.   CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
  19.     EXPORTING
  20.       retfield         = 'MATNR'   "Name of return field in FIELD_TAB,注意大写
  21.       dynpprog         = sy-repid  "返回的输入框所在的main program
  22.       dynpnr           = sy-dynnr  "返回的输入框所在屏幕
  23.       dynprofield      = 'P_MATNR' "返回的输入框名
  24.       window_title     = '商品标示'
  25.       value_org        = 'S'       "Value return: C: cell by cell, S: structured
  26.       callback_program = sy-repid  "回调程序名称
  27.       callback_form    = 'CB_FORM' "回调子过程
  28.     TABLES
  29.       value_tab        = itab      "储搜索帮助内容的内表
  30.       return_tab       = return_tab"Return the selected value
  31.     EXCEPTIONS
  32.       parameter_error  = 1
  33.       no_values_found  = 2
  34.       OTHERS           = 3.
  35. ENDFORM.                    "f4

  36. *&---------------------------------------------------------------------*
  37. *&      Form  cb_form
  38. *&---------------------------------------------------------------------*
  39. FORM cb_form TABLES record_tab STRUCTURE seahlpres
  40.               CHANGING shlp TYPE shlp_descr_t
  41.                        callcontrol LIKE ddshf4ctrl.
  42.   DATA: interface LIKE LINE OF shlp-interface.
  43.   READ TABLE shlp-interface INTO interface INDEX 1.
  44.   interface-shlpfield+4(1) = '2'.  "这里的数字代表F4搜索帮助弹出的ALV对话框,字段的位置,比如此行是显示F4弹出的alv第二列的内容
  45.   interface-valfield = 'P_MAKTX'.
  46.   APPEND interface TO shlp-interface.
  47. ENDFORM.                    "bo_callback_form
复制代码


2、执行测试
F4 2.jpg
F4 3.jpg

实现原理debug分析
F4 1.jpg
第一行值:F4IF_INT_TABLE_VALUE_REQUEST直接赋值P_MATNR产生的
第二行值:回调perform cb_form子过程产生的
注意:itab内表结构定义时不能直接TYPE C,需要参考数据字典
同样效果也可以通过一下方式实现:DYNP_VALUES_UPDATE 实时更新Selection Screen
回复

使用道具 举报

快速回帖

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

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