MUNDOSAP

Regresar   MUNDOSAP > NOTICIAS SAP - ABAP IV > NOTICIAS PRINCIPALES
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Viejo 03/05/06, 09:33:57
Avatar de tracer
tracer tracer is offline
Administrator
 
Fecha de Ingreso: feb 2006
Localización: España (Madrid)
Mensajes: 489
Lightbulb Guardando el Log de un CALL TRANSACTION

Saludos a todos los saperos,


Hoy vamos a adentrarnos en el maravilloso mundo de los CALL TRANSACTION. Seguro que muchos de vosotros os habéis vuelto locos alguna vez intentando hacer legible el log que devuelve la ejecución de un CALL TRANSACTION. Bien pues con este tutorial y un poco de código podréis hacer visible este log en la SLG1

TRANSACCION SLG1

Para los que no conozcais esta transacción comentaros que permite ver los log de la actuación sobre bases de datos de sap. Cuando se realizan actualizaciones a la base de datos, el sistema registra internamente información sobre el resultado de cada grabación (si fue exitosa o no), estadísticas (cantidad de registros ingresados o actualizados, cantidad de registros erróneos, etc), además de datos específicos de la aplicación (código de material ingresado o actualizado, por ejemplo).








GUARDANDO LOS RESULTADOS DEL CALL TRANSACTION EN LA SLG1

Cuando las actualizaciones se llevan a cabo a través del CALL TRANSACTION, esta información NO se hace disponible al usuario en forma automática, sino que, requiere de sentencias adicionales para que quede almacenada en una tabla interna de mensajes. Luego, debe analizarse y procesarse también desde
la programación, para decodificar el formato de la tabla interna en información entendible para el usuario.
Para lograr este objetivo, existen las funciones de “application logging” (registro de mensajes). Desde ya, el “Logging” de aplicaciones como concepto, puede implementarse también en otro tipo de programas.


Mediante la técnica desarrollada en este tip, que discute el caso del CALL TRANSACTION, los logs quedarán asociados a un objeto y “disponibles” para el usuario, para ser consultados en cualquier momento.
Se podrá seleccionar por objeto, fecha, hora, usuario, transacción, nivel de importancia del log, etc, y los mensajes se presentarán en forma amigable a través de semáforos que indican el éxito o fracaso de cada grabación, botones para ordenar, visualizar en detalle, dezplazar la pantalla, seleccionar, etc.


PROCEDIMIENTO:


Antes de acceder al código fuente del programa es necesario crear un objeto en la tabla de objetos del log de aplicación. Para ello, con la transacción SM30, se da de alta una entrada en la tabla BALOBJ, indicando nombre y texto descriptivo. Dicho objeto se utilizará como parámetro principal de los módulos de función invocados.

Dentro del fuente del programa se necesita:

1.-Definir las variables para el manejo de los mensajes y los parámetros de las funciones. Ejemplo:


Código:
data: appl_log_obj like balhdr-object value ’ZOBJ’. "Objeto del log data: appl_log_class_high like balmi-probclass value ’1’. "Clase de problema data: appl_log_class_info like balmi-probclass value ’4’. "Clase de problema data: lognumber like balnri occurs 0 with header line. "Nros de logs data: i_msg like balmi. "Estructura de mensajes y logs(técnicos) data: i_msg_bis like balmi. "Estructura de mensajes y logs(de aplicación) data: msg_error type c value ‘E’. "Tipo de mensaje (Error) data: msg_abort type c value ‘A’. "Tipo de mensaje (Cancelar) data: msg_warning type c value ‘W’. "Tipo de mensaje (Aviso) data: msg_info type c value ‘I’. "Tipo de mensaje (Informativo) data: msg_ok type c value ‘S’. "Tipo de mensaje (Exito) data: rc like sy-subrc. "Código de retorno del Call Transaction

2.-Definir la tabla interna que contendrá los mensajes de la transacción. Ejemplo:

Código:
data: begin of mess_tab occurs 0. include structure bdcmsgcoll. data: end of mess_tab.


3.-Inicializar el log:


Esta función se invoca por única vez, al iniciar el ciclo que llena la tabla BDC. Verifica que el objeto o subobjeto exista y borra todos los datos existentes asociados:

Código:
... call function 'APPL_LOG_INIT' exporting object = appl_log_obj * subobject = ´ ´ * log_handle = ´ ´ exceptions object_not_found = 1 subobect_not_found = 2 others = 3. ...

4. - Grabar el log:

Se completan las estructuras que se pasan como parámetros de la función, recorriendo la tabla interna de mensajes . También pueden armarse mensajes propios con datos específicos de la aplicación.
Esta función se invoca después de ejecutar el comando CALL TRANSACTION; se graba un mensaje y si no existe ninguna entrada para ese objeto, ésta es creada. Si no se especifica objeto o subobjeto, se asume el que
se usó más recientemente. Ejemplo:

Código:
... call transaction ´Mxxx´ using bdc_tab mode ´N´ update ´S´ messages into mess_tab. rc = sy-subrc. perform grabar_log using rc {zvar1} {zvar2}. ... form grabar_log using status {zvar1} {zvar2}. clear: i_msg, i_msg_bis. if status ne 0. * Mensaje de error: loop at mess_tab. move-corresponding mess_tab to i_msg. i_msg-msgno = mess_tab-msgnr. i_msg-msgty = msg_error. i_msg-probclass = appl_log_class_high. endloop. * Se completa el segundo renglón del log con datos específicos de la aplicación: i_msg_bis-msgty = msg_error. i_msg_bis-probclass = appl_log_class_high. i_msg_bis-msgid = `{Zidmens1}`. i_msg_bis-msgno = `999`. i_msg_bis-msgv1 = {zvar1}. i_msg_bis-msgv2 = {zvar2}. else. * Mensaje de éxito: i_msg-msgty = msg_ok. i_msg-msgid = `{Zidmens2}`. i_msg-msgno = `nnn`. i_msg-msgv1 = {zvar1}. i_msg-msgv2 = {zvar2}. endif.


