现在的位置: 首页 > 综合 > 正文

ALV列的F4帮助

2013年10月13日 ⁄ 综合 ⁄ 共 7514字 ⁄ 字号 评论关闭

一、以下拉菜单方式实现

     1、效果截图如下

 

     2、实现

          1)、在fieldcat里设置F4的DRDN_HNDL值,该值类似索引号

          2)、设置下拉值列表:通过类CL_GUI_ALV_GRID调用方法SET_DROP_DOWN_TABLE,该方法中参数IT_DROP_DOWN里有HANDLE列,该列的值对应1)设置的

                    DRDN_HNDL值

  3、代码

     1)、设置fieldcat属性    


  CASE PS_FIELDCAT-FIELDNAME.
    WHEN 'RQCAT_DESC'.
      PS_FIELDCAT-DRDN_HNDL '1'.
    WHEN 'RQTYP_DESC'.
      PS_FIELDCAT-DRDN_HNDL '2'.
    WHEN 'AMTYP_DESC'.
      PS_FIELDCAT-DRDN_HNDL '3'.
    WHEN 'FREPY_DESC'.
      PS_FIELDCAT-DRDN_HNDL '4'.
    WHEN 'COTYP_DESC'.
      PS_FIELDCAT-DRDN_HNDL '5'.
    WHEN 'STATU_DESC'.
      PS_FIELDCAT-DRDN_HNDL '6'.

     2)、设置下拉列表值


FORM F_SET_DROP_DOWN_LIST USING PO_ALV_GRID TYPE REF TO CL_GUI_ALV_GRID.
  DATALT_VALUES         TYPE LVC_T_DROP.
  PERFORM F_SET_VALUES TABLES LT_VALUES USING 'Z_MMP_RQCAT' 1.
  PERFORM F_SET_VALUES TABLES LT_VALUES USING 'Z_APP_TYPE_2' 2.
  PERFORM F_SET_VALUES TABLES LT_VALUES USING 'Z_COL_SEQ_AMEND' 3.
  PERFORM F_SET_VALUES TABLES LT_VALUES USING 'Z_FRE_PAY' 4.
  PERFORM F_SET_VALUES TABLES LT_VALUES USING 'Z_CARR_O_TYPE' 5.
  PERFORM F_SET_VALUES TABLES LT_VALUES USING 'ZWF_WFSTATUS' 6.
  CALL METHOD PO_ALV_GRID->SET_DROP_DOWN_TABLE
    EXPORTING
      IT_DROP_DOWN LT_VALUES.
ENDFORM.                    " F_SET_DROP_DOWN_LIST


FORM F_SET_VALUES  TABLES PT_VALUES STRUCTURE LVC_S_DROP
                   USING  PV_DOMAIN
                          PV_HANDEL.
  DATALT_VALUES       TYPE TABLE OF DD07V WITH HEADER LINE.
  DATALS_ALV_VALUES   TYPE LVC_S_DROP.
  DATALV_DOMAIN       TYPE DOMNAME.
  CLEAR:LS_ALV_VALUES,LV_DOMAIN,LT_VALUES[],LT_VALUES.
  LV_DOMAIN PV_DOMAIN.
  CALL FUNCTION 'DD_DOMVALUES_GET'     "获取DOMAIN的值列表
    EXPORTING
      DOMNAME        LV_DOMAIN
      TEXT           GC_X
    TABLES
      DD07V_TAB      LT_VALUES[]
    EXCEPTIONS
      WRONG_TEXTFLAG 1
      OTHERS         2.
  LOOP AT LT_VALUES.
    LS_ALV_VALUES-HANDLE PV_HANDEL.
    LS_ALV_VALUES-VALUE  LT_VALUES-DDTEXT.
    APPEND LS_ALV_VALUES TO PT_VALUES.
    CLEARLT_VALUES,LS_ALV_VALUES.
  ENDLOOP.
  FREE:LT_VALUES.
ENDFORM.                    " F_SET_VALUES

