En este post vamos a ver como podemos añadir una ayuda de búsqueda sobre cualquier columna de nuestro ALV OO.
La clase que voy a utilizar para generar el ALV es CL_GUI_ALV_GRID y el evento que vamos a utilizar es ONF4( On Value Request ).
El primer paso es definir el método que va a gestionar este evento dentro de la clase controladora que nos hayamos definido para controlar los diferente eventos dentro del ALV.
CLASS lcl_event_handler DEFINITION.
PUBLIC SECTION .
METHODS:
* Ayuda de busqueda
handle_user_onf4 FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING e_fieldname
e_fieldvalue
es_row_no
er_event_data
et_bad_cells
e_display,
Seguimos definiendo la Implementación del método dentro de la clase.
CLASS lcl_event_handler IMPLEMENTATION .
* Ayuda de búsqueda
METHOD handle_user_onf4.
PERFORM handle_user_onf4 USING e_fieldname
e_fieldvalue
es_row_no
er_event_data
et_bad_cells
e_display.
ENDMETHOD. "handle_user_onf4
Una vez tenemos definido e implementado el método que va a cotrolar el evento debemos asociarselo al objeto de la clase cl_gui_alv_grid que hayamos definido para crear el ALV.
*--Registering handler methods to handle ALV Grid events
SET HANDLER gr_event_handler->handle_user_onf4 FOR gref_alvgrid.
Como último paso debemos indicar al ALV sobre que columnas se va a aplicar el evento. Podemos incluirlo en todas las columnas que necesitemos.
* Registramos los campos que van a disponer de ayuda de búsqueda personalizada
REFRESH it_f4.
l_f4-fieldname = 'CHARG'.
l_f4-register = 'X'.
l_f4-getbefore = space.
l_f4-chngeafter = space.
APPEND l_f4 TO it_f4.
CALL METHOD gref_alvgrid->register_f4_for_fields
EXPORTING
it_f4 = it_f4.
Para generar la ayuda de búsqueda tenemos diferente módulos de funciones como puede ser F4IF_INT_TABLE_VALUE_REQUEST ó HELP_VALUES_GET_WITH_TABLE.
Un lugar para compartir conocimiento con todas las personas interesadas en el universo SAP
Mostrando entradas con la etiqueta ALV. Mostrar todas las entradas
Mostrando entradas con la etiqueta ALV. Mostrar todas las entradas
sábado, 22 de noviembre de 2014
sábado, 21 de junio de 2014
Colores en un ALV de SAP
En este post voy a comentar como podemos utilizar los colores en las celdas de un ALV en SAP. Es un ejemplo muy sencillo pero a la vez muy util, que hará que aumentemos la vistosidad de nuestros listados resoltando aquellas celdas que mas nos interesen.
-
En
la tabla interna definimos un atributo COLOR del tipo SLIS_T_SPECIALCOL_ALV.
COLOR TYPE SLIS_T_SPECIALCOL_ALV, " Color Field
COLOR TYPE SLIS_T_SPECIALCOL_ALV, " Color Field
-
En la definición del layout debemos indicar que columna de la
tabla interna va a definir las características de color de la celda. En campo a
rellenar es el COLTAB_FIELDNAME.
i_layout-coltab_fieldname = 'COLOR'.
i_layout-coltab_fieldname = 'COLOR'.
-
El
último paso sería rellenar este campo en la tabla interna. Lo que le vamos a
indicar es que columna vamos a dar color y el color que le vamos a dar. El
color se indica con un valor entero (1, 2, 3, ….).
DATA: v_alv_color TYPE slis_specialcol_alv.
CLEAR: v_alv_color.
v_alv_color-fieldname = 'STATUS'.
v_alv_color-color-col = 6. “Rojo
APPEND v_alv_color TO t_lecturas-color.
Y finalmente podemos conseguir cosas como la que se ve en la siguiente imagen.DATA: v_alv_color TYPE slis_specialcol_alv.
CLEAR: v_alv_color.
v_alv_color-fieldname = 'STATUS'.
v_alv_color-color-col = 6. “Rojo
APPEND v_alv_color TO t_lecturas-color.
Podemos jugar con esta funcionalidad y conseguir cosas bastante chulas.
lunes, 9 de junio de 2014
Modificar un ALV de forma dinámica
En este post vamos a explicar como podemos modificar uns ALV de FM de manera dinámica, es decir, en tiempo de ejecución. Podemos modificar desde el numero de columnas que
aparecen, la ordenacion, las caracteristicas del ALV, etc.
Lo vamos a hacer con un ejemplo de código que como mejor se entiende. En este caso lo que vamos a hacer es añadir nuevas columnas al informe, ademas completaremos los valores que tendrán estás columnas. La funcion que vamos a utilizar para realizar la modificación es REUSE_ALV_GRID_LAYOUT_INFO_SET.
Lo vamos a hacer con un ejemplo de código que como mejor se entiende. En este caso lo que vamos a hacer es añadir nuevas columnas al informe, ademas completaremos los valores que tendrán estás columnas. La funcion que vamos a utilizar para realizar la modificación es REUSE_ALV_GRID_LAYOUT_INFO_SET.
**Modificamos la
estructura de salida.
PERFORM
modificar_gt_alv.
rs_selfield-refresh = 'X'.
*&---------------------------------------------------------------------*
*& Form modificar_gt_alv
*&---------------------------------------------------------------------*
* Modificamos gt_alv
*----------------------------------------------------------------------*
FORM modificar_gt_alv.
DATA i_field LIKE i_fieldcat
WITH HEADER LINE.
LOOP AT i_fieldcat INTO i_field.
CASE i_field-fieldname.
WHEN 'EFFECTIVITY'.
i_field-no_out = space.
MODIFY i_field INDEX
sy-tabix TRANSPORTING no_out.
WHEN 'GRUPO_F'.
i_field-no_out = space.
MODIFY i_field INDEX
sy-tabix TRANSPORTING no_out.
WHEN 'SUBMOD'.
i_field-no_out = space.
MODIFY i_field INDEX
sy-tabix TRANSPORTING no_out.
WHEN 'MSN'.
i_field-no_out = space.
MODIFY i_field INDEX
sy-tabix TRANSPORTING no_out.
WHEN 'PNR'.
i_field-no_out = space.
MODIFY i_field INDEX
sy-tabix TRANSPORTING no_out.
WHEN 'SN'.
i_field-no_out = space.
MODIFY i_field INDEX
sy-tabix TRANSPORTING no_out.
ENDCASE.
APPEND i_field.
ENDLOOP.
CLEAR i_fieldcat.
REFRESH i_fieldcat.
LOOP AT i_field.
APPEND i_field TO i_fieldcat.
ENDLOOP.
LOOP AT i_gt_alv WHERE SEL =
'X'.
READ TABLE gt_importar WITH
KEY DOKNR = i_gt_alv-DOKNR_D.
IF sy-subrc = 0.
i_gt_alv-EFFECTIVITY_TYPE =
gt_importar-efectividad.
i_gt_alv-GRUPO_FLOTA =
gt_importar-zzcgrupo_flotas.
i_gt_alv-SUBMODELO = gt_importar-zzcsubmodelo.
i_gt_alv-MSN =
gt_importar-zzcmsn.
MODIFY i_gt_alv INDEX
sy-tabix
TRANSPORTING
EFFECTIVITY_TYPE
GRUPO_FLOTA
SUBMODELO
MSN.
ENDIF.
ENDLOOP.
CALL FUNCTION 'REUSE_ALV_GRID_LAYOUT_INFO_SET'
EXPORTING
* IS_LAYOUT =
IT_FIELDCAT = i_fieldcat
* IT_SORT =
* IT_FILTER =
* IS_GRID_SCROLL =
*
IS_PRINT =
.
ENDFORM.martes, 3 de junio de 2014
Evento DATA_CHANGED en un listado ALV de SAP
En este post os voy a indicar como podeis controlar el evento de modificación en celdas editables dentro de un ALV de FM. Vamos a tener que controlar el evento DATA_CHANGED. Es algo muy sencillo y que nos da mucho juego a la hora de jugar con los listados ALV
DATA : ls_mod_cell TYPE lvc_s_modi,
lv_value TYPE lvc_value .
DATA rs_selfield TYPE slis_selfield.
DATA: l_modif TYPE zverde_n_sac_bb.
SORT rr_data->mt_mod_cells BY row_id .
* Tratamos la linea modificada
LOOP AT rr_data->mt_mod_cells INTO ls_mod_cell.
IF ls_mod_cell-fieldname = 'NSC' OR ls_mod_cell-fieldname = 'NUM'.
ENDLOOP.
ENDFORM. "data_changed
Para
controlar el evento DATA_CHANGED en un ALV de función tenemos que registrar el
evento:
FORM gestionar_eventos .
DATA i_listevent TYPE slis_alv_event.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = i_events.
READ TABLE i_events WITH KEY name = c_topofpage
INTO i_listevent.
IF sy-subrc = 0.
MOVE c_topofpage TO i_listevent-form.
MODIFY i_events FROM i_listevent TRANSPORTING form
WHERE name = c_topofpage.
CLEAR i_listevent.
i_listevent-name = 'DATA_CHANGED'.
i_listevent-form = 'DATA_CHANGED'.
APPEND i_listevent TO i_events.
ENDIF.
ENDFORM.
DATA i_listevent TYPE slis_alv_event.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = i_events.
READ TABLE i_events WITH KEY name = c_topofpage
INTO i_listevent.
IF sy-subrc = 0.
MOVE c_topofpage TO i_listevent-form.
MODIFY i_events FROM i_listevent TRANSPORTING form
WHERE name = c_topofpage.
CLEAR i_listevent.
i_listevent-name = 'DATA_CHANGED'.
i_listevent-form = 'DATA_CHANGED'.
APPEND i_listevent TO i_events.
ENDIF.
ENDFORM.
Después el
evento se gestionara desde un FORM:
FORM data_changed USING rr_data TYPE REF TO cl_alv_changed_data_protocol.DATA : ls_mod_cell TYPE lvc_s_modi,
lv_value TYPE lvc_value .
DATA rs_selfield TYPE slis_selfield.
DATA: l_modif TYPE zverde_n_sac_bb.
SORT rr_data->mt_mod_cells BY row_id .
* Tratamos la linea modificada
LOOP AT rr_data->mt_mod_cells INTO ls_mod_cell.
IF ls_mod_cell-fieldname = 'NSC' OR ls_mod_cell-fieldname = 'NUM'.
ENDLOOP.
ENDFORM. "data_changed
sábado, 10 de mayo de 2014
ALV Orientado a Objetos (OO)
En este post un ejemplo de creación de un ALV con objetos en SAP.
po_layout-stylefname = 'BOTON'.
Para crear un ALV OO tenemos que crearnos una nueva DYNPRO y
dentro de esta insertar un “Custom
control”. Este control será el que contenga al ALV.
Definimos los objetos para el ALV y para el contenedor
* ALV Grid
DATA gref_alvgrid TYPE REF TO cl_gui_alv_grid.
* Contenedor ALV
DATA gref_ccontainer TYPE REF TO cl_gui_custom_container.
DATA gref_alvgrid TYPE REF TO cl_gui_alv_grid.
* Contenedor ALV
DATA gref_ccontainer TYPE REF TO cl_gui_custom_container.
Cuando queramos lanzar el ALV tenemos que hacer lo siguiente:
- Creamos el objeto contenedor. Tenemos que
pasarle el nombre que hemos dado al “Custom
control” de la Dynpro que hemos creado.
CREATE OBJECT gref_ccontainer
EXPORTING
container_name = gc_custom_control_name
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6.
CREATE OBJECT gref_ccontainer
EXPORTING
container_name = gc_custom_control_name
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6.
- Creamos el objeto del ALV. Tenemos que pasarle
el objeto contenedor que acabamos de crear.
CREATE OBJECT gref_alvgrid
EXPORTING
i_parent = gref_ccontainer
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS = 5.
CREATE OBJECT gref_alvgrid
EXPORTING
i_parent = gref_ccontainer
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS = 5.
Además de esto también debemos definir:
- Catálogo de campos
FORM preparar_catalogo_campos CHANGING po_fieldcat TYPE lvc_t_fcat.
DATA ls_fcat TYPE lvc_s_fcat .
CLEAR: po_fieldcat.
REFRESH: po_fieldcat.
* Indicador
CLEAR ls_fcat.
ls_fcat-col_pos = 1.
ls_fcat-coltext = 'Ind.'.
ls_fcat-fieldname = 'IND'.
ls_fcat-outputlen = 6.
ls_fcat-no_out = ' '.
ls_fcat-key = 'X'.
APPEND ls_fcat TO po_fieldcat.
* Status
CLEAR ls_fcat.
ls_fcat-col_pos = 2.
ls_fcat-coltext = 'Status'.
ls_fcat-fieldname = 'MSGNR'.
ls_fcat-outputlen = 6.
ls_fcat-no_out = ' '.
ls_fcat-key = 'X'.
APPEND ls_fcat TO po_fieldcat.
FORM preparar_catalogo_campos CHANGING po_fieldcat TYPE lvc_t_fcat.
DATA ls_fcat TYPE lvc_s_fcat .
CLEAR: po_fieldcat.
REFRESH: po_fieldcat.
* Indicador
CLEAR ls_fcat.
ls_fcat-col_pos = 1.
ls_fcat-coltext = 'Ind.'.
ls_fcat-fieldname = 'IND'.
ls_fcat-outputlen = 6.
ls_fcat-no_out = ' '.
ls_fcat-key = 'X'.
APPEND ls_fcat TO po_fieldcat.
* Status
CLEAR ls_fcat.
ls_fcat-col_pos = 2.
ls_fcat-coltext = 'Status'.
ls_fcat-fieldname = 'MSGNR'.
ls_fcat-outputlen = 6.
ls_fcat-no_out = ' '.
ls_fcat-key = 'X'.
APPEND ls_fcat TO po_fieldcat.
- Características
del layout
FORM preparar_salida CHANGING po_layout TYPE lvc_s_layo.
po_layout-grid_title = text-002.
* po_layout-smalltitle = gc_marca.
po_layout-stylefname = 'BOTON'.
po_layout-no_rowmark = 'X'.
*Los siguientes dos campos son necesarios si queremos definir estilos sobre las celdas
* po_layout-ctab_fname = 'CELLCOLORS'.
* po_layout-info_fname = 'ROWCOLOR'.
*El siguiente campo lo informaremos si queremos que las filas del ALV sean seleccionables
* po_layout-sel_mode = ''.
FORM preparar_salida CHANGING po_layout TYPE lvc_s_layo.
po_layout-grid_title = text-002.
* po_layout-smalltitle = gc_marca.
po_layout-stylefname = 'BOTON'.
po_layout-no_rowmark = 'X'.
*Los siguientes dos campos son necesarios si queremos definir estilos sobre las celdas
* po_layout-ctab_fname = 'CELLCOLORS'.
* po_layout-info_fname = 'ROWCOLOR'.
*El siguiente campo lo informaremos si queremos que las filas del ALV sean seleccionables
* po_layout-sel_mode = ''.
- Ordenación
FORM prepare_sort_table CHANGING pt_sort TYPE lvc_t_sort .
DATA ls_sort TYPE lvc_s_sort .
ls_sort-spos = '1' .
ls_sort-fieldname = 'ZZDOCUMENO' .
ls_sort-up = 'X' . "A to Z
ls_sort-down = space .
APPEND ls_sort TO pt_sort .
ls_sort-spos = '2' .
ls_sort-fieldname = 'ZZVERSION' .
ls_sort-up = space .
ls_sort-down = 'X' . "Z to A
APPEND ls_sort TO pt_sort .
FORM prepare_sort_table CHANGING pt_sort TYPE lvc_t_sort .
DATA ls_sort TYPE lvc_s_sort .
ls_sort-spos = '1' .
ls_sort-fieldname = 'ZZDOCUMENO' .
ls_sort-up = 'X' . "A to Z
ls_sort-down = space .
APPEND ls_sort TO pt_sort .
ls_sort-spos = '2' .
ls_sort-fieldname = 'ZZVERSION' .
ls_sort-up = space .
ls_sort-down = 'X' . "Z to A
APPEND ls_sort TO pt_sort .
Si queremos quitar botones estándar de la barra del ALV hay que indicárselo al ALV excluyendo esos
botones:
* Botones excluidos del ALV
APPEND cl_gui_alv_grid=>mc_fc_refresh TO lt_excl_func1.
APPEND cl_gui_alv_grid=>mc_fc_check TO lt_excl_func1.
APPEND cl_gui_alv_grid=>mc_fc_info TO lt_excl_func1.
APPEND cl_gui_alv_grid=>mc_fc_loc_append_row TO lt_excl_func1.
APPEND cl_gui_alv_grid=>mc_fc_loc_copy TO lt_excl_func1.
APPEND cl_gui_alv_grid=>mc_fc_loc_copy_row TO lt_excl_func1.
APPEND cl_gui_alv_grid=>mc_fc_loc_cut TO lt_excl_func1.
APPEND cl_gui_alv_grid=>mc_fc_loc_delete_row TO lt_excl_func1.
APPEND cl_gui_alv_grid=>mc_fc_loc_insert_row TO lt_excl_func1.
APPEND cl_gui_alv_grid=>mc_fc_loc_move_row TO lt_excl_func1.
APPEND cl_gui_alv_grid=>mc_fc_loc_paste TO lt_excl_func1.
APPEND cl_gui_alv_grid=>mc_fc_loc_paste_new_row TO lt_excl_func1.
APPEND cl_gui_alv_grid=>mc_fc_loc_undo TO lt_excl_func1.
APPEND cl_gui_alv_grid=>mc_fc_graph TO lt_excl_func1.
APPEND cl_gui_alv_grid=>mc_fc_refresh TO lt_excl_func1.
APPEND cl_gui_alv_grid=>mc_fc_check TO lt_excl_func1.
APPEND cl_gui_alv_grid=>mc_fc_info TO lt_excl_func1.
APPEND cl_gui_alv_grid=>mc_fc_loc_append_row TO lt_excl_func1.
APPEND cl_gui_alv_grid=>mc_fc_loc_copy TO lt_excl_func1.
APPEND cl_gui_alv_grid=>mc_fc_loc_copy_row TO lt_excl_func1.
APPEND cl_gui_alv_grid=>mc_fc_loc_cut TO lt_excl_func1.
APPEND cl_gui_alv_grid=>mc_fc_loc_delete_row TO lt_excl_func1.
APPEND cl_gui_alv_grid=>mc_fc_loc_insert_row TO lt_excl_func1.
APPEND cl_gui_alv_grid=>mc_fc_loc_move_row TO lt_excl_func1.
APPEND cl_gui_alv_grid=>mc_fc_loc_paste TO lt_excl_func1.
APPEND cl_gui_alv_grid=>mc_fc_loc_paste_new_row TO lt_excl_func1.
APPEND cl_gui_alv_grid=>mc_fc_loc_undo TO lt_excl_func1.
APPEND cl_gui_alv_grid=>mc_fc_graph TO lt_excl_func1.
Por otro lado si lo que queremos es añadir botones (a los
que podamos dar funcionalidad) a la barra del ALV lo tenemos que hacer mediante
el evento “handle_toolbar”. Ademas
debemos indicar al ALV que la barra va a ser interactiva. Para esto llamamos al
método “CALL METHOD gref_alvgrid->set_toolbar_interactive.”
Para añadir los botones hacemos lo siguiente:
FORM handle_toolbar CHANGING p_e_object TYPE REF TO cl_alv_event_toolbar_set
p_e_interactive TYPE char01.
DATA gs_toolbar TYPE stb_button.
CLEAR gs_toolbar.
MOVE 'FICH' TO gs_toolbar-function.
MOVE icon_write_file TO gs_toolbar-icon.
MOVE 'Generar fichero' TO gs_toolbar-quickinfo.
MOVE 'Generar fichero' TO gs_toolbar-text.
MOVE ' ' TO gs_toolbar-disabled.
APPEND gs_toolbar TO p_e_object->mt_toolbar.
CLEAR gs_toolbar.
p_e_interactive TYPE char01.
DATA gs_toolbar TYPE stb_button.
CLEAR gs_toolbar.
MOVE 'FICH' TO gs_toolbar-function.
MOVE icon_write_file TO gs_toolbar-icon.
MOVE 'Generar fichero' TO gs_toolbar-quickinfo.
MOVE 'Generar fichero' TO gs_toolbar-text.
MOVE ' ' TO gs_toolbar-disabled.
APPEND gs_toolbar TO p_e_object->mt_toolbar.
CLEAR gs_toolbar.
Además de todo esto podemos añadir muchos eventos al ALV,
tantos como los que estén definidos en la clase CL_GUI_ALV_GRID.
En este ejemplo vamos a ver 5 (Uno de ellos es el handle_toolbar explicado en el apartado anterior):
En este ejemplo vamos a ver 5 (Uno de ellos es el handle_toolbar explicado en el apartado anterior):
- handle_user_command
FORM handle_user_command USING p_e_ucomm TYPE syucomm.
CASE p_e_ucomm .
WHEN 'FICH'.
PERFORM generar_fichero.
ENDCASE.
FORM handle_user_command USING p_e_ucomm TYPE syucomm.
CASE p_e_ucomm .
WHEN 'FICH'.
PERFORM generar_fichero.
ENDCASE.
- handle_double_click
FORM handle_double_click USING p_e_row TYPE lvc_s_row
p_e_column TYPE lvc_s_col
p_es_row_no TYPE lvc_s_roid.
READ TABLE t_lecturas INDEX p_es_row_no-row_id.
IF sy-subrc = 0.
CASE p_e_column-fieldname.
WHEN 'MATNR'.
SET PARAMETER ID 'MAT' FIELD t_lecturas-matnr.
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDIF.
FORM handle_double_click USING p_e_row TYPE lvc_s_row
p_e_column TYPE lvc_s_col
p_es_row_no TYPE lvc_s_roid.
READ TABLE t_lecturas INDEX p_es_row_no-row_id.
IF sy-subrc = 0.
CASE p_e_column-fieldname.
WHEN 'MATNR'.
SET PARAMETER ID 'MAT' FIELD t_lecturas-matnr.
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDIF.
-
handle_data_changed
FORM handle_data_changed USING p_er_data_changed TYPE REF TO cl_alv_changed_data_protocol.
DATA: line TYPE lvc_s_modi,
indice TYPE sy-tabix,
selected_row TYPE lvc_t_roid,
l_sel_row TYPE lvc_s_roid.
CLEAR: line,
indice.
READ TABLE p_er_data_changed->mt_mod_cells INTO line INDEX 1.
IF sy-subrc = 0.
indice = line-row_id.
IF indice IS NOT INITIAL.
REFRESH selected_row.
l_sel_row-row_id = indice.
APPEND l_sel_row TO selected_row.
* Seleccionamos la linea que ha sido modificada
CALL METHOD gref_alvgrid->set_selected_rows
EXPORTING
it_row_no = selected_row.
ENDIF.
ENDIF.
FORM handle_data_changed USING p_er_data_changed TYPE REF TO cl_alv_changed_data_protocol.
DATA: line TYPE lvc_s_modi,
indice TYPE sy-tabix,
selected_row TYPE lvc_t_roid,
l_sel_row TYPE lvc_s_roid.
CLEAR: line,
indice.
READ TABLE p_er_data_changed->mt_mod_cells INTO line INDEX 1.
IF sy-subrc = 0.
indice = line-row_id.
IF indice IS NOT INITIAL.
REFRESH selected_row.
l_sel_row-row_id = indice.
APPEND l_sel_row TO selected_row.
* Seleccionamos la linea que ha sido modificada
CALL METHOD gref_alvgrid->set_selected_rows
EXPORTING
it_row_no = selected_row.
ENDIF.
ENDIF.
- handle_click
FORM handle_click USING p_es_col_id TYPE lvc_s_col
p_es_row_no TYPE lvc_s_roid.
DATA: es_row_no TYPE lvc_s_roid,
es_row_info TYPE lvc_s_row,
es_col_info TYPE lvc_s_col.
CLEAR: es_row_no,
es_row_info,
es_col_info.
IF p_es_col_id = 'IND'.
PERFORM modificar_status USING p_es_row_no-row_id.
ENDIF.
FORM handle_click USING p_es_col_id TYPE lvc_s_col
p_es_row_no TYPE lvc_s_roid.
DATA: es_row_no TYPE lvc_s_roid,
es_row_info TYPE lvc_s_row,
es_col_info TYPE lvc_s_col.
CLEAR: es_row_no,
es_row_info,
es_col_info.
IF p_es_col_id = 'IND'.
PERFORM modificar_status USING p_es_row_no-row_id.
ENDIF.
Además para que el evento “handle_data_changed”
se dispare hay que llamar al método “register_edit_event”.
CALL METHOD gref_alvgrid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified.
CALL METHOD gref_alvgrid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified.
Finalmente para lanzar el ALV se debe hacer lo siguiente:
CALL METHOD gref_alvgrid->set_table_for_first_display
EXPORTING
is_layout = gs_layout
it_toolbar_excluding = lt_excl_func1
CHANGING
it_outtab = t_lecturas[]
it_fieldcatalog = gi_fieldcat
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
CALL METHOD gref_alvgrid->set_table_for_first_display
EXPORTING
is_layout = gs_layout
it_toolbar_excluding = lt_excl_func1
CHANGING
it_outtab = t_lecturas[]
it_fieldcatalog = gi_fieldcat
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
Si hemos modificado la tabla interna
que muestra el ALV y queremos que estos cambios se reflejen al ALV llamamos al
siguiente método:
* Refresca el ALV
CALL METHOD gref_alvgrid->refresh_table_display
EXCEPTIONS
finished = 1
OTHERS = 2.
CALL METHOD gref_alvgrid->refresh_table_display
EXCEPTIONS
finished = 1
OTHERS = 2.
Si al lanzar algún evento no queremos
que los scroll se nos inicialicen hacemos lo siguiente antes y después del código
que estemos ejecutando (Recuperamos la situación del scroll antes de ejecutar
nuestro código, y al finalizar nuestro código le indicamos cual queremos que
sea la situación del scroll):
CALL METHOD gref_alvgrid->get_scroll_info_via_id
IMPORTING
es_row_no = es_row_no
es_row_info = es_row_info
es_col_info = es_col_info.
IMPORTING
es_row_no = es_row_no
es_row_info = es_row_info
es_col_info = es_col_info.
Si queremos saber que líneas de la tabla
interna se están visualizando en pantalla y cuales no (por que se ha aplicado
algún filtro) llamamos al siguiente método:
CALL METHOD gref_alvgrid->get_filtered_entries
IMPORTING
et_filtered_entries = et_filtered_entries.
IMPORTING
et_filtered_entries = et_filtered_entries.
Si queremos dar a alguna columna
alguna apariencia diferente (por ejemplo de botón) hacemos lo siguiente:
- En la tabla interna que contiene los datos que
se muestran en el ALV definimos un nuevo campo de tipo LVC_T_STYL. Este campo
contendrá las características de cada fila.
- Despues al rellenar la tabla interna tendremos
que completar este nuevo campo. En este caso, en el que queremos darle la
apariencia de botón hacemos lo siguiente:
CLEAR ls_style.
ls_style-fieldname = 'IND'.
ls_style-style = cl_gui_alv_grid=>mc_style_button.
APPEND ls_style TO t_lecturas-boton.
CLEAR ls_style.
ls_style-fieldname = 'IND'.
ls_style-style = cl_gui_alv_grid=>mc_style_button.
APPEND ls_style TO t_lecturas-boton.
Con esto le estamos indicando que la columna “IND” va a tener la apariencia de
un botón.
Finalmente en la
definición del layout tenemos que indicarle que campo de nuestra tabla interna
es la que define las características de cada fila.po_layout-stylefname = 'BOTON'.
Suscribirse a:
Entradas (Atom)
Integración SAP
Cuando hablamos de SAP como sistema integrado que cubre toda la casuística de nuestro negocio estamos siendo bastante osados. Casi cualquier...
-
En este post un ejemplo de creación de un ALV con objetos en SAP. Para crear un ALV OO tenemos que crearnos una nueva DYNPRO y dentro de ...
-
En este post vamos a ver una de las BADI´s mas utilizadas dentro de SAP. No es otro que la BADI ME_PROCESS_PO_CUST que se utiliza para inc...

