ALV’S CON LA CLASE CL_SALV_TABLE

En SAP, cuando queremos desarrollar un programa que muestre un ALV con nuestros datos, tenemos varias formas de hacerlo. Las más habituales suelen ser el empleo de la función ‘REUSE_ALV_GRID_DISPLAY’ o la clase ‘CL_GUI_ALV_GRID’.

En ambos casos, primero deberemos rellenar la tabla con los datos que queramos mostrar y después un ‘catálogo’. El catálogo es una tabla con los campos que queremos que sean mostrados por pantalla y en la que le indicaremos sus características como el título de la columna, su orden para ser mostradas, si debe optimizarse al ser mostrada etc.

Crear este catálogo de campos, puede ser algo costoso y más si el título de nuestras columnas debe ser traducido a diferentes idiomas. Por ello, en el presente artículo hablaremos de esta otra opción para mostrar un ALV, el empleo de la clase CL_SALV_TABLE.

El empleo de esta clase, no requiere de la creación de un catálogo, puesto que el método FACTORY de la clase CL_SALV_TABLE lo infiere de la tabla de datos que le pasamos. Además, no deberemos crear una nueva dynpro en la que deba mostrarse el ALV, con sus consiguientes módulos PBO y PAI ya que también se generan automáticamente en la pantalla en la que nos encontramos. Tampoco será necesario (si opcional) crear un contenedor como recipiente.

Pongamos como ejemplo que queremos mostrar en un ALV los campos carrid, connid, fldate y price de la tabla sflight. Las cabeceras de las columnas del ALV deberán poder mostrarse tanto en castellano como en inglés.

Para ello, empezaremos definiendo nuestra tabla interna que contendrá los datos y posteriormente la rellenaremos con ellos:

En el caso de hacerlo por vía de un objeto tipo CL_GUI_ALV_GRID, tendremos que seguir los típicos pasos necesarios. La declaración de las variables a usar, rellenar el catálogo, crear el contenedor, crear el alv y mostrarlo en la dynpro correspondiente.

Como hemos comentado, queremos mostrar el título de las columnas tanto en castellano como en inglés, por tanto:

En las siguientes líneas, y mediante el empleo de la clase CL_SALV_TABLE, tendremos el mismo resultado:

Solo deberemos llamar al método estático FACTORY exportando la tabla con nuestros resultados (lt_sflight) recibiendo así el objeto tipo CL_SALV_TABLE. Tras ello, solo habrá que llamar al método de instancia DISPLAY de la clase CL_SALV_TABLE para mostrar el ALV.

El resultado será:

Si estuviéramos logeados en inglés, veremos que la traducción de la cabecera de la columna se hará automáticamente:

Como ya hemos dicho anteriormente, esto se debe a que el ALV infiere las características de la tabla de datos que le pasamos, que recordemos que era del tipo:

La cabecera del campo CARRID, por ejemplo, cogerá su título del elemento de datos S_CARR_ID. Esto significa que si utilizamos un elemento de datos primitivo la columna no mostrará el título:

En los casos en los que el elemento de datos deba ser de un tipo primitivo, podremos asignarle nosotros la cabecera manualmente. Para ello, deberemos primero recoger la columna y asignárselo:

Podremos hacerlo más visual por medio de de un estilo ‘cebra’, agregadores numéricos para columnas…

Además, con unas sencillas instrucciones, podremos asignarle diferentes funciones predefinidas o incluso crear las nuestras propias:

El comportamiento del nuevo botón no estándar que hemos añadido (Editar ALV), lo manejaremos con eventos de la clase CL_SALV_EVENTS_TABLE. En este caso, pondremos el ALV a la escucha para que cuando lo pulsemos, las celdas de nuestra tabla se vuelvan editables en su totalidad:

Como hemos podido comprobar, esta manera de crear ALVs es mucho más sencilla y rápida que otras que posiblemente hayamos venido utilizando hasta ahora. Nos evita bastante trabajo y además no perdemos funcionalidad ninguna en comparación con los diferentes métodos.

Esperamos que este artículo te haya servido de ayuda. Si tienes alguna duda puedes dejarla en comentarios o ponerte en contacto con nosotros por teléfono: 945 067 219 o por email: orekait@orekait.com