5.- Finalizar el log:

Esta función se invoca por única vez, al terminar el ciclo que llena la tabla BDC. Graba todos los datos del objeto o subobjeto y si el log es nuevo, el número de log es devuelto al programa llamador:

Código:
... refresh lognumber. call function 'APPL_LOG_WRITE_DB' exporting object = appl_log_obj * subobject = ´ ´ tables object_with_lognumber = lognumber exceptions object_not_found = 1 subobject_not_found = 2 internal_error = 3 others = 4. ...


Bueno espero que os sea de utilidad.
Un saludo.
__________________
Si precisas una mano, recuerda que yo tengo dos.

Úlima edición por tracer fecha: 03/05/06 a las 09:36:14.
Responder Con Cita
  #2  
Viejo 21/11/07, 02:30:40
urjose urjose is offline
Junior Member
 
Fecha de Ingreso: jul 2006
Mensajes: 8
Hola,

Colgandome un poco de este tema, como puedo saber si una transacción termino satisfactoriamente?

Es decir esta tabla de mensajes regresa muchos registros tipo W, S, E, etc.
Pero el hecho de que en la tabla venga un S no quiere decir que termino satisfactoriamente.

Cual sería la forma correcta de validar que el Call Trans. se ejecuto con normalidad?

Saludos
Responder Con Cita
  #3  
Viejo 21/11/07, 08:26:58
Avatar de robert_milan
robert_milan robert_milan is offline
Senior Member
 
Fecha de Ingreso: jun 2006
Localización: Mexico, DF
Mensajes: 315
Hola urjose;

ps lo mas correcto seria que no tuviera ningun tipo E.

bueno desde mi punto de vista
Responder Con Cita
  #4  
Viejo 13/04/09, 23:12:31
jorgeaguilarv jorgeaguilarv is offline
Junior Member
 
Fecha de Ingreso: oct 2007
Mensajes: 6
Call Transaction

Que tal como estan me parece muy bien tu ejemplo pero tengo una duda quiero usar el CALL TRANSACTION pero solo para mostrar otra pantalla de otro programa como puedo hacer para mostrar valores a esa pantalla que quiero llamar.

Saludos.
Responder Con Cita
  #5  
Viejo 28/01/11, 19:48:53
Avatar de AlvarOtero
AlvarOtero AlvarOtero is offline
Junior Member
 
Fecha de Ingreso: ene 2011
Localización: Colombia
Mensajes: 9
Hola ayuda porfavor

Mi problema es el siguiente: Diariamente el area financiarea genera muchas facturas sobre muchas cosas, estas facturas estan relacionadas con la tabla transparente VBRK en la cual existem muchos campos, en especial 3, Fecha de creacion de factura, numero de factura y usuario que crea la faptura. Por ultimo estas facturas se muestran en uncomrpobante a los 20 - 30 dias de creadas las facturas, donde se imprimen y se archivan. Resulta que el requerimiento consiste en poner en algun lugar del comprobante (cosa que ya solucioné) el "terminal - pc - computador etc" desde el cual se CREÒ LA FACTURA, eh buscado por muchos lados sobre còmo obtener el terminal y eh encontrado muchas funciones que me retornan el terminal de un usuario conectado en el momento de uso de la funciòn, es decir, ninguna funciòn me retorna que terminal estaba usando un usuario hace 10 días por ejemplo......y como las facturas tiene mas de 20 dias de creadas no me sirven esas funciones al momento de consultar el terminal ya que un usuario que creó la factura el dia 20/01/2011 puede ser que se encuentre en un terminal distinto el dia 31/01/2011...día de la impresion del comprobante.....
Despues de tanto buscar encontre una transacción de auditoria (SM20) que ne genera un reporte segun un rango de fecha de los usuarios, transacciones terminales, usados en esas fechas, pero mi problema radica que la transaccion genera un log al cual no puedo acceder.......buscando auqi en mundosap encontre un post de usted que explicaba algo parecido a lo que necesito, asi que queria preguntarte si puedes ayudarme con este tema.......es simple, ejecutar la sm20 y guardar el resultado de esa transaccion en una tabla intera, con eso se me solucionaría la vida jejeje o encontrar en que tabla transparente se guarda un registro de varios dias sobre los ingresos de usuarios con todo y terminal...
Responder Con Cita
  #6  
Viejo 04/08/11, 07:37:27
jarabas jarabas is offline
Senior Member
 
Fecha de Ingreso: ene 2010
Mensajes: 109
Cita:
Originalmente Escrito por robert_milan
Hola urjose;

ps lo mas correcto seria que no tuviera ningun tipo E.

bueno desde mi punto de vista


Buenos días, yo también comprobaría el sy-subrc cuando hay errores suele ser sy-subrc = '1001'.

Saludos.
Responder Con Cita
  #7  
Viejo 02/02/12, 10:03:33
rubencb28 rubencb28 is offline
Junior Member
 
Fecha de Ingreso: feb 2012
Mensajes: 2
Gracias solucionado con sy-subrc = '1001'
__________________
SAP
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

El código vB está On
Las caritas están On
Código [IMG] está On
Código HTML está On
Saltar a Foro


Husos Horarios son GMT. La hora en este momento es 18:55:09.


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