MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   Problema con funcion IN UPDATE TASK (foro/showthread.php?t=72155)

MetalGod 25/07/14 16:30:23

Problema con funcion IN UPDATE TASK
 
Buenas, quería preguntar si a alguien alguna vez le paso o sabe como resolverlo,

Tengo un EXIT (EXIT_SAPMM06E_013 ) para la creación/modificación de pedidos en ME21N/ME22N al momento de guardar.

Dentro del EXIT llamo a una función CALL FUNCTION nombre IN UPDATE TASK

la idea es que como esta en actualización, primero se hace el COMMIT estándar, se crea el pedido, se llama a la función, y dentro de esta se hacen ciertas validaciones y se llama a la BAPI_PO_CHANGE donde inserto una posición.

La cuestión es que cuando hago que frene en la función de actualización con el debug, el documento se modifica correctamente. Pero si no hago que frene, solo guardo sin hacer debug, no funciona, parece como que a la función ni siquiera la llama.

Alguna idea? Necesito ayuda urgente.

Muchas gracias

vanesamacri 26/07/14 02:03:12

Buenas noches.

En algún momento, tuve el mismo inconveniente que vos. Por debug, el COMMIT se realizaba, mientras que ejecutando online derecho, no.

En ese entonces, investigué un poco acerca de los COMMIT implícitos e explícitos y mediante el uso de una instrucción MESSAGE al momento de querer efectivizar el COMMIT (disparan un tipo de COMMIT denominado 'implícito'), pude lograr lo que estás planteando.

El motivo por el cual el COMMIT funciona cuando hacés debug es porque los COMMIT implícitos se disparan con cada paso ejecutado de debug (por ejemplo, al presionar F5).

En resumen, probá forzando el muestreo de un mensaje en pantalla al momento de finalizar la ejecución de la función.

Adjunto, por si te interesa, un enlace con información acerca de los distintos tipos de COMMIT, y de cómo funcionan:

Espero que te sea de ayuda.

Un saludo.

MetalGod 26/07/14 14:26:08

Muchas gracias por tu respuesta, voy a probar eso, el link que mencionas cual es? pruebo y te comento, fue de gran ayuda la aclaracion

vanesamacri 28/07/14 00:42:03

El link se encuentra haciendo click en la palabra CLICK de mi mensaje.

Ya que estoy, lo escribo acá:

MetalGod 28/07/14 12:13:25

Una consulta sobre la sentencia MESSAGE, igualmente voy a probar.

El problema es que si pongo un MESSAGE en la funcion, esta pasa por un EXIT, y no debo mostrar mensajes, lo que decis funcionara igual que si mando un mensaje dentro de una variable?

MetalGod 28/07/14 12:31:45



No funciono, quieres que adejunte el codigo? puse la sentencia message normar y nada, lo puse dentro de una variable y nada, es como si no entrara directamente a la funcion IN UPDATE TASK al correrlo online, pero por debug si y funciona

Ddscerezo 29/07/14 11:25:55

Es un asunto complejo.

- Puede que no tengas los datos todavía en el sistema (estén aún en memoria intermedia) y por eso no te funcione tu módulo online y sí por debug (al debuguear va más lento el programa y le da tiempo a grabar todos los datos).

Para ver si es por esto, puedes probar a meter un WITde X segundos, para descartar que sea por esto.

- Otra opción es revisar los parámetros del módulo de funciones al que llamas IN UPDATE TASK. y revisar el tipo de sincronización que tiene (creo que tú necesitas que sea síncrona -espere a que acabe la exit para luego ejecutar el módulo-).

Aquí un link con indicaciones al respecto


- Y ahora no lo encuentro por ningún sitio, pero creo que había alguna manera de hacer la llamada y asignarle mínima prioridad para que sea ejecutada en último lugar, del proceso. Por lo que te aseguras tener todos los datos ya en las tablas.

Un saludo.

MetalGod 29/07/14 12:39:31

Hola, muchas gracias por la respuesta, voy a buscar lo que comentas de la prioridad.

Problemas de tiempos no es, ya que he puesto WAIT po varios puntos y hasta un While al hacer la BAPI_PO_CHANGE con un WAIT adentro y no hace abusolutamente nada.

Lo de la prioridad que mencionas puede ser algo que puede funcionar, mientras leo el link que me mostras y hago mas pruebas, espero poder solucionarlo.

Gracias.

Ddscerezo 29/07/14 13:30:06

Creo que lo de la prioridad podía ser algo como ésto:

He encontrado ésto… con perform, no con call…



Es un perform a una subrutina (en la que puedes poner tu call), aunque ten en cuenta las notas para IN UPDATE TASK.

A ver si te vale.

De todas maneras, revisa lo de el tipo de actualización de la función, que es fácil de probar, prueba con las distintas opciones que tienes en los atributos del módulo, a ver si con eso ya te funciona.

Un saludo.

MetalGod 29/07/14 16:12:12

Hola, muchas gracias, creo haber encontrado la solucion, cuando confirme que de verdad funciona correctamente, comparto con ustedes como lo resolvi, muchas gracias, igualmente si alguien tiene mas sugerencias de como resolver el problema, bienvenido sea, muchas gracias, saludos.


Husos Horarios son GMT. La hora en este momento es 15:16:24.

www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web