二、以单击右边按钮的方式实现

     1、效果截图如下

     2、实现

          有两种方式:

          1)、给fieldcat里的REF_FIELD与REF_TABLE设置相应的值,即该字段所参照的哪个表的哪个字段

          2)、注册F4事件

                   a)、调用类CL_GUI_ALV_GRID的方法注册事件

*&---------------------------------------------------------------------*
*&      Form  F_EVENT_HANDLER_PROC
*&---------------------------------------------------------------------*
*       Edit Event 및 Event Handler 등록
*----------------------------------------------------------------------*
*      <--PO_EVENT     Event Handler
*      <--PO_ALV_GRID  현재 사용중인 GRID 이름
*----------------------------------------------------------------------*
FORM F_EVENT_HANDLER_PROC
                  CHANGING PO_EVENT     TYPE REF TO LCL_EVENT_RECEIVER
                           PO_ALV_GRID  TYPE REF TO LCL_ALV_GRID.

* set editable cells to ready for input
  CALL METHOD PO_ALV_GRID->SET_READY_FOR_INPUT
    EXPORTING
      I_READY_FOR_INPUT 1.
*>> Edit event 설정
*-- CELL 입력후 ENTER 발생한 경우 CATCH
  CALL METHOD PO_ALV_GRID->REGISTER_EDIT_EVENT
    EXPORTING
      I_EVENT_ID CL_GUI_ALV_GRID=>MC_EVT_ENTER.
*-- CELL 입력후 값이 변경 또는 입력되는 순간 CATCH
*설명: check 할 때는 좋으나 값변경하고 바로 데이터를 타기 때문에
*      화면에 데이터가 많을 경우 깜박꺼림이 심한 경우가 발생한다..
  CALL METHOD PO_ALV_GRID->REGISTER_EDIT_EVENT
    EXPORTING
      I_EVENT_ID CL_GUI_ALV_GRID=>MC_EVT_MODIFIED.

  CREATE OBJECT PO_EVENT.

**>> Double-click control
  SET HANDLER PO_EVENT->HANDLE_F4_HELP       FOR PO_ALV_GRID.
*>> CELL BUTTON 을 눌렀을 경우의 처리
  SET HANDLER PO_EVENT->HANDLE_BUTTON_CLICK  FOR PO_ALV_GRID.
*>> HOPSPOT 을 눌렀을 경우의 처리
  SET HANDLER PO_EVENT->HANDLE_HOTSPOT_CLICK FOR PO_ALV_GRID.
*>> User command 처리를 한다.
  SET HANDLER PO_EVENT->HANDLE_USER_COMMAND  FOR PO_ALV_GRID.
*>> TOOLBAR 처리를 한다.
  SET HANDLER PO_EVENT->HANDLE_TOOLBAR       FOR PO_ALV_GRID.
*>> DATA_CHANGED 처리를 한다.
  SET HANDLER PO_EVENT->HANDLE_DATA_CHANGED  FOR PO_ALV_GRID.

  SET HANDLER PO_EVENT->HANDLE_DATA_CHANGED_FINISHED FOR PO_ALV_GRID.

ENDFORM.                    " F_EVENT_HANDLER_PROC

                   b)、注册F4事件(该事件类自己写)

CLASS LCL_EVENT_RECEIVER DEFINITION.
  PUBLIC SECTION.
    METHODS :

*-- HANDLE_F4_HELP 처리를 한다.
    HANDLE_F4_HELP
                 FOR EVENT ONF4 OF CL_GUI_ALV_GRID
                 IMPORTING E_FIELDNAME
                           ES_ROW_NO
                           ER_EVENT_DATA
                           ET_BAD_CELLS
                           E_DISPLAY.

ENDCLASS .                   "LCL_EVENT_RECEIVER DEFINITION

CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.

  METHOD HANDLE_F4_HELP.
    PERFORM F_F4_HELP USING E_FIELDNAME
                            ES_ROW_NO
                            ER_EVENT_DATA.
  ENDMETHOD.                    "HANDLE_F4_HELP
ENDCLASS.                    "LCL_EVENT_RECEIVER IMPLEMENTATION

