维护视图自定义搜索帮助

本文介绍了在维护视图中创建和使用搜索帮助的方法,包括数据元素自带搜索、SE11创建标准和集合搜索帮助,以及自定义搜索帮助函数F4IF_INT_TABLE_VALUE_REQUEST的应用。重点讲述了如何根据用户输入动态展示不同搜索结果的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做维护视图的时候经常需要做搜索帮助供用户选择,简单介绍一下几种方法

一、如果用户没有特别要求,则用数据元素自带出的搜索帮助也可以

二、SE11创建搜索帮助

1.创建搜索帮助

 

基本索引帮助:单个搜索帮助
集合搜索帮助:多个搜索帮助集合

 2.填写搜索帮助相关信息

 

选择方法:如果搜索帮助字段有参考表,则可在此处填写

对话类型:

  • 立即显示值:把参考表中所有信息显示出来
  • 根据集合的对话:如果参考表数据大于100条,则显示限制对话框,选择限制数据之后,显示数据;反之则立即显示数据
  • 具有限制的对话:显示限制对话框,选择限制数据之后,显示数据

搜索帮助出口:自定义搜索帮助增强,但是要参考F4IF_SHLP_EXIT_EXAMPLEH

Parameter(即复制函数,然后这里调用)

  • 搜索帮助参数:需要显示的搜索帮助的参数
  • IMP/EXP:输入输出参数
  • 列表:显示数据位置顺序
  • 选择:限制输入时的位置顺序
  • 选择:控制在限制输入时是否可输入
  • 已修改:控制数据元素是否可修改
  • 缺省值:默认值

3.维护视图屏幕调用

三、利用自定义搜索帮助函数F4IF_INT_TABLE_VALUE_REQUEST

1.在维护视图屏幕写搜索帮助模块 

 "自定义搜索帮助
 PROCESS ON VALUE-REQUEST.
 FIELD ZVSD0092-LANDX MODULE MDI_F4_LANDX_20.
 FIELD ZVSD0092-AD_CITY1 MODULE MDI_F4_CITY1_20.

 

2.激活保存,在调用处写上具体搜索帮助的代码即可

