PDA

Ver la Versión Completa : Funcion en Background


Tute.360
07/12/10, 17:54:39
Tengo un gran problema con una funcion que tengo que crear. Paso a explicar:

Mi funcion se debe ejecutar en modo Background. Lo que hace es agregar deliveries a un determinado shipment (se crea una sales order, luego el delivery y se agrega) mediante la funcion BAPI_SHIPMENT_CHANGE. El tema es que durante todo el proceso de background, si el shipment esta en modo edicion en otra screen (VT02N), no me permite agregar el delivery porque esta tomado por otro usuario.
Con este escenario, se me ocurrio lockear el shipment antes de entrar a la funcion, y antes de ejecutar la BAPI, deslockearlo.

Si lo corro de manera normal, funciona de maravillas: me bloquea el shipment, lo desbloquea, ejecuto la funcion y anda de manera correcta.

El tema es que en background, no lo puedo hacer funcionar y no entiendo el motivo... Hasta llegue a usar un WAIT UP TO 3 SECONDS y nada...

Este es mi codigo:

* Shipment Lock
CALL FUNCTION 'ENQUEUE_/PCM2/E_TKNUM'
EXPORTING
tknum = <l_wa_shipments>-shpmnum_ob
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.

* Call Background FM
CALL FUNCTION '/SCL/OTC_LOT_UNDO'
IN BACKGROUND TASK DESTINATION 'NONE'
EXPORTING
im_t_shipments = l_i_aux
im_planid = v_plan_id.

(inside FM)

* Unlock Shipment
CALL FUNCTION 'DEQUEUE_/PCM2/E_TKNUM'
EXPORTING
tknum = fp_l_v_tknum.
WAIT UP TO 3 SECONDS.

* Call BAPI
CALL FUNCTION 'BAPI_SHIPMENT_CHANGE'
EXPORTING
headerdata = l_wa_headerdata
headerdataaction = l_wa_headerdataaction
TABLES
itemdata = l_i_itemdata
itemdataaction = l_i_itemdataaction
return = l_i_return.

Alguien me puede guiar?