Tutorial WebDynpro (WD4A): Log de cambios

Es habitual que en una aplicación donde el usuario pueda editar varios valores, cuando se quiera guardar solo se haga en aquellos campos que se hayan modificado. Para ello, WD4A ofrece la utilidad del “Log de Cambios”, que permite saber que atributos del contexto se han modificado en la ejecución del programa.

En este artículo os enseñaremos a utilizar ese “log de cambios” paso por paso.

Lo primero que se debe hacer para utilizarlo es activar dicho log en el controlador donde se quiera utilizar. Para hacerlo se necesita llamar al método ENABLE_CONTEXT_CHANGE_LOG de la clase IF_WD_CONTEXT. Este método solo es necesario llamarlo una vez, y con él ya se podrá utilizar el log.

**Se activa el log de cambios
DATA lo_context TYPE REF TO if_wd_context.
 CALL METHOD wd_context->get_context
 RECEIVING
 context = lo_context.
CALL METHOD lo_context->enable_context_change_log.

Lo más recomendable es poner estas sentencias en el método WDDOINIT, ya que se ejecutará al crearse el controlador y así ya se tiene activado el log desde el principio.

Una vez activado y cuando se quiera saber que elementos del contexto se han modificado, se utiliza el método GET_CONTEXT_CHANGE_LOG de la misma clase que el método anterior. Este método devuelve una tabla de tipo WDR_CONTEXT_CHANGE, que tiene los siguientes campos:

  • NODE_NAME: el nombre del nodo donde se ha realizado el cambio.
  • SEQUENCE: secuencial que indica el orden en el que se ha realizado el cambio.
  • NODE: instancia de tipo IF_WD_CONTEXT_NODE  del nodo donde se ha realizado el cambio.
  • NODE_PATH: ruta del nodo donde se ha realizado el cambio.
  • CHANGE_KIND: carácter de una posición que indica el tipo del cambio:
    • ‘A’: cambio en un atributo del nodo.
    • ‘L’: cambio en el Lead Selection del nodo.
    • ‘S’: cambio en la selección del nodo.
    • ELEMENT_INDEX: el índice del elemento donde se ha realizado el cambio.
    • ATTRIBUTE_NAME: nombre del atributo donde se ha realizado el cambio.
    • OLD_VALUE: valor del atributo antes del cambio.
    • NEW_VALUE: valor del atributo después del cambio.

Estos dos últimos campos son de tipo DATA, con lo que para recoger el valor que guardan habrá que utilizar un field-symbol.

Cuando se quiera conocer los diferentes cambios que se han realizado en el contexto, por ejemplo a la hora de guardar o al hacer alguna comprobación, se recoge la tabla de la siguiente manera:

** Se recoge el log de cambios
 DATA lo_context TYPE REF TO if_wd_context.
 CALL METHOD wd_context->get_context
 RECEIVING
 context = lo_context.
 DATA lt_changes TYPE wdr_context_change_list.
 DATA ls_changes LIKE LINE OF lt_changes.
 CALL METHOD lo_context->get_context_change_log
 RECEIVING
 change_list = lt_changes.

Hay que tener en cuenta, que una vez que se llame al método GET_CONTEXT_CHANGE_LOG, este devuelve los cambios que se han realizado desde la última vez que se llamó a dicho método.  También es preciso saber que este log de cambios sólo afecta a los nodos que se hayan definido en el propio contexto del controlador. Todos los cambios de nodos que estén mapeados de otros contextos no aparecerán en la tabla devuelta por el método.

Esta entrada fue publicada en Formación SAP, SAP, Web Dynpro for Abap. Guarda el enlace permanente.
Si te ha gustado...Compártelo!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *