lunes, 19 de febrero de 2007

Función llamada en UPDATE TASK

Muchas veces tenemos que comprobar en nuestro código ABAP, si nuestro programa se está ejecutando en fondo. Para ello nos valemos de la variable de sistema sy-batch, y de este modo evitamos lanzar cuadros de diálogo cuando un programa se esta ejecutando en fondo, ya que esto provocaría la terminación inmediata de dicho programa con un DUMP breve.

Esto es bien sabido por todos los programadores y raro es el programa que te encuentras que no controle este error; pero muy distinto es el caso de los módulos de funciones que son ejecutados en "UPDATE TASK", es decir, en proceso de actualización.

Cuando se hace una llamada a un módulo de funciones de la siguiente manera:

CALL FUNCTION funcion IN UPDATE TASK

Este módulo de funciones se ejecutará cuando el programa en cuestión este actualizando, básicamente cuando se haga un COMMIT.


En estos casos tampoco está permitido hacer llamadas a cuadros de diálogo, ni llamadas a otras transacciones mediante CALL TRANSACTION. En caso de que dentro de una de estás funciones se haga una llamada de este tipo, el programa terminará de manera inmediata con un DUMP breve.

Para controlar si estamos dentro de una función que haya sido llamada en UPDATE TASK, deberemos añadir un control mediante cualquiera de las dos siguientes fórmulas:

  1. Comprobando que SY-ONCOM <> 'V'.
  2. Con la función TH_IN_UPDATE_TASK.

Por lo tanto y como norma general cada vez que creemos un módulo de funciones que vaya a ser llamado en UPDATE TASK, además de marcarlo como tal en los atributos de dicho módulo de funciones, deberemos comprobar cada vez que vayamos a mostrar un cuadro de diálogo, o un CALL TRANSACTION, que no se haya llamado a dicho módulo de funciones en UPDATE TASK. Así siempre tendremos aislados este tipo de errores.

No hay comentarios: