Monday, November 15, 2010

ALV OO Custom F4

http://blog.chinaunix.net/u1/40813/showart_347924.html
http://sapprograms.blogspot.com/2008/11/how-to-implement-f4-search-help-in-oo.html
http://ddolgey.tistory.com/10
1.TOP
 CLASS gcl_event_receiver DEFINITION.
   PUBLIC SECTION.
     METHODS:
     on_f4               FOR EVENT onf4 OF cl_gui_alv_grid
                         IMPORTING e_fieldname
                         es_row_no
                         er_event_data
                         et_bad_cells
                         e_display.
 ENDCLASS.  

2.CLA
CLASS gcl_event_receiver IMPLEMENTATION.
  METHOD on_f4.
     PERFORM on_f4 USING e_fieldname
                        es_row_no
                        er_event_data
                        et_bad_cells.
  ENDMETHOD.                                                "on_f4
ENDCLASS. 




3.PBO
SET HANDLER go_event_receiver->on_f4                FOR go_alv.
PERFORM registrar_campos_f4.
4.F01
FORM registrar_campos_f4.
  DATA: ltd_f4 TYPE lvc_t_f4 WITH HEADER LINE,
        lwa_f4 TYPE lvc_s_f4.
  lwa_f4-fieldname  = 'TRATA'.
  lwa_f4-register   = 'X'.
  lwa_f4-getbefore  = 'X' .
  lwa_f4-chngeafter = 'X'.
  lwa_f4-internal   = ''.
  INSERT lwa_f4 INTO TABLE ltd_f4.
  CALL METHOD go_alv->register_f4_for_fields
    EXPORTING
      it_f4 = ltd_f4[].
ENDFORM. 
.............................................
FORM on_f4  USING    p_e_fieldname TYPE lvc_fname
                     p_es_row_no TYPE lvc_s_roid
                     p_er_event_data TYPE REF TO cl_alv_event_data
                     p_et_bad_cells TYPE lvc_t_modi.
  CHECK p_e_fieldname = 'TRATA'.
  FIELD-SYMBOLS:  LIKE LINE OF gtd_dom_tratamiento.
  TYPES: BEGIN OF lty_f4,
            domvalue_l TYPE dd07v-domvalue_l,
            ddtext     TYPE dd07v-ddtext,
         END OF lty_f4.
  DATA: ltd_f4      TYPE TABLE OF lty_f4,
        lwa_f4      TYPE lty_f4,
        lwa_dominio TYPE dd07v.
  DATA: ltd_return  TYPE TABLE OF ddshretval,
        lwa_return  TYPE ddshretval.
  FIELD-SYMBOLS:  TYPE lvc_t_modi.
  DATA: ls_f4 TYPE lvc_s_modi.
* Cargar dominio en tabla.
  LOOP AT gtd_dom_tratamiento ASSIGNING .
    MOVE-CORRESPONDING  TO lwa_f4.
    APPEND lwa_f4 TO ltd_f4.
  ENDLOOP.
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = p_e_fieldname
      value_org       = 'S'
    TABLES
      value_tab       = ltd_f4
      return_tab      = ltd_return
    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.
  ELSE.
    READ TABLE ltd_return INTO lwa_return INDEX 1.
    CHECK lwa_return-fieldval <> ''.
    ASSIGN p_er_event_data->m_data->* TO .
    ls_f4-fieldname = p_e_fieldname.
    ls_f4-row_id = p_es_row_no-row_id.
    ls_f4-value = lwa_return-fieldval .
    APPEND ls_f4 TO .
    DATA lwa_aspirante TYPE gty_aspirante_alv.
    READ TABLE gtd_aspirante_alv INTO lwa_aspirante INDEX p_es_row_no-row_id.
    READ TABLE gtd_dom_tratamiento INTO lwa_dominio
         WITH KEY ddtext = lwa_return-fieldval.
    IF sy-subrc = 0.
      lwa_aspirante-trata = lwa_dominio-domvalue_l.
    ELSE.
      lwa_aspirante-trata = ''.
    ENDIF.
    UPDATE ztaspirante_10 SET   trata = lwa_aspirante-trata
                          WHERE numas = lwa_aspirante-numas.
    p_er_event_data->m_event_handled = 'X'.
  ENDIF.

No comments:

Post a Comment