La clase CL_SALV_TABLE es una aproximación basada en el paradigma de la programación orienta objetos para el desarrollo de listados ALV en aplicaciones SAP. La clase CL_SALV_TABLE forma parte del modelo basado en objetos para ALV ( ALV Object Model ) que agrupa diferentes clases globales para la implementación de listados ALV y que esta incluido a partir de la versión 6.40 de SAP.
CL_SALV_TABLE se utiliza para crear listados ALV de dos dimensiones y con un estilo de hoja de calculo de forma fácil y rápida en nuestras aplicaciones ABAP.
La única limitación de esta clase es que no existe ningún método para crear ALV editables.
CL_SALV_TABLE se utiliza para crear listados ALV de dos dimensiones y con un estilo de hoja de calculo de forma fácil y rápida en nuestras aplicaciones ABAP.
La única limitación de esta clase es que no existe ningún método para crear ALV editables.
Para crear la instancia de la clase CL_SALV_TABLE invocamos a su método FACTORY.
Una vez creado, para mostrar por pantalla el ALV por primera vez invocamos el método DISPLAY
Para refrescar los datos del ALV en la pantalla, invocamos al método REFRESH
Podeis visualizar sus atributos y métodos desde la transacción SE24.
CL_SALV_TABLE a pantalla completa:
En el siguiente ejemplo, implementamos un ALV a pantalla completa utilizando la clase CL_SALV_TABLE.
*&---------------------------------------------------------------------* *& Report: ZZCL_SALV_TABLE_FULL_SCREEN *& Fecha : 29.07.2015 *& Autor : David Rueda Barrón *&---------------------------------------------------------------------* *& Creacion de ALV a pantalla completa con la clase CL_SALV_TABLE *&---------------------------------------------------------------------* REPORT ZZCL_SALV_TABLE_FULL_SCREEN. TYPES: BEGIN OF type_matnr, matnr type mara-matnr, maktx type makt-maktx, MTART type mara-MTART, MATKL type mara-matkl, MEINS type mara-MEINS, END OF type_matnr. DATA: ti_mara type STANDARD TABLE OF type_matnr. DATA gr_table type ref to cl_salv_table. "instancia de la clase DATA cx_salv TYPE REF TO cx_salv_msg. DATA gr_msg TYPE string. *&---------------------------------------------------------------------* *& START-OF-SELECTION *&---------------------------------------------------------------------* START-OF-SELECTION. SELECT m~matnr t~maktx m~mtart m~matkl m~meins INTO CORRESPONDING FIELDS OF TABLE ti_mara FROM mara as m INNER JOIN makt as t ON m~matnr EQ t~matnr AND t~spras EQ sy-langu. try. cl_salv_table=>factory( importing r_salv_table = gr_table changing t_table = ti_mara ). catch cx_salv_msg INTO cx_salv. * gestionamos las excepciones que puedan suceder gr_msg = cx_salv->get_text( ). MESSAGE gr_msg TYPE 'E'. endtry. gr_table->display( ).
CL_SALV_TABLE a pantalla completa |
CL_SALV_TABLE dentro de una dynpro:
En el siguiente ejemplo, implementamos un ALV dentro de un objeto contenedor para que pueda ser visualizado en una dynpro de una aplicación ABAP de tipo modul pool.
Como hemos comentado, en este caso, el ALV va ha estar contenido en una dynpro.
El programa principal se encargara de rellenar la tabla interna y llamar a la dynpro.
*&---------------------------------------------------------------------* *& Report: ZZCL_SALV_TABLE_DYNPRO *& Fecha : 29.07.2015 *& Autor : David Rueda Barrón *&---------------------------------------------------------------------* *& Creación de ALV dentro de Dynpro con la clase CL_SALV_TABLEDATA ti_mara type STANDARD TABLE OF type_matnr.*&---------------------------------------------------------------------* REPORT ZZCL_SALV_TABLE_DYNPRO. TYPES: BEGIN OF type_matnr, matnr type mara-matnr, maktx type makt-maktx, MTART type mara-MTART, MATKL type mara-matkl, MEINS type mara-MEINS, END OF type_matnr.
DATA ok_code type sy-ucomm.
DATA gr_table TYPE REF TO cl_salv_table. "instancia de la clase
DATA gr_container TYPE REF TO cl_gui_custom_container. DATA cx_salv TYPE REF TO cx_salv_msg. DATA gr_msg TYPE string. *&---------------------------------------------------------------------* *& START-OF-SELECTION *&---------------------------------------------------------------------* START-OF-SELECTION. SELECT m~matnr t~maktx m~mtart m~matkl m~meins INTO CORRESPONDING FIELDS OF TABLE ti_mara FROM mara as m INNER JOIN makt as t ON m~matnr EQ t~matnr AND t~spras EQ sy-langu. CALL SCREEN 4001.
Para crear la dynpro, tenéis que hacer doble click sobre el número de dynpro 4001.
Doble click sobre el número de dynpro para crearla |
Como cualquier dynpro, lo primero es introducir una descripción, el resto de campos los dejamos como están, no hace falta modificarlos para esta prueba .
descripción de la dynpro |
En la pestaña Lista Elementos, escribimos OK_CODE en la única celda que hay editable.
Nota: OK_CODE es una variable global del programa principal de tipo SY-UCOMM.
OK_CODE para recoger el código de función de cada evento de la dynpro |
Después hay que implementar los módulos STATUS y USER_COMMAND en la pestaña Lóg. proceso.
1. Descomentamos la linea de MODULE STATUS_4001
2. Doble click sobre nombre del modulo STATUS_4001 para crearlo.
3. Guardamos el nuevo modulo en el include ZZCL_SALV_TABLE_DYNPRO_PBO
4. Descomentamos la linea de código que empieza por SET_STATUS....
5. Sustituimos las XXXXXXX por el nombre de nuestro status, por ejemplo: ZZSTATUS_4001
6. Doble click sobre el nombre del status y creamos un nuevo Status diálogo.
7. Desplegar la sección Teclas de función.
8. En los siguientes iconos, escribimos los siguientes códigos de funciones:
Códigos de funciones para el status de la dynpro 4001 |
Lo siguiente es implementar el modulo USER_COMMAND_4001:
1. Descomentamos la instrucción MODULE USER_COMMAND_4001.
2. Doble click sobre nombre del modulo USER_COMMAND_4001 para crearlo.
3. Guardamos el nuevo modulo en el include ZZCL_SALV_TABLE_DYNPRO_PAI
Crear el modulo USER_COMMAND_4001 |
4. Dentro del modulo USER_COMMAND_4001 colocamos el siguiente código:
DATA wl_command TYPE sy-ucomm. wl_command = ok_code. clear ok_code. CASE wl_command. WHEN 'BACK' OR 'EXIT' OR 'CANCEL'. SET SCREEN 0. LEAVE SCREEN. ENDCASE.
Activamos todos los includes , la dynpro 4001 y el status ZZSTATUS_4001.
Con esto ya tenemos creada una dynpro y las funcione para poder cerrarla.
Ahora toca incrustar en ella nuestro ALV de la clase CL_SALV_TABLE.
1. Volvemos ala dynpro 4001 y pulsamos el boton LAYOUT en la barra de herramientas.
2. Dibujamos un objeto contenedor en la dypro, le damos el nombre de ZCONTENEDOR_ALV.
3. Activamos y cerramos el editor de Dynpros
Añadimos un contenedor a la dynpro 4001 |
4.Creamos un nuevo modulo en la sección PROCESS BEFORE OUTPUT de la dynpro 4001.
Guardamos el modulo en el include ZZCL_SALV_TABLE_DYNPRO_PBO
nuevo modulo PBO - SET_ALV |
if ( gr_container is not bound ). * Si es la primera vez, instancia las clases y muestra los datos de la tabla create object gr_container exporting container_name = 'ZCONTENEDOR_ALV' exceptions cntl_error = 1 cntl_system_error = 2 create_error = 3 lifetime_error = 4 lifetime_dynpro_dynpro_link = 5 others = 6. if ( sy-subrc <> 0 ). message id sy-msgid type sy-msgty number sy-msgno with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. endif. cl_salv_table=>factory( exporting r_container = gr_container list_display = ' ' importing r_salv_table = gr_table changing t_table = ti_mara ). gr_table->display( ). else. * Si ya estan instanciadas las clases, pues refrescamso los datos de la pantalla gr_table->refresh( ). endif.
Activamos todos los includes, dynpros y status.
Ejecutamos para ver el resultado
ALV con CL_SALV_TABLE dentro de una dynpro |
En resumen, la clase CL_SALV_TABLE reduce el código que necesitamos para crear listados ALV por pantalla pero no podemos crear ALV editables..
Entradas siguientes:
Clase CL_SALV_TABLE: Modificar atributos de las columnas
I have read your information and your suggestions that you have shared with us. You made a good site and giving us such a great information. Thanks for sharing the best and useful tips they very nice and very help us.
ResponderEliminarsap fico sap training in hyderabad with placement