PDA

Ver la Versión Completa : ALV en la screen de una dynpro


zebalia
13/10/10, 10:11:42
Hola buenas.

Vereis, necesito hacer un ALV en una screen de una dynpro y no se muy bien como hacerlo.

Me imagino que tengo que crear un "Control Custom" donde insertar mi ALV. El problema es que no se como y donde crear este ALV.

El ALV me imagino que se creará en el PBO. He puesto lo siguiente:

IF my_container IS INITIAL.

CREATE OBJECT my_alv_grid
EXPORTING
i_parent = my_container
EXCEPTIONS
OTHERS = 1.

ENDIF.

Ahora, lo que no se, es donde crear mi catálogo y donde poner lo siguiente:

CALL METHOD my_alv_grid->set_table_for_first_display
EXPORTING
i_structure_name = 'ZTABLA' (Este es el nombre del Custom Controler??)
"is_layout = is_layout
CHANGING
it_outtab = Mi_tabla.
EXCEPTIONS
OTHERS = 4.

Muchas gracias

K-MUS
13/10/10, 12:35:09
Hola buenas.

Vereis, necesito hacer un ALV en una screen de una dynpro y no se muy bien como hacerlo.

Me imagino que tengo que crear un "Control Custom" donde insertar mi ALV. El problema es que no se como y donde crear este ALV.

El ALV me imagino que se creará en el PBO. He puesto lo siguiente:

IF my_container IS INITIAL.

CREATE OBJECT my_alv_grid
EXPORTING
i_parent = my_container
EXCEPTIONS
OTHERS = 1.

ENDIF.

Ahora, lo que no se, es donde crear mi catálogo y donde poner lo siguiente:

CALL METHOD my_alv_grid->set_table_for_first_display
EXPORTING
i_structure_name = 'ZTABLA' (Este es el nombre del Custom Controler??)
"is_layout = is_layout
CHANGING
it_outtab = Mi_tabla.
EXCEPTIONS
OTHERS = 4.

Muchas gracias

Busca en google cualquier ejemplo de ALV with OO (object oriented) y vas a encontrar muchos ejemplos.

Marlon21
13/10/10, 15:45:28
Hola te paso un ejemplo de la parte que deseas, cualquier consulta solo escribes, Saludos XD!!


CALL SCREEN 100.

*Aquí creas tu control custom


*En el screen estos son los procesos
PROCESS BEFORE OUTPUT.
MODULE status_0100.
MODULE act_data.
*
PROCESS AFTER INPUT.
MODULE user_command_0100.



MODULE status_0100 OUTPUT.


SET PF-STATUS '0100'. Activas tus button de back canc exit
SET TITLEBAR '0100'. Titulo de tu Reporte

ENDMODULE. " STATUS_0100 OUTPUT





MODULE act_data OUTPUT.

IF go_custom_container IS INITIAL.
CREATE OBJECT go_custom_container
EXPORTING
container_name = gv_container.

ENDIF.

*Top of Page
CREATE OBJECT o_dyndoc_id
EXPORTING
style = 'ALV_GRID'. “Nombre de tu control custom

IF go_grid_data IS INITIAL.
CREATE OBJECT go_splitter
EXPORTING
parent = go_custom_container
rows = 2
columns = 1.

CALL METHOD go_splitter->get_container
EXPORTING
row = 2
column = 1
RECEIVING
container = go_parent_grid.

CREATE OBJECT go_grid_data
EXPORTING
i_parent = go_parent_grid.

*Top of Page
CALL METHOD go_splitter->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = go_parent_top.

*Tamaño top of page
CALL METHOD go_splitter->set_row_height
EXPORTING
id = 1
height = 16.

CREATE OBJECT go_event_receiver.
SET HANDLER go_event_receiver->handle_double_click FOR go_grid_data. “Evento doble click
* SET HANDLER go_event_receiver->handle_data_changed FOR go_grid_data.
SET HANDLER go_event_receiver->handle_top_of_page FOR go_grid_data. “Evento Topo f page

*Excluir Botonera del ALV
PERFORM exclude_button. “Es para excluir botones del alv


ls_layout-sel_mode = 'A'.

wa_disvar_rcr-report = sy-repid.

CALL METHOD go_grid_data->set_table_for_first_display
EXPORTING
is_variant = wa_disvar_rcr
i_save = 'A'
i_default = 'A'
it_toolbar_excluding = gt_exclude
is_layout = ls_layout
CHANGING
it_fieldcatalog = gt_fieldcat
it_outtab = gt_data[].


CALL METHOD go_grid_data->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.

CALL METHOD go_grid_data->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified
EXCEPTIONS
OTHERS = 2.


CALL METHOD o_dyndoc_id->initialize_document
EXPORTING
background_color = cl_dd_area=>col_textarea.

CALL METHOD go_grid_data->list_processing_events
EXPORTING
i_event_name = 'TOP_OF_PAGE'
i_dyndoc_id = o_dyndoc_id.

ELSE.
gt_stable-row = 'X'.
gt_stable-col = 'X'.
CALL METHOD go_grid_data->refresh_table_display
EXPORTING
is_stable = gt_stable
i_soft_refresh = 'X'.
ENDIF.

ENDMODULE.



MODULE user_command_0100 INPUT.
CASE sy-ucomm.
WHEN 'BACK'
OR 'EXIT'
OR 'CANC'.
CLEAR sy-ucomm.
SET SCREEN 0.
LEAVE SCREEN.
ENDCASE.
ENDMODULE.





FORM exclude_button .
DATA: ls_exclude TYPE ui_func.

REFRESH: gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_check.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_mb_variant.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_mb_export.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_info.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_find.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_mb_view.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_sort_asc.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_sort_dsc.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_filter.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_delete_filter.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_refresh.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_undo.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_cut.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste_new_row.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_subtot.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_mb_sum.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_print.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_graph.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_help.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_detail.
APPEND ls_exclude TO gt_exclude.
ENDFORM.

zebalia
14/10/10, 08:58:40
Muchas gracias chicos, con esto voy tirando y en principio parece que todo me funciona :)


Muchas gracias de nuevo