Foro de programacion ABAP
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
. ¿Perdiste tu
email de activación
?
1 Hora
1 Día
1 Semana
1 Mes
Siempre
Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
Los 100 libros mas vendidos de la informática
Inicio
Ayuda
Buscar
Ingresar
Registrarse
Foro de programacion ABAP
»
Código abierto
»
Includes
»
INCLUDE para realizar ALV con Objetos
« anterior
próximo »
Imprimir
Páginas: [
1
]
Ir Abajo
Autor
Tema: INCLUDE para realizar ALV con Objetos (Leído 10461 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Carlos
Usuario Sr.
Mensajes: 177
INCLUDE para realizar ALV con Objetos
«
en:
08 de Julio de 2011, 11:56:54 am »
Aquí dejo un Include para realizar ALV con Objetos
1REP -> Primera llamada en Report (previa a CALL SCREEN).
2REP -> Cambios en la descripción de los campos de la cab. del listado
3REP -> Asignar o quitar la propiedad 'Campo Clave'
1PBO -> Primera llamada en PBO. Container, Status y Título.
2PBO -> Realización de un SPLIT en el listado.
3PBO -> Listado simple.
4PBO -> Picture en un container.
************************************************************************
********************** INCLUDE ZMETODOS ********************************
************************************************************************
*
* Índice
*
* 1REP -> Primera llamada en Report (previa a CALL SCREEN).
* 2REP -> Cambios en la descripción de los campos de la cab. del listado
* 3REP -> Asignar o quitar la propiedad 'Campo Clave'
*
* 1PBO -> Primera llamada en PBO. Container, Status y Título.
* 2PBO -> Realización de un SPLIT en el listado.
* 3PBO -> Listado simple.
* 4PBO -> Picture en un container.
*
*---------------------------------------------------------------------*
* CLASS LCL_EVENT_RECEIVER DEFINITION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
* methods handle_data_changed
* for event data_changed of cl_gui_alv_grid
* importing er_data_changed.
ENDCLASS.
*---------------------------------------------------------------------*
* CLASS lcl_event_receiver IMPLEMENTATION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* class lcl_event_receiver implementation.
*
* method handle_data_changed.
* perform data_changed using er_data_changed.
* endmethod.
*
* endclass.
************************************************************************
* Declaraciones.
************************************************************************
TYPE-POOLS: slis.
DATA: repname LIKE sy-repid.
* Declaraciones generales para métodos.
DATA: go_custom_container TYPE REF TO cl_gui_custom_container,
lo_event_receiver TYPE REF TO lcl_event_receiver,
go_grid_listado TYPE REF TO cl_gui_alv_grid,
g_container_listado TYPE scrfname.
* Declaraciones Layout.
DATA: gs_layout TYPE lvc_s_layo,
gs_variant TYPE disvariant,
gt_fieldcat TYPE lvc_t_fcat,
gt_fieldcat2 TYPE lvc_t_fcat,
gt_sort TYPE lvc_t_sort,
fieldtab TYPE slis_t_fieldcat_alv,
gs_fieldcat TYPE lvc_s_fcat,
gs_fieldtab TYPE slis_fieldcat_alv.
FIELD-SYMBOLS: <fieldcat> TYPE lvc_s_fcat,
<fs> TYPE LVC_S_FCAT.
* Variables para hacer el split del container.
* data: container TYPE REF TO cl_gui_custom_container,
DATA: container_1 TYPE REF TO cl_gui_container,
container_2 TYPE REF TO cl_gui_container,
splitter TYPE REF TO cl_gui_splitter_container.
* Variables para añadir el logo en el listado.
TYPE-POOLS cndp.
DATA: url(132),
query_table LIKE w3query OCCURS 1 WITH HEADER LINE,
html_table LIKE w3html OCCURS 1,
return_code LIKE w3param-ret_code,
content_type LIKE w3param-cont_type,
content_length LIKE w3param-cont_len,
pic_data LIKE w3mime OCCURS 0,
pic_size TYPE i,
picture_1 TYPE REF TO cl_gui_picture,
picture_2 TYPE REF TO cl_gui_picture.
************************************************************************
* Primera llamada en Report (previa a CALL SCREEN). (*)
************************************************************************
FORM 1rep USING p_repname
p_tablename TYPE slis_tabname
indicador.
* Recogida de atributos de todos los campos de la tabla interna.
*
* Importante!!: La tabla interna no se tiene que definir como un data
* referenciado a una estructura type (Si se hace de este modo no
* reconocerá ningún campo). Utilizar siempre:
* Data begin of ..... occurs 0.
* Data end of ......
* No utilizar tampoco: Data: itab type standard table of ...............
*
CLEAR: fieldtab.
REFRESH: fieldtab.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = p_repname
i_internal_tabname = p_tablename
i_inclname = p_repname
CHANGING
ct_fieldcat = fieldtab.
* Asignación de atributos.
* El indicador nos dice si se trata de 1 tabla o de 2 tablas
* principalmente para utilizarlo en un listado tipo SPLIT.
CASE indicador.
WHEN '1'.
CLEAR: gt_fieldcat.
REFRESH: gt_fieldcat.
WHEN '2'.
CLEAR: gt_fieldcat2.
REFRESH: gt_fieldcat2.
ENDCASE.
LOOP AT fieldtab INTO gs_fieldtab.
CLEAR: gs_fieldcat.
gs_fieldcat-fieldname = gs_fieldtab-fieldname.
gs_fieldcat-ref_table = gs_fieldtab-ref_tabname.
gs_fieldcat-outputlen = gs_fieldtab-outputlen.
gs_fieldcat-key = gs_fieldtab-key.
gs_fieldcat-tabname = p_tablename.
gs_fieldcat-scrtext_l = gs_fieldtab-seltext_l.
gs_fieldcat-scrtext_m = gs_fieldtab-seltext_m.
gs_fieldcat-scrtext_s = gs_fieldtab-seltext_s.
gs_fieldcat-coltext = gs_fieldtab-seltext_m.
gs_fieldcat-selddictxt = 'L'.
* gs_fieldcat-edit = gs_fieldtab-edit.
* gs_fieldcat-auto_value = 'X'.
CASE indicador.
WHEN '1'.
APPEND gs_fieldcat TO gt_fieldcat.
WHEN '2'.
APPEND gs_fieldcat TO gt_fieldcat2.
ENDCASE.
ENDLOOP.
ENDFORM.
************************************************************************
* Segunda llamada en Report (previa a CALL SCREEN).
* Cambios en la descripción de los campos de la cabecera del listado.
************************************************************************
FORM 2rep USING var1
pf_fieldname
pf_coltext
pf_scrtext_l
pf_scrtext_m
pf_scrtext_s.
CASE var1.
WHEN '1'.
READ TABLE gt_fieldcat WITH KEY fieldname = pf_fieldname
ASSIGNING <fieldcat>.
WHEN '2'.
READ TABLE gt_fieldcat2 WITH KEY fieldname = pf_fieldname
ASSIGNING <fieldcat>.
ENDCASE.
IF sy-subrc EQ 0.
* Si el cuarto campo vale 'X' entonces todas las descripciones serán
* iguales.
IF pf_scrtext_l = 'X'.
<fieldcat>-scrtext_l = pf_coltext.
<fieldcat>-scrtext_m = pf_coltext.
<fieldcat>-scrtext_s = pf_coltext.
<fieldcat>-coltext = pf_coltext.
ELSE.
<fieldcat>-scrtext_l = pf_scrtext_l.
<fieldcat>-scrtext_m = pf_scrtext_m.
<fieldcat>-scrtext_s = pf_scrtext_s.
<fieldcat>-coltext = pf_coltext.
ENDIF.
ENDIF.
ENDFORM.
************************************************************************
* Tercera llamada en Report (previa a CALL SCREEN).
* Asignar o quitar la propiedad 'Campo Clave'.
************************************************************************
FORM 3rep USING var1 TYPE fieldname
var2 TYPE char1.
* Esta form asigna o quita la propiedad de campo clave. Los campos clave
* aparecen en color azul a la izquierda de la pantalla, y se quedan
* bloqueados sin que se puedan mover.
TRANSLATE var1 TO UPPER CASE.
READ TABLE gt_fieldcat WITH KEY fieldname = var1 ASSIGNING <fs>.
IF sy-subrc EQ 0.
<fs>-key = var2.
ENDIF.
ENDFORM.
************************************************************************
* Primera llamada en PBO. Container, Status y Título. (*)
************************************************************************
FORM 1pbo USING var1 var2 var3.
SET PF-STATUS var2.
SET TITLEBAR var3.
MOVE: var1 TO g_container_listado.
* Refrescamos el container si no estaba vacío.
IF NOT go_custom_container IS INITIAL.
CALL METHOD go_custom_container->free.
ENDIF.
* Creamos el container.
CREATE OBJECT go_custom_container
EXPORTING container_name = g_container_listado.
ENDFORM.
************************************************************************
* Segunda llamada en PBO. (*)
* Realización de un SPLIT en el listado.
* Este form es NO COMPATIBLE con el 3PBO (uno u otro).
************************************************************************
FORM 2pbo TABLES tab1 tab2.
CREATE OBJECT splitter
EXPORTING parent = go_custom_container
rows = 1
columns = 2.
CALL METHOD splitter->get_container
EXPORTING row = 1
column = 1
RECEIVING container = container_1.
CALL METHOD splitter->get_container
EXPORTING row = 1
column = 2
RECEIVING container = container_2.
CREATE OBJECT go_grid_listado
EXPORTING i_parent = container_1.
CREATE OBJECT lo_event_receiver.
CALL METHOD go_grid_listado->register_edit_event
EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_enter.
gs_layout-zebra = 'X'.
gs_layout-cwidth_opt = 'X'.
* gs_layout-ctab_fname = 'COLOR_CELDAS'.
gs_variant-report = repname.
CALL METHOD go_grid_listado->set_table_for_first_display
EXPORTING " i_buffer_active = 'X'
i_save = 'A'
is_variant = gs_variant
is_layout = gs_layout
CHANGING it_fieldcatalog = gt_fieldcat
it_sort = gt_sort
it_outtab = tab1[].
CREATE OBJECT go_grid_listado
EXPORTING i_parent = container_2.
CREATE OBJECT lo_event_receiver.
CALL METHOD go_grid_listado->register_edit_event
EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_enter.
gs_layout-zebra = 'X'.
gs_layout-cwidth_opt = 'X'.
* gs_layout-ctab_fname = 'COLOR_CELDAS'.
gs_variant-report = repname.
CALL METHOD go_grid_listado->set_table_for_first_display
EXPORTING " i_buffer_active = 'X'
i_save = 'A'
is_variant = gs_variant
is_layout = gs_layout
CHANGING it_fieldcatalog = gt_fieldcat2
it_sort = gt_sort
it_outtab = tab2[].
ENDFORM.
************************************************************************
* Tercera llamada en PBO. (*)
* Listado simple.
* Este form es NO COMPATIBLE con el 2PBO (uno u otro).
************************************************************************
FORM 3pbo TABLES tab1.
CREATE OBJECT go_grid_listado
EXPORTING i_parent = go_custom_container.
CREATE OBJECT lo_event_receiver.
CALL METHOD go_grid_listado->register_edit_event
EXPORTING i_event_id = cl_gui_alv_grid=>mc_evt_enter.
gs_layout-zebra = 'X'.
gs_layout-cwidth_opt = 'X'.
* gs_layout-ctab_fname = 'COLOR_CELDAS'.
gs_variant-report = repname.
CALL METHOD go_grid_listado->set_table_for_first_display
EXPORTING " i_buffer_active = 'X'
i_save = 'A'
is_variant = gs_variant
is_layout = gs_layout
CHANGING it_fieldcatalog = gt_fieldcat
it_sort = gt_sort
it_outtab = tab1[].
ENDFORM.
************************************************************************
* Cuarta llamada en PBO.
* *.gif en un container.
*
* Crear la picture en SE38 -> Entorno -> Repository SAP Web ->
* -> Pincho datos Binarios... -> Crear
* Actualizar tb. los tipos MIME si fuera necesario (para añadir *.gif).
* Actualizar tb. el editor MIME para ese tipo si fuera necesario.
*
* Llamar con nombre de la picture creada y con la variable container.
* Ejemplo:
* PERFORM gif_en_container USING 'ZLOGO' go_custom_container.
*
************************************************************************
FORM gif_en_container USING var1 var2.
* Creamos la "picture" correspondiente.
CREATE OBJECT picture_1
EXPORTING parent = var2.
* Extracción de la URL.
REFRESH query_table.
query_table-name = '_OBJECT_ID'.
query_table-value = var1.
APPEND query_table.
CALL FUNCTION 'WWW_GET_MIME_OBJECT'
TABLES
query_string = query_table
html = html_table
mime = pic_data
CHANGING
return_code = return_code
content_type = content_type
content_length = content_length
EXCEPTIONS
object_not_found = 1
parameter_not_found = 2
OTHERS = 3.
IF sy-subrc = 0.
pic_size = content_length.
ENDIF.
CALL FUNCTION 'DP_CREATE_URL'
EXPORTING
type = 'image'
subtype = cndp_sap_tab_unknown
size = pic_size
lifetime = cndp_lifetime_transaction
TABLES
data = pic_data
CHANGING
url = url
EXCEPTIONS
OTHERS = 1.
* Cargamos la imagen en el listado.
CALL METHOD picture_1->load_picture_from_url
EXPORTING url = url.
CALL METHOD cl_gui_cfw=>flush
EXCEPTIONS cntl_system_error = 1
cntl_error = 2.
IF sy-subrc <> 0.
ENDIF.
ENDFORM.
En línea
Imprimir
Páginas: [
1
]
Ir Arriba
« anterior
próximo »
Foro de programacion ABAP
»
Código abierto
»
Includes
»
INCLUDE para realizar ALV con Objetos