FORM F_F4_HELP USING PV_FIELDNAME   TYPE LVC_FNAME
                     PS_ROW_NO      TYPE LVC_S_ROID
                     PO_EVENT_DATA  TYPE REF TO CL_ALV_EVENT_DATA.
  DATALT_RETURN TYPE TABLE OF DDSHRETVAL WITH HEADER LINE.
  DATA LS_MODI   TYPE LVC_S_MODI.
  FIELD-SYMBOLS <LT_F4TAB> TYPE LVC_T_MODI.
  RANGES:
        LR_PSPID    FOR ZTP2QMB00590-PSPID OCCURS 0.
  DATABEGIN OF LT_CLS OCCURS 0,
          AVALUE TYPE ZTA0PSA00910-AVALUE,
        END OF LT_CLS.

  CASE PV_FIELDNAME.
    WHEN 'CLS'"Storage Location
      READ TABLE GT_RM_INFO INDEX PS_ROW_NO-ROW_ID.
      SELECT AVALUE INTO CORRESPONDING FIELDS OF TABLE LT_CLS
        FROM ZTA0PSA00910
       WHERE PSPID IN LR_PSPID
        AND  ACODE 'H0033'.
      SORT LT_CLS ASCENDING BY AVALUE.
      DELETE ADJACENT DUPLICATES FROM LT_CLS COMPARING ALL FIELDS.
      LOOP AT LT_CLS.
        IF LT_CLS IS  INITIAL.
          DELETE LT_CLS.
        ENDIF.
      ENDLOOP.
      IF LT_CLS[] IS NOT INITIAL.
*   Set F4 help
        CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
          EXPORTING
            RETFIELD        'CLS'
            VALUE_ORG       GC_S
          TABLES
            VALUE_TAB       LT_CLS[]
            RETURN_TAB      LT_RETURN[]
          EXCEPTIONS
            PARAMETER_ERROR 1
            NO_VALUES_FOUND 2
            OTHERS          3.
        READ TABLE LT_RETURN INDEX 1.
*  Update
        IF LT_RETURN-FIELDVAL IS NOT INITIAL.

          ASSIGN PO_EVENT_DATA->M_DATA->TO <LT_F4TAB>.
          LS_MODI-ROW_ID    PS_ROW_NO-ROW_ID.
          LS_MODI-FIELDNAME 'CLS'.
          LS_MODI-VALUE     LT_RETURN-FIELDVAL.
          APPEND LS_MODI TO <LT_F4TAB>.
        ENDIF.
        PO_EVENT_DATA->M_EVENT_HANDLED 'X'.
      ENDIF.
    WHEN OTHERS.
  ENDCASE.

ENDFORM.                    " F_F4_HELP

                   c)、设置需要注册F4事件的字段

FORM F_SET_F4 .
  DATALT_F4   TYPE LVC_T_F4,
        LS_F4   TYPE LVC_S_F4.

  LS_F4-FIELDNAME  'CLS'.
  LS_F4-REGISTER   GC_X.
  INSERT LS_F4 INTO TABLE LT_F4.
  CALL METHOD GO_ALV_GRID1->REGISTER_F4_FOR_FIELDS
    EXPORTING
      IT_F4 LT_F4.
ENDFORM.                    " F_SET_F4

                   d)、设置Fieldcat里的F4标识字段值

    WHEN 'CLS'.           "Order Type
      PERFORM F_SET_FIELDCAT USING TEXT-R08 GC_L 8
                          CHANGING PS_FIELDCAT.
      PS_FIELDCAT-F4AVAILABL GC_X.

FORM F_SET_FIELDCAT  USING    PV_TEXT     TYPE ANY
                              PV_JUST     TYPE ANY
                              PV_NO       TYPE ANY
                     CHANGING PS_FIELDCAT TYPE LVC_S_FCAT.
  PS_FIELDCAT-SCRTEXT_M    PS_FIELDCAT-SCRTEXT_L
                           PS_FIELDCAT-SCRTEXT_S
                           PS_FIELDCAT-REPTEXT   PV_TEXT.
  PS_FIELDCAT-COL_POS      PV_NO.
  PS_FIELDCAT-JUST         PV_JUST.
ENDFORM.                    " F_SET_FIELDCAT

抱歉!评论已关闭.