PDA

Ver la Versión Completa : call transaction con batch


budista1
20/01/11, 16:47:08
Hola,

estaba haciendo un call transaction con batch previo que va dentro de una función. Veo que va bien al principio, navega a la pantalla y mete los datos pero no ejecuta el f8.
A ver si alguien me puede decir la linia que falta en esté código:
algo tipo así ,creo:
i_bdc_data-fval = '/EE'.



Os paso el código, GRACIAS DE ANTEMANO!!

*Llenamos la tabla
refresh i_bdc_data.
i_bdc_data-program = 'ZN140061'.
i_bdc_data-dynpro = '1000'.
i_bdc_data-dynbegin = 'X'.
append i_bdc_data. clear i_bdc_data.

i_bdc_data-fnam = 'P_NUDRM'.
*obj = P_NUDRM.
i_bdc_data-fval = p_nudrm.
append i_bdc_data. clear i_bdc_data.

i_bdc_data-fnam = 'P_CODOP'.
*obj = P_CODOP.
i_bdc_data-fval = p_drmcodop.
append i_bdc_data. clear i_bdc_data.

i_bdc_data-fnam = 'P_SBCOD'.
*obj = P_SBCOD.
i_bdc_data-fval = p_drmsbcod.
append i_bdc_data. clear i_bdc_data.

i_bdc_data-fval = '/EE'.
append i_bdc_data. clear i_bdc_data.

opt-dismode = 'E'.

call transaction 'ZNG8' using i_bdc_data
mode 'A'
update 'S'.

Tu amo
20/01/11, 17:48:24
¿Es un reporte?
¿Si solo ejecutas la pantalla de seleccion porque mejor no usas la instruccion submit report?

budista1
21/01/11, 06:41:05
En el diseño me ha dicho que lo haga con un call transaction. Está dentro de una función,no un report, solo me queda el pequeño detalle que comenté....

tiggerhippie
21/01/11, 07:34:20
Buenas!!

Cómo has generado el código del batch input? Lo has realizado con la sm35?

kiboqac
21/01/11, 13:31:50
Te falta el OK_CODE; en el ultimo append te falta esto:

i_bdc_data-fnam = 'BDC_OKCODE'.
i_bdc_data-fval = '/EE'.
append i_bdc_data. clear i_bdc_data.

budista1
25/01/11, 07:36:21
Gracias compañero

pero este tema del ok_code que comentas ya lo resolví.
En efecto ahora navega y hace el ok,
pero no se actualizan datos en la base de datos :-(

¿Alguién conoce el motivo?


Saludos abaperos

jarabas
25/01/11, 08:45:41
Has probado con un "COMMIT WORK." o con la función BAPI_TRANSACTION_COMMIT despues de la llamada a la transacción?

Apuntar que deberías comprobar los mensajes de vuelta de la transacción, para controlar posibles errores, aunque con esa tabla y todo, algun batch input te la puede jugar y no devolver error cuando si lo hubo.

La instrucción te quedaría así:
DATA: it_messages TYPE STANDARD TABLE OF bdcmsgcoll.

call transaction 'ZNG8' using i_bdc_data
MESSAGES INTO it_messages
mode 'A'
update 'S'.

y para recuperar el texto explicativo de cada mensaje, ya que sino pueden sonar a chino, sería de la siguiente manera:

data: lw_msgid LIKE sy-msgid,
lw_msgno LIKE sy-msgno,
lw_msgv1 LIKE sy-msgv1,
lw_msgv2 LIKE sy-msgv2,
lw_msgv3 LIKE sy-msgv3,
lw_msgv4 LIKE sy-msgv4.

LOOP AT it_messages INTO gw_messages.

MOVE-CORRESPONDING gw_messages TO gw_mensajes.

lw_msgid = gw_mensajes-msgid.
lw_msgno = gw_mensajes-msgnr.
lw_msgv1 = gw_mensajes-msgv1.
lw_msgv2 = gw_mensajes-msgv2.
lw_msgv3 = gw_mensajes-msgv3.
lw_msgv4 = gw_mensajes-msgv4.

CALL FUNCTION '/SAPTRX/GET_MESSAGE_TEXT'
EXPORTING
msgid = lw_msgid
msgno = lw_msgno
msgv1 = lw_msgv1
msgv2 = lw_msgv2
msgv3 = lw_msgv3
msgv4 = lw_msgv4
IMPORTING
messagetext = lw_respon
EXCEPTIONS
no_message_retrieved = 1
OTHERS = 2.

MOVE: lw_respon TO gw_mensajes-msgv1.

APPEND gw_mensajes TO it_mensajes.
ENDLOOP.


Saludos. Espero te sirva

budista1
25/01/11, 16:50:47
:D Hola compañero,

agradezco mucho tu información.
Hice la gestión de los mensajes de una forma parecida a la tuya.
Aunque de momento solo me puse a mirar los mensajes por debuger.
Ahora entiendo que tengo que procesarlos y meterlos en una tabla de LOG,
verdad?


Saludos abaperos!;)

jarabas
26/01/11, 06:41:57
Deberías mostrar los errores, yo por experiencia digo que los batch son un poco "puñeteros", puede que no te devuelva un E y si haya sucedido un error.

Por cierto con lo que te puse ya te actualiza la base de datos?

Saludos.