*&---------------------------------------------------------------------*
*&      Module  MDI_F4_LANDX_20  INPUT
*&---------------------------------------------------------------------*
*       国家搜索帮助
*----------------------------------------------------------------------*
MODULE MDI_F4_LANDX_20 INPUT.
  IF X_HEADER-MAINTVIEW = 'ZVSD0092'.
    DATA:LV_LANDX TYPE CHAR8.
    DATA:IT_DYNPFIELDS TYPE STANDARD TABLE OF DYNPREAD.
    DATA:LS_ZLANGE  TYPE ZVSD0092-ZLANGE.
    FIELD-SYMBOLS:<FNAME1> TYPE ZVSD0092.
    ASSIGN <TABLE1> TO <FNAME1>.

    TYPES: BEGIN OF TY_LANDX,
             LANDX_CN  TYPE ZTSD0094-LANDX_CN,    
             ZCITY1_CN TYPE ZTSD0094-ZCITY1_CN,  
             LANDX_EN  TYPE ZTSD0094-LANDX_EN,    
             ZCITY1_EN TYPE ZTSD0094-ZCITY1_EN,  
           END OF TY_LANDX.

    RANGES: LR_VKORG FOR ZTSD0092-LANDX.

    DATA: LS_LANDX TYPE TY_LANDX,
          LT_LANDX TYPE TABLE OF TY_LANDX.      "搜索帮助内表

    DATA: LT_DYNPFIELDS TYPE TABLE OF DYNPREAD WITH HEADER LINE.

    LT_DYNPFIELDS-FIELDNAME = 'ZVSD0092-LANDX'. "填入需要读值的字段名
    APPEND LT_DYNPFIELDS.
    CLEAR: LT_DYNPFIELDS.

    CALL FUNCTION 'DYNP_VALUES_READ'
      EXPORTING
        DYNAME             = SY-REPID
        DYNUMB             = SY-DYNNR
        TRANSLATE_TO_UPPER = 'X'
      TABLES
        DYNPFIELDS         = LT_DYNPFIELDS
      EXCEPTIONS
        OTHERS             = 9.
    IF SY-SUBRC = 0.
      READ TABLE LT_DYNPFIELDS WITH KEY FIELDNAME = 'ZVSD0092-LANDX'.
      ZVSD0092-LANDX = LT_DYNPFIELDS-FIELDVALUE. "取值
    ENDIF.
    CLEAR:ZVSD0092-LANDX.
    IF ZVSD0092-ZLANGE = '1'.
      SELECT LANDX_CN
             ZCITY1_CN
             FROM ZTSD0094
             INTO CORRESPONDING FIELDS OF TABLE LT_LANDX.

        CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
          EXPORTING
            RETFIELD        = 'LANDX_CN'             "指定要返回屏幕参数的在内表中的field
            VALUE_ORG       = 'S'                    "S代表structure,C代表单元格
            DYNPPROG        = SY-REPID               "指定屏幕参数所在的程序名称
            DYNPNR          = SY-DYNNR               "指定参数所在的屏幕编号
            DYNPROFIELD     = 'ZVSD0092-LANDX'       "指定屏幕参数的名称
          TABLES
            VALUE_TAB       = LT_LANDX               "搜索帮助内容内表
          EXCEPTIONS
            PARAMETER_ERROR = 1
            NO_VALUES_FOUND = 2
            OTHERS          = 3.
        IF SY-SUBRC NE 0.
          MESSAGE ID SY-MSGID
             TYPE SY-MSGTY
           NUMBER SY-MSGNO
             WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
      ELSEIF ZVSD0092-ZLANGE = '2'.
        SELECT LANDX_EN
             ZCITY1_EN
             FROM ZTSD0094
             INTO CORRESPONDING FIELDS OF TABLE LT_LANDX.

          CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
            EXPORTING
              RETFIELD        = 'LANDX_EN'             "指定要返回屏幕参数的在内表中的field
              VALUE_ORG       = 'S'                    "S代表structure,C代表单元格
              DYNPPROG        = SY-REPID               "指定屏幕参数所在的程序名称
              DYNPNR          = SY-DYNNR               "指定参数所在的屏幕编号
              DYNPROFIELD     = 'ZVSD0092-LANDX'       "指定屏幕参数的名称
            TABLES
              VALUE_TAB       = LT_LANDX               "搜索帮助内容内表
            EXCEPTIONS
              PARAMETER_ERROR = 1
              NO_VALUES_FOUND = 2
              OTHERS          = 3.
          IF SY-SUBRC NE 0.
            MESSAGE ID SY-MSGID
               TYPE SY-MSGTY
             NUMBER SY-MSGNO
               WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
          ENDIF.
        ELSE.
          SELECT LANDX_CN
             ZCITY1_CN
             FROM ZTSD0094
             INTO CORRESPONDING FIELDS OF TABLE LT_LANDX.

            CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
              EXPORTING
                RETFIELD        = 'LANDX_CN'             "指定要返回屏幕参数的在内表中的field
                VALUE_ORG       = 'S'                    "S代表structure,C代表单元格
                DYNPPROG        = SY-REPID               "指定屏幕参数所在的程序名称
                DYNPNR          = SY-DYNNR               "指定参数所在的屏幕编号
                DYNPROFIELD     = 'ZVSD0092-LANDX'       "指定屏幕参数的名称
              TABLES
                VALUE_TAB       = LT_LANDX               "搜索帮助内容内表
              EXCEPTIONS
                PARAMETER_ERROR = 1
                NO_VALUES_FOUND = 2
                OTHERS          = 3.
            IF SY-SUBRC NE 0.
              MESSAGE ID SY-MSGID
                 TYPE SY-MSGTY
               NUMBER SY-MSGNO
                 WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
            ENDIF.
          ENDIF.

        ENDIF.
ENDMODULE.

 

 

 完事儿

 

用户实际的需求是,根据他已填写的字段,展示不同的搜索帮助结果。但我没有找到如何在没有回车事件和保存时间发生时,获取用户已填写的值。中间使用过内存传值,但是效果不太理想,所以我用了第三种方法。在用户还没有回车时,获取所有搜索帮助的值,用户回车之后,搜索帮助的值会变化。如果大家有更好的方法,希望可以留言指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值