En del documento anterior analizamos en qué consisten los problemas de actualización asíncrona y evaluamos una forma de solucionarlos mediante la sentencia SET UPDATE TASK LOCAL

En este documento analizaremos el mismo caso, pero ejecutando las tareas de actualización en un proceso que se ejecuta en una sesión aparte, la cual puede ser ejecutada en fondo.

El procedimiento es el siguiente:

Paso 1: Forzar la ejecución de un módulo de función o BAPI en una nueva sesión:


CALL FUNCTION ‘BAPI_OUTB_DELIVERY_CHANGE’

  DESTINATION ‘NONE’

    EXPORTING

      header_data    = ls_header_data

      header_control = ls_header_control

      delivery       = lv_bapi_delivery

    TABLES

      return         = lt_return.



Paso 2: Forzar la actualización de la base de datos en la nueva sesión.


CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’

  DESTINATION ‘NONE’

    EXPORTING wait = ‘X’.



Paso 3: Forzar el cierre de la sesión para que se ejecuten las actualizaciones.


CALL FUNCTION ‘RFC_CONNECTION_CLOSE’

  EXPORTING destination = ‘NONE’

  EXCEPTIONS OTHERS = 0.


Vale la pena aclarar que para este escenario lo que se requiere es que el proceso de actualización se realice en la nueva sesión por lo que es necesario utilizar el módulo de función BAPI_TRANSACTION_COMMIT en lugar de la sentencia  COMMIT WORK AND WAIT.

Una vez se ejecute el módulo de función ‘RFC_CONNECTION_CLOSE’  se ejecutarán todas las actualizaciones y se cerrará la sesión separada.

To report this post you need to login first.

Be the first to leave a comment

You must be Logged on to comment or reply to a post.

Leave a Reply