miércoles, 23 de marzo de 2011

Eventos en Table Maintenance Dialog - SAP

Una vez creada la vista de actualización de la tabla, pordemos ver que la misma trabaja con un table control. Para saber el nombre del module pool creado automáticamente con el cual va a trabajar la dynpro que contiene a dicho table control:

1)      Desde la transacción SE11, donde creamos la tabla Z, vamos a utilities à Table Maintenance Generator.

2)      Una vez aquí, hacemos clic sobre el botón “Fn.Gr.Text” y luego en el botón “Main Program”. Esto nos llevará al programa donde se gestiona nuestra vista de actualización que no es más que un programa de tipo module pool con dynpros asociadas.
Ahora bien, si es una dynpro podemos customizarla como queremos? Hay cosas que sí y otras no… podemos deshabilitar campos para la edición, cambiar anchos de columnas, etc… pero con la gestión de los datos con los que va a trabajar el table control, puedo hacer algo?
Sí, para eso se pensaron los eventos.
3)      Los eventos permiten crear programas propios, z,  que sustituyan  las funciones estándares que usa el table control (ya que las mismas no se pueden tocar porque son estándares justamente). Environment à Modification à Events.


4)      Seleccionamos un evento de todos los posibles y le damos un nombre a nuestro form, donde vamos a meter la lógica, en este ejemplo para recuperar datos:
Eventos posibles:
Event
Short Text
1
Before saving the data in the database
2
After saving the data in the database
3
Before deleting the data displayed
4
After deleting the data displayed
5
Creating a new entry
6
After completely performing the function 'Get original'
7
Before correcting the contents of a selected field
8
After correcting the contents of a selected field
9
After getting the original of an entry
10
After creating the header entries for the change task (E071)
11
After changing a key entry for the change task (E071K)
12
After changing the key entries for the change task (E071K)
13
Exit editing (exit main function module)
14
After lock/unlock in the main function module
15
Before retrieving deleted entries
16
After retrieving deleted entries
17
Do not use. Before print: Event 26
18
After checking whether the data has changed
19
After initializing global variables, field symbols, etc.
20
after input in date subscreen (time-dep. tab./views)
21
Fill hidden fields
22
Go to long text maintenance for other languages
23
Before calling address maintenence screen
24
After restricting an entry (time-dep. tab./views)
25
Individual authorization checks
26
Before creating a list
27
After creation or copying a GUID (not a key field)
28
After entering a date restriction for time-dep. views
AA
Instead of the standard data read routine
AB
Instead of the standard database change routine
AC
Instead of the standard 'Get original' routine
AD
Instead of the standard RO field read routine
AE
Instead of standard positioning coding
AF
Instead of reading texts in other languages
AG
Instead of 'Get original' for texts in other languages
AH
Instead of DB change for texts in other languages
ST
GUI menu main program name
AI
Internal use only

5)      Luego, clic sobre el boton:
Creamos un nuevo include, donde van a ir nuestros forms:

                Nota: Acuerdense de ir activando siempre todo!!!
Lo que podemos hacer, para que no quede inconsistente, es copiar la función original y modificar a nuestro gusto el código. Igualmente si se animan, se puede hacer desde cero.
6)      Entonces entramos  a través de la transacción SE38 al programa que vimos en el punto 2. Por lo general el formato del nombre del programa es SAPL[Nombre_de_tabla]. Para este ejemplo SAPLZXX_DEMO.
7)      Una vez dentro del código, buscamos el include L[Nombre_de_tabla]F00 (para este ejemplo LZXX_DEMOF00), que es el que contiene los subprogramas. Dentro de este include veremos otro, LSVIMFTX, igresamos también y aquí vemos todos los programas estándares de manejo de los datos. Buscamos y copiamos el Form TABLE_GET_DATA que es el que nos interesa, y volvemos a nuestro include (LZXX_DEMOF01), y lo pegamos aquí.
Hay que tener cuidado en como trabajamos con este código, ya que al ser standard se maneja mucho con field symbols que no sabremos que traen hasta el momento de la ejecución.
8)      Una vez copiado el código, buscamos dentro de él dónde se realizan los SELECT a la base de datos y modificamos, por ejemplo agregado un where para filtrar los datos obtenidos:

De esta forma cuando se ejecute la vista de actualización de la tabla, los valores aparecerán filtrados, en este caso, se verán solo los registro cuyo campo ZDATE contenga fechas mayores a la fecha actual.

1 comentario:

  1. A mi me da error al ejecutarlo por la sm30.lo único que yo debo validar una clase de documento y lo hice directo en el editor del evento. Active y ahora error.podriàs ayudarme

    ResponderEliminar