Tema: Log Display
Ver Mensaje Individual
  #2  
Viejo 22/06/11, 17:45:25
temaljose temaljose is offline
Senior Member
 
Fecha de Ingreso: oct 2007
Mensajes: 203

Buenas, compañero, revisa, la siguiente informacion, alli tienes un programa ejemplo, saludos espero te ayude
|---------------------------------------------------------------------|
| ¿Cómo se pueden recopilar mensajes? |
|---------------------------------------------------------------------|

Resumen
======================================================================
Aquí se exponen varios métodos para recopilar mensajes mediante el log de aplicación.

Módulos de funciones:
BAL_LOG_CREATE Crear log con cabecera
BAL_LOG_MSG_ADD Añadir mensajes al log
BAL_LOG_EXCEPTION_ADD Añadir excepción al log
BAL_LOG_MSG_CUMULATE Añadir mensajes al log acumulándolos
BAL_LOG_MSG_REPLACE Sustituir el último mensaje
BAL_GLB_MSG_CURRENT_HANDLE_GET Proporcionar el programa para control de mensajes
BAL_LOG_MSG_DELETE Borrar mensajes
BAL_LOG_EXCEPTION_DELETE Borrar excepción
BAL_LOG_MSG_CHANGE Modificar mensajes
BAL_LOG_EXCEPTION_CHANGE Modificar excepción
BAL_GLB_MSG_DEFAULTS_GET Asignaciones previas para traer datos de mensajes
BAL_GLB_MSG_DEFAULTS_SET Asignaciones previas para fijar datos de mensajes

Tipos
BAL_S_MDEF Asignanciones previas para mensajes

Programa de ejemplo
El report SBAL_DEMO_02 simula la verificación de un vuelo. Se da salida a un log, en el que se ven los resultados de la verificación.
==>ejecutar SBAL_DEMO_02 ==>coding SBAL_DEMO_02


Añadir mensajes al protocol
=======================================================================
Esta es la forma habitual de colocar mensajes en un log. Mediante BAL_LOG_MSG_ADD se puede, fácilmente, anexar un mensaje a un log.

==>Nota
Al indicar el programa para control del log en los módulos de funciones como BAL_LOG_MSG_ADD, BAL_LOG_MSG_CUMULATE, BAL_LOG_MSG_ADD_FREE_TEXT, etc. es opcional.
Si no se indica se toma el log por defecto. Éste puede indicarse mediante BAL_GLB_MSG_DEFAULTS_SET (junto con otros datos por defecto). Si no se ha definido un log por defecto, se fija automáticamente mediante BAL_LOG_CREATE (para más información, haga clic aquí).


Añadir mensajes acumulándolos
=======================================================================
Funciones
Un mensaje se acumula con un log identificado por I_LOG_HANDLE ( programa para control de datos).

Los datos de un mensaje se indican mediante el parámetro IMPORTING I_S_MSG (estructura BAL_S_MSG).

Mediante E_S_MSG_HANDLE se obtiene un programa para control de mensajes que identifica el mensaje de forma unívoca.

¿Qué significa "acumular"?
Algunos mensajes deben aparecer varias veces durante la ejecución de un programa sin que estas apariciones aporten informaciones nuevas. Para no cargar la memoria principal de forma innecesaria, algunos de estos pueden acumularse mediante BAL_LOG_MSG_CUMULATE. Si algunos mensajes del mismo tipo se emiten de forma repetida, no se vuelve a crear el mismo, sino que el contador MSG_COUNT las va sumando.
Lo que significa "del mismo tipo" lo puede definir en el módulo de funciones. Los datos T100 deben ser idénticos en todo caso. Si lo desea, puede definir que otros datos deban ser iguales:

I_COMPARE_ATTRIBUTES = "X"
Los atributos de mensaje restantes (clase de problema PROBCLASS, nivel de detalle DETLEVEL y campo de clasificación ALSORT) deben ser iguales.
I_COMPARE_CONTEXT = "X"
También el contexto debe ser igual.
I_COMPARE_PARAMETERS = 'X'
También los parámetros del mensaje deben ser igual.
Para encontrar un mensaje del mismo tipo lo más rápido posible durante la acumulación, el log de aplicación crea una pequeña tabla índice que contiene una signatura unívoca de un mensaje. Este índice sólo se elabora cuando se utilizar la función de acumulación.


Sustituir el último mensaje
=======================================================================
Funciones
El último mensaje situado en el log de aplicación se borra y un nuevo mensaje lo sustituye.

Los datos del nuevo mensaje se indican mediante el parámetro IMPORTING I_S_MSG (estructura BAL_S_MSG). Mediante E_S_MSG_HANDLE obtiene un programa para control de mensajes que identifica el nuevo mensaje unívocamente.

¿En qué log se sitúa el nuevo mensaje?
Si no indica ningún programa para control de logs mediante I_LOG_HANDLE, entonces se sitúa en el mismo log en el que estaba el mensaje borrado.
En caso contrario, el mensaje se coloca en el log identificado por I_LOG_HANDLE.
Si no hay mensaje antiguo y no se indica ningún log mediante I_LOG_HANDLE, entonces se añade al log por defecto (para más detalles haga clic aquí).
¿Para qué sustituir el último mensaje?
A veces, uno desea controlar un mensaje emitido al log de aplicación por un programa externo mediante un mensaje propio. Mediante el módulo de funciones BAL_LOG_MSG_REPLACE puede realizar esto.

Ejemplo
Un módulo de funciones genérico para la programación se llama para calcular los horarios de un vuelo. Si la programación no tiene éxito podría emitirse un mensaje a través de un módulo de funciones que dijera: "Programación para el proceso 0006 no concluida con éxito". Dado que los mensajes siempre deben registrarse en el log en el lugar donde se crean, este módulo escribe un mensaje en el log de aplicación. Para el usuario, sin embargo, sería mas útil si el mensaje dijera: "La planificación de horarios para el vuelo entre Hamburgo y Nueva York no se ha realizado correctamente".

==>Nota
El programa para control del último mensaje puede también obtenerse mediante BAL_GLB_MSG_CURRENT_HANDLE_GET. Esto puede utilizarse si no desea sobreescribir el último mensaje escrito, sino borrarlo (mediante BAL_LOG_MSG_DELETE) o modificarlo ( BAL_LOG_MSG_CHANGE).


Mensaje como texto libre
=======================================================================
Funciones
Un mensaje de texto libre se añade con un log identificado con I_LOG_HANDLE ( programa para control de logs).

El texto del mensaje se indica al módulo de funciones BAL_LOG_MSG_ADD_FREE_TEXT mediante el parámetro IMPORTING I_TEXT (longitud máxima 200 caracteres).

La gravedad del error (I_MSGTY) y (opcionalmente) la clase de problema (I_PROBCLASS) también pueden indicarse.

Mediante E_S_MSG_HANDLE se obtiene un programa para control de mensajes que identifica los mensajes de forma unívoca.


Asignaciones previas para colocar mensajes
=======================================================================
Algunas informaciones que podrían ser importantes para entender un mensaje, no suelen identificarse en el lugar en el que aparecen sino en un nivel superior del programa.

Ejemplo
En una rutina muy inferior se comprueba si se ha indicado el destino para un transporte con camión. En este nivel, no se conoce ni el número de transporte ni el tramo parcial para los que se debe ejecutar.

Para que los mensajes emitidos por esta rutina contengan las informaciones de contexto adecuadas, pueden asignarse previamente antes de que se llame esta rutina (fijar por defecto).
Esto ocurre mediante BAL_GLB_MSG_DEFAULTS_SET. A este módulo de funciones se transmite el tipo de dato BAL_S_MDEF, que, además del contexto, contiene otros datos (como atributos de mensaje, parámetros, log por defecto, etc.).
Se puede acceder a las asignaciones previas actuales mediante BAL_GLB_MSG_DEFAULTS_GET. Esto es importante, sobre todo, si no desea detirmanarlas nuevamente por completo, sino sólo modificar distintos aspectos (p.ej., el número de posición del contexto, pero no el número de orden).

==>Nota
Siempre es aconsejable utilizar los módulos de funciones BAL_GLB_MSG_DEFAULTS_GET y BAL_GLB_MSG_DEFAULTS_SET combinándolos, dado que uno no puede estar seguro de qué asignaciones previas están fijadas para un determinado momento.
Las asignaciones previas afectan a los módulos de funciones siguientes:
BAL_LOG_MSG_ADD Añadir mensaje a un log
BAL_LOG_EXCEPTION_ADD Añadir excepción a un log
BAL_LOG_MSG_CUMULATE Acumular mensaje
BAL_LOG_MSG_REPLACE Sustituir el último mensaje
BAL_LOG_MSG_ADD_FREE_TEXT Añadir mensaje como texto libre


Mensajes con contextos complejos
=======================================================================

A veces, puede desear añadir otras informaciones mucho más complejas al mensaje (o a la cabecera de log), como puede hacerse a partir de un contexto o de parámetros.
Para ello, el log de aplicación le proporciona un tipo de tabla INDX,
que puede utilizarse mediante los comandos ABAP
EXPORT TO DATABASE y IMPORT FROM DATABASE.
El report SBAL_DEMO_06 muestra cómo pueden guardarse o leerse contextos complejos. Esto puede realizarse como sigue:

Recopilar mensajes:
Para una cabecera de log o un mensaje debe definirse una rutina CALLBACK (...-PARAMS-CALLBACK-...)
Asimismo, deberán recopilarse las informaciones de contexto en tablas internas del programa de llamada.
Grabar logs:
En este evento, debe continuarse escribiendo las tablas mediante EXPORT my_data TO DATABASE bal_indx(al) ID lognumber.. El número de log interno se obtiene del módulo de funciones BAL_DB_SAVE.
Visualización log:
Si en la visualización de log se selecciona detallar un mensaje o una cabecera de log, entonces se ejecuta la rutina CALLBACK al recopilar.
Aquí se pueden leer y presentar los datos mediante
EXPORT my_data FROM DATABASE bal_indx(al) ID lognumber.
El número de log interno LOGNUMBER está en esta rutina Callback interna transmitida (en PARAM = "%LOGNUMBER").
Borrar logs
Aquí no debe realizarse nada por parte de la aplicación. Los datos se borran automáticamente.
==>Nota
La información de contextos complejos debe utilizarse con precauciones. Podría dar problemas. Si (p.ej., a causa de un cambio de release) se ha modificado la estructura del contexto complejo MY_DATA, entonces ya no se pueden leer. Por el momento no se puede asegurar que el contexto complejo se archive automáticamente, si se realiza la funcionalidad archivo. (Por el momento, todavía no.)



Añadir excepción al log
=======================================================================
Funciones
Un texto de excepción se añadirá al log identificado con I_LOG_HANDLE ( Protokollhandle)

La clase de excepción, la gravedad del error, la clase de problema y el nivell de especificación se fijarán al módulo de funciones BAL_LOG_EXCEPTION_ADD mediante los parámetros IMPORTING I_S_EXC(estructura BAL_S_EXC).

Las informaciones de contexto para excepciones y sumas acumuladas de excepciones no se soportan.

Con E_S_MSG_HANDLE se recupera un handle de mensaje que este mensaje identifica unívocamente.

=> Nota: Este módulo de funciones sustituye al módulo de funciones BAL_LOG_EXC_ADD.
__________________
Lo unico que se, es que no se nada.....
Responder Con Cita