ABAP 选择屏幕设置自定义搜索帮助CALL FUNCTION ‘F4IF_INT_TABLE_VALUE_REQUEST‘

简单的例子:

REPORT ZDCH_09_TEST2.

TYPES : BEGIN  OF TYP_NAME ,
          NAME TYPE CHAR20,
        END  OF TYP_NAME .

PARAMETERS P_NAME  TYPE CHAR20 .

AT SELECTION-SCREEN ON VALUE-REQUEST  FOR P_NAME .
  PERFORM F_VALUE_REQUEST_FOR_NAME .

*&---------------------------------------------------------------------*
*&      Form  F_VALUE_REQUEST_FOR_NAME
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM F_VALUE_REQUEST_FOR_NAME  .

  DATA :
    L_W_NAME   TYPE TYP_NAME,
    L_TAB_NAME TYPE  STANDARD  TABLE  OF TYP_NAME.

  L_W_NAME-NAME  =  'MIKE' .
  APPEND L_W_NAME  TO L_TAB_NAME .

  L_W_NAME-NAME  =  'BILY' .
  APPEND L_W_NAME  TO L_TAB_NAME .

  L_W_NAME-NAME  =  'FRANK' .
  APPEND L_W_NAME  TO L_TAB_NAME .

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      RETFIELD        = 'NAME'     "大写,可选值内表的字段名
      VALUE_ORG       = 'S'        "C CELL逐行,S STRUCTURE结构化,在DILOG中必选S,否则提示找不到
      DYNPPROG        = SY-REPID     "返回的输入框所在的main program
      DYNPNR          = SY-DYNNR        "返回的输入框所在屏幕
      DYNPROFIELD     = 'P_NAME'         "返回的输入框名
*     CALLBACK_PROGRAM = 'PROCESS_DATA' "可以传递多列值
*     MULTIPLE_CHOICE  = 'X' "多项选择(在屏幕字段不能输入多个值时此选项会不能返回值)
*     DISPLAY          = ' ' "C 只能显示不能选择
    TABLES
      VALUE_TAB       = L_TAB_NAME               "可选值的内表
    EXCEPTIONS
      PARAMETER_ERROR = 1
      NO_VALUES_FOUND = 2
      OTHERS          = 3.

  IF SY-SUBRC <>  0 .
    MESSAGE  ID SY-MSGID  TYPE SY-MSGTY  NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4 .
  ENDIF .
ENDFORM .                     "F_VALUE_REQUEST_FOR_NAME

实例:三个步骤

选择屏幕

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
  SELECT-OPTIONS:
    S_BTEXT  FOR GS_SELECT-BTEXT_L      "业务类型
    .
SELECTION-SCREEN END OF BLOCK B1.

为其加上搜索帮助

INITIALIZATION.
  PERFORM FRM_INIT_DATA.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_BTEXT-LOW.
  PERFORM FORM_VALUE_REQUEST_FOR_BTEXT .

子例程FORM

FORM FORM_VALUE_REQUEST_FOR_BTEXT .
  "从T156T表获取数据
  SELECT
    BTEXT_L
    FROM T156T
    INTO TABLE @DATA(LT_T156T)
    WHERE
      SPRAS = '1'.

  DELETE ADJACENT DUPLICATES FROM LT_T156T COMPARING ALL FIELDS.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      RETFIELD        = 'BTEXT_L'      "大写,可选值表的字段名
      VALUE_ORG       = 'S'            "C CELL逐行,S STRUCTURE结构化,在DILOG中必选S,否则提示找不到
      DYNPPROG        = SY-REPID       " 返回的输入框所在的main program
      DYNPNR          = SY-DYNNR       " 返回的输入框所在屏幕
      DYNPROFIELD     = 'S_BTEXT'      "屏幕字段
*     CALLBACK_PROGRAM = 'PROCESS_DATA' "可以传递多列值
*     MULTIPLE_CHOICE = 'X' "多项选择(在屏幕字段不能输入多个值时此选项会不能返回值)
*     DISPLAY         = ' ' "C 只能显示不能选择
    TABLES
      VALUE_TAB       = LT_T156T       "可选值的表
    EXCEPTIONS
      PARAMETER_ERROR = 1
      NO_VALUES_FOUND = 2
      OTHERS          = 3.

  IF SY-SUBRC <>  0 .
    MESSAGE  ID SY-MSGID  TYPE SY-MSGTY  NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4 .
  ENDIF .

ENDFORM.
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值