OO ALV 设置搜索帮助的三种方式 ONF4 EVENT

一、在 FIELDCAT 中设置参照

二、CALL FUNCTION  'F4IF_INT_TABLE_VALUE_REQUEST '

三、CALL FUNCTION ' HELP_VALUES_GET_WITH_TABLE '

在对OO ALV 设置搜索帮助的流程

1.注册fieldcat 需要 实现搜索帮助的字段       

LS_FIELSCAT-F4AVAILABL = 'X'.

2.注册 ONF4事件

CLASS LCL_EVENT DEFINITION .
  PUBLIC SECTION.
    METHODS: HANDLE_ONF4 FOR EVENT ONF4 OF CL_GUI_ALV_GRID
                         IMPORTING  E_FIELDNAME
                                    ES_ROW_NO
                                    ER_EVENT_DATA
                                    SENDER .
ENDCLASS .
CLASS LCL_EVENT IMPLEMENTATION .
  METHODS HANDLE_ONF4 .
   PERFORM FM_HANDLE_ONF4 USING E_FIELDNAME
                                ES_ROW_NO
                                ER_EVENT_DATA
                                SENDER .
 
  ENDMETHOD.
  
ENDCLASS .
 PERFORM FM_HANDLE_ONF4 USING E_FIELDNAME TYPE LVC_FNAME
                              ES_ROW_NO TYPE LVC_S_ROID
                              ER_EVENT_DATA TYPE REF TO CL_ALV_EVENT_DATA
                              SENDER TYPE REF TO CL_GUI_ALV_GRID.
  CASE ...

ENDFORM.

SET HANDLER PO_EVENT->HANDLE_ONF4 FOR CL_GUI_ALV_GRID .
 

3.注册 ALV中的字段( PBO)

PERFORM REGISTER_F4 CHANGING GS_ALV TYPE REF TO CL_ALV_GRID.
  DATA IT_F4 TYPE LVC_T_F4 .
  DATA IS_F4 TYPE LVC_S_F4 .
  CLEAR IS_F4 .
  IS_F4-FIELDNAME = 'MATNR'.
  IS_F4-REGISTER  = 'X' .
  IS_F4-GETBEFORE = 'X'.
  IS_F4-CHANGEAFTER = 'X'.
  INSERT IS_F4 INTO TABLE IT_F4 .
  CLEAR IS_F4 .
  .....
  
  CALL METHOD GS_ALV->REGISTER_F4_FOR_FIELDS
       EXPORTING
         IT_F4  = IT_F4[] .
ENDFORM.

4.具体实现

CALL FUNCTION  'F4IF_INT_TABLE_VALUE_REQUEST '

FORM HELP_F4 TABLES PT_TAB
             USING PE_FIELDNAME TYPE LVC_FNAME
                   PS_ROW_NO    TYPE LVC_S_ROID
                   PR_EVENT_DATA TYPE REF TO CL_ALV_EVENT_DATA .
  DATA: LT_RETURN TYPE TABLE OF DDSHRETVAL WITH HEADER LINE ,
        LS_MODI TYPE LVC_S_MODI .
  FIELD-SYMBOLS: <LV_ITAB> TYPE LVC_T_MODI .

  "获取搜索帮助数据 存入表LT_VALUE_TAB 
    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
*     DDIC_STRUCTURE         = ' '
      RETFIELD               = 'FIELDNAME
*     PVALKEY                = ' '
*     DYNPPROG               = ' '
*     DYNPNR                 = ' '
*     DYNPROFIELD            = ' '
*     STEPL                  = 0
*     WINDOW_TITLE           =
*     VALUE                  = ' '
      VALUE_ORG              = 'S'
*     MULTIPLE_CHOICE        = ' '
*     DISPLAY                = ' '
*     CALLBACK_PROGRAM       = ' '
*     CALLBACK_FORM          = ' '
*     CALLBACK_METHOD        =
*     MARK_TAB               =
*   IMPORTING
*     USER_RESET             =
    TABLES
      VALUE_TAB              = LT_VALUE_TAB 
*     FIELD_TAB              =
      RETURN_TAB             = LT_RETURN
*     DYNPFLD_MAPPING        =
    EXCEPTIONS
      PARAMETER_ERROR        = 1
      NO_VALUES_FOUND        = 2
      OTHERS                 = 3
            .
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.

  PR_EVENT_DATA->M_EVENT_HANDLED = GC_X.

  ASSIGN PR_EVENT_DATA->M_DATA->* TO <LV_ITAB> .
  READ TABLE LT_RETURN INDEX 1.
  IF SY-SUBRC EQ 0 .
    LS_MODI-ROW_ID  = PS_ROW_NO-ROW_ID .
    LS_MODI-FIELDNAME = PV_FIELDNAME .
    LS_MODI-VALUE  = LT_RETURN-FIELDVAL.
    APPEND LS_MODI TO <LV_ITAB> .
  ENDIF.
ENDFORM.

 CALL FUNCTION ' HELP_VALUES_GET_WITH_TABLE '

DATA: LT_FIELDS LIKE help_value OCCURS 0 WITH HEADER LINE.          
      DATA: BEGIN OF LT_VALUETAB OCCURS 0,                                  
                     string(100),                            
                  END OF LT_VALUETAB.          
      DATA: BEGIN OF lt_MATNR OCCURS 0,                                    
                     MATNR  LIKE  MARA-MATNR,                                    
                     MAKTX  LIKE  MAKT-MAKTX,                             
                  END OF lt_MATNR.
 
      SELECT MARA~MATNR MAKT~MAKTX 
        INTO CORRESPONDING FIELDS OF TABLE lt_MATNR               
        FROM MARA 
        INNER JOIN MAKT  ON MAKT~MAKTX = MARA~MATNR                             
        .          
 
      LT_FIELDS-tabname = 'MARA'.          
      LT_FIELDS-fieldname = 'MATNR'.         
      LT_FIELDS-selectflag = 'X'.          
      APPEND LT_FIELDS.
      CLEAR LT_FIELDS.      
      LT_FIELDS-tabname = 'MAKT'.          
      LT_FIELDS-fieldname = 'MAKTX'.          
      APPEND LT_FIELDS.
      CLEAR LT_FIELDS.          
 
      LOOP AT lt_MATNR.                 
         LT_VALUETAB-string = lt_MATNR-MATNR.                 
         APPEND LT_VALUETAB.
         CLEAR LT_VALUETAB.     
         LT_VALUETAB-string = lt_MATNR-MAKTX.                 
         APPEND LT_VALUETAB.
         CLEAR LT_VALUETAB.          
      ENDLOOP.          
 
      CALL FUNCTION 'HELP_VALUES_GET_WITH_TABLE'                  
         EXPORTING                         
            title_in_values_list = ''                         
            titel                = '请选择'                  
         IMPORTING                         
            select_value     = PS_MATNR                 
         TABLES                         
            fields           = LT_FIELDS                         
            valuetab         = LT_VALUETAB.                
       IF sy-subrc NE 0.                      
        MESSAGE 'No value selected!' TYPE 'S'.                
       ENDIF.   

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Gong JX

多谢鼓励

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

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

打赏作者

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

抵扣说明:

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

余额充值