martes, 11 de junio de 2013

Transacciones SAP BASIS

 
  • AL01: SAP Alert Monitor
  • AL02: Database alert monitor
  • AL03: Operating system alert monitor
  • AL04: Monitor call distribution
  • AL05: Monitor current workload
  • AL09: Users Logged On
  • AL10: Users Logged On
  • AL11: Users Logged On
  • AL12: Display table buffer (Exp. session)
  • AL13: Display table buffer (Exp. session)
  • AL15: Display Shared Memory (Expert mode)
  • AL16: Customizing de destino SAPOSCOL
  • AL17: Customizing de destino SAPOSCOL
  • AL18: Customizing de destino SAPOSCOL
  • AL19: Customizing de destino SAPOSCOL
  • AL20: Customizing de destino SAPOSCOL
  • AL21: Customizing de destino SAPOSCOL
  • AL22: Customizing de destino SAPOSCOL
  • CREF: Ampliaciones
  • BD64: Customizing de destino SAPOSCOL
  • BSVW: Actualización modelo distribución
  • CMOD: Acoplam.Update status-Evento workfl.
  • DB01: Ampliaciones
  • DB02: Analyze tables and indexes
  • DB03: Parameter changes in database
  • DB11: Early Watch Profile Maintenance
  • DB12: Create Database Connection
  • DB13: Logs de grabación gestión BD
  • DB14: Calendario de planificación DBA
  • DB15: Mostrar logs de operación DBA
  • DB16: Archivo de datos: Tablas BD
  • DB17: Mostrar resultados verif.BD
  • DMIG: Actualización de conexión BD
  • DB2: Configurar verificación BD
  • DB20: Select Database Activities
  • DB21: Actualizar estadísticas BD
  • DB24: Configurar estadísticas BD
  • DB26: Operaciones BD administrativas
  • DB2J: Perfil BD: Monitor y configuración
  • DBCO: Gestionar jobs JCL para OS390
  • FILE: Actualización de conexión BD
  • NACE: Nom.fich./Vías acceso indep.mandante
  • OAA1: WFMC: Acceso al customizingERROR
  • OAA3: ArchiveLink: Actual.archivo usuario
  • OAA4: SAP ArchiveLink: Logs
  • OAAD: SAP ArchiveLink: Actualiz.aplicación
  • OAC2: ArchiveLink Administration Dokumente
  • OAC5: SAP ArchiveLink: Clases doc.globales
  • OACA: SAP ArchiveLink: Entr.código barras
  • OAD0: SAP ArchiveLink: Parámetros workflow
  • OAD2: SAP ArchiveLink: Enlaces de objetos
  • OAD3: SAP ArchiveLink: Tipos de documento
  • OAD4: SAP ArchiveLink: Tablas de enlaces
  • OAD5: SAP ArchiveLink: Tipos código barras
  • OADR: ArchiveLink: Asistente customizing
  • OAM1: SAP ArchiveLink: Buscar listas impr.
  • OAOR: SAP ArchiveLink: Monitoring
  • OARE: Business Document Service: Docum.
  • OS01: SAP ArchiveLink: Cód.retorno archivo
  • OS03: O/S Parameter changes
  • OS04: Modificaciones parámetro SO
  • OS05: Configuración sistema local
  • OS06: Configuración sistema remoto
  • OS07: Actividad sistema operativo local
  • OSS1: Actividad sistema operativo remoto
  • OY18: Logon to SAPNet
  • OY08: Logon to SAPNet
  • PFCG: Historial de tablas
  • PFUD: Actualizar roles
  • RLOG: Ajuste Maestro de usuario
  • RZ01: Ajuste Maestro de usuario
  • RZ02: Job Scheduling Monitor
  • RZ03: Job Scheduling Monitor
  • RZ04: Representación, ctrl.instancias SAP
  • RZ06: Maintain SAP Instances
  • RZ08: Maintain SAP Instances
  • RZ10: Maintain SAP Instances
  • RZ11: Actualizar parámetros perfil
  • RZ12: Actualización parámetros de perfil
  • RZ20: Maintain RFC Server Group Assignment
  • RZ21: Monitoring CCMS
  • SA38: CCMS Customizing arquitect.monitor
  • SAD0: Reporting ABAP
  • SADC: Llamada (obsoleta) gest.direcciones
  • SALE: Actual.clases comunicación (obsol.)
  • SAIN: Actual.clases comunicación (obsol.)
  • SARI: Gestión de archivos
  • SAR3: Visualizar Customizing ALE
  • SAR4: Visualizar Customizing ALE
  • SAR5: Visualizar Customizing ALE
  • SAR6: Visualizar Customizing ALE
  • SARA: Visualizar Customizing ALE
  • SARL: Sist.Información archivo
  • SARP: Sist.Información archivo
  • SART: Informes (estruct.árbol): Ejecutar
  • SB01: Visualizar árbol de informes
  • SB02: Componentes de aplicación
  • SBAS: Componentes de aplicación
  • SC38: Componentes de aplicación
  • SCAT: Lanzar report remoto
  • SCC0: Computer Aided Test Tool
  • SCC1: Computer Aided Test Tool
  • SCC2: Copia mandante: Selección especial
  • SCC3: Copia mandante: Selección especial
  • SCC4: Log copia mandante
  • SCC5: Gestión mandantes
  • SCC6: Borrado de mandante
  • SCC7: Borrado de mandante
  • SCC8: Import mandante: Tratam.posterior
  • SCC9: Export mandante
  • SCCL: Copia mandante remota
  • SCDO: Copia mandante local
  • SCMP: Visual.objetos doc.modificación
  • SCOM: Comparación vista/tablas
  • SCON: Comparación vista/tablas
  • SCPF: SAPconnect: Gestión
  • SCPR: SAPconnect: Gestión
  • SCPR: SAPconnect: Gestión
  • SCUA: Historial tabla
  • SCUG: Gestión central de usuarios
  • SCUL: Transferencia de usuarios
  • SCUM: Logs de gestión usuarios central
  • SCU0: SAPconnect: Gestión
  • SCU1: Customizing Cross System Viewer
  • SCU2: Customizing Cross System Viewer
  • SCU3: Customizing Cross System Viewer
  • SD11: Gestión central de usuarios
  • SDBE: Modelador de datos
  • SECR: Browser de modificaciones
  • SE01: Transport and Correction System
  • SE02: Transport Organizer (vista ampl.)
  • SE03: Transport Organizer (vista ampl.)
  • SE06: Herramientas Transport Organizer
  • SE07: Instalar Transport Organizer
  • SE09: Visualiz.status sist.transp.
  • SE10: Transport Organizer
  • SE11: Transport Organizer
  • SE12: Actualización Dictionary ABAP
  • SE13: Visualización Dictionary ABAP
  • SE14: Parám.memoria para actual.tablas
  • SE15: Utilities para tablas Dictionary
  • SE16: Sistema Info Dictionary
  • SE17: Browser de datos
  • SE30: Visualizar tabla (general)
  • SE32: Anál.tiempo ejecución objetos ABAP
  • SE33: Actualizar elementos texto ABAP
  • SE35: Generador de contexto
  • SE36: Módulos de diálogo ABAP
  • SE37: Generador de bases de datos lógicas
  • SE38: Módulos de funciones ABAP
  • SE39: Editor ABAP
  • SE40: Editor split screen (nuevo)
  • SE41: Actualiz. estándares y traducc. MP
  • SE43: Menu Painter
  • SE51: Actualizar menú de ámbito
  • SE52: Screen Painter
  • SE54: Screen Painter
  • SE55: Generar vista tabla
  • SE56: Llamada interna: Vista tablas act.
  • SE57: Llamada interna: Vista tablas vis.
  • SE61: Llamada interna: Vista tablas borr.
  • SE62: Documentación SAP
  • SE63: Utilidades ramo industrial
  • SE71: Traducción: Pantalla inicial
  • SE72: SAPscript Formulario
  • SE73: Estilos SAPscript
  • SE74: SAPscript: Actual.fonts
  • SE75: SAPscript conversión de formatos
  • SE76: SAPscript: Parametrizaciones
  • SE77: SAPscript: Traducción formularios
  • SE78: SAPscript: Traducción de estilos
  • SE80: Gestión de gráficos de formulario
  • SE81: Object Navigator
  • SE82: Jerarquía de aplicaciones
  • SE84: Jerarquía de aplicaciones
  • SE85: Sistema Info Repository R/3
  • SE86: Sistema Info Dictionary ABAP
  • SE88: Sistema Info Dictionary ABAP
  • SE89: Sistema Info Dictionary ABAP
  • SE91: Actualizac.árboles en sistema Info
  • SE92: Actualización de mensajes
  • SE93: Actual.nva.mensajes log sist.dsd.46A
  • SE94: Actualizar códigos de transacción
  • SE95: Simulación, ampliación de cliente
  • SEPS: Sist.información auditoría obsoleto
  • SERP: SAP Electronic Parcel Service
  • SEU: Reporting: modif. estructura árbol
  • SF01: Reporting: modif. estructura árbol
  • SFAW: Nombres fichero depend.mandante
  • SIAC: Registro transacciones (Batch input)
  • SHDB: Actualización de selección de campos
  • SICK: Registro transacciones (Batch input)
  • SIN1: Verificación de instalación
  • SINA: SAPBPT: Carpeta de entrada
  • SLG0: SAPBPT: Actual.configuración estánd.
  • SLIN: Log aplicación: Actual.objetos
  • SM01: ABAP: Verif.ampliada de programa
  • SM02: Bloquear transacciones
  • SM04: Mensajes de sistema
  • SM12: Lista de usuarios
  • SM13: Visualizar y borrar bloqueos
  • SM14: Gestionar registros actualización
  • SM21: Gestión de tarea de actualización
  • SM23: Evaluación online de log de sistema
  • SM28: Evaluación online de log de sistema
  • SM29: Verificación de instalación
  • SM30: Toma muestra en tablas
  • SM31: Llamar actualización de vistas
  • SM31_OLD: Actualizar tablas (ant.)
  • SM32: Actualizar tablas (ant.)
  • SM33: Actualizar tabla ID parámetro TAB
  • SM34: Visualizar tabla ID parámetro TAB
  • SM35: Llamada de actualiz. cluster vistas
  • SM36: Supervisión batch input
  • SM37: Prever job de fondo
  • SM38: Resumen mediante selección de jobs
  • SM39: Transacción de gestión queue
  • SM49: Análisis jobs
  • SM50: Ejecución comandos OS externos
  • SM51: Resumen de procesos de trabajo
  • SM54: Lista con Sistemas SAP
  • SM55: Actualizar TXCOM
  • SM56: Actualizar THOST
  • SM58: Memoria intermedia rango de números
  • SM59: Log errores RFC asincrónico
  • SM60: Destinos RFC (visualizar y actual.)
  • SM61: Destinos RFC (visualizar y actual.)
  • SM62: Monitor objeto control proceso fondo
  • SM63: Historial eventos y eventos de lote
  • SM64: Visual./Actual.sets forma operación
  • SM65: Gestión de eventos de lote
  • SM66: Método análisis ejec.proceso fondo
  • SM67: Systemwide Work Process Overview
  • SM68: Systemwide Work Process Overview
  • SM69: Systemwide Work Process Overview
  • SMEN: Actualizar comandos OS externos
  • SMGW: Visualiz.árbol menú Session Manager
  • SMLG: Monitor gateway
  • SMLI: Maint.Assign. Logon Grp to Instance
  • SMLT: Maint.Assign. Logon Grp to Instance
  • SMOD: Gestión idiomas
  • SMT1: Gestión de ampliaciones SAP
  • SMT2: Sistema trusted (visual.y actual.)
  • SMW0: Sistemas Trusting (visual.y actual.)
  • SMX: Repository SAP Web
  • SNRO: Visualizar jobs propios
  • SO02: Objetos de rangos de números
  • SO03: SAPoffice Salida
  • SO04: SAPoffice Archivo personal
  • SO05: SAPoffice Archivo general
  • SO06: SAPoffice: Papelera personal
  • SO07: SAPoffice: Suplente on / off
  • SO10: SAPoffice función doc.pendiente
  • SO12: SAPscript textos estándar
  • SO13: SAPoffice Maestro de usuario
  • SO15: SAPoffice Suplentes
  • SO16: SAPoffice: Listas de distribución
  • SO17: SAPoffice Perfiles
  • SO18: SAPoffice: Borrar papelera general
  • SO19: SAPoffice: Papelera general
  • SO21: SAPoffice: Documentos referencia
  • SO22: Actualizar directorio actual PC
  • SO23: SAPoffice: borrar ficheros PC temp.
  • SO24: SAPoffice: Listas de distribución
  • SO28: SAPOffice: Act.PC preparametrizado
  • SO30: Actualización de SOGR
  • SO31: Business Workplace: Reorganización
  • SO36: Reorganización (diaria)
  • SO38: Crear transmisión automática
  • SO40: SAPoffice: Comparar aut. carpeta
  • SO41: SAPoffice: Formulario Cust.MAIL
  • SO42: SAPoffice: Formulario Cust.TELEFAX
  • SO43: SAPoffice: Formulario Cust.TELEFAXERRORK
  • SO44: SAPoffice: Formulario Cust.TELEFAXERRORM
  • SO70: SAPoffice: Formulario Cust.TELEX
  • SO71: Hipertexto:Visual./Actual.estructura
  • SO72: Gestión plan de test
  • SO73: Actual.módulos hipertexto: Acceso
  • SO80: Importar gráfico a SAPfin
  • SO81: Importar gráfico a SAPfin
  • SO82: SAPfind: FreetextERRORindexing (test)
  • SO95: SAPfind: FreetextERRORretrievalERRORfondo
  • SO99: Peticiones búsq.pregeneradas - Selec
  • SOA0: Sistema Info para versiones nuevas
  • SOBJ: ArchiveLink: clases docum.workflow
  • SOLE: Definir atributos de objetos actual.
  • SOLI: Aplicaciones OLE
  • SOPE: Aplicaciones OLE
  • SOTD: Excluir tipos de documentos
  • SOY1: SAPoffice: Actualiz.tipos de objetos
  • SOY2: SAPoffice: Actualiz.masiva usuarios
  • SOY3: SAPoffice: Conjunto datos estadíst.
  • SOY4: SAPoffice: Evaluación estadística
  • SOY5: SAPoffice: Resumen de accesos
  • SOY6: SAPoffice: Resumen carp.entrada
  • SOY7: SAPoffice: Resumen documentos
  • SOY8: SAPoffice: Resumen carpetas
  • SOY9: SAPoffice: Archivo en masa
  • SOYA: SAPoffice: Reorganización entrada
  • SP00: SAPoffice: Modif.titular carpeta
  • SP01: SPOOL y áreas adyacentes
  • SP02: Control de salida
  • SP03: Visualizar órdenes SPOOL
  • SP11: Visualizar órdenes SPOOL
  • SP12: Directorio TemSe
  • SPAD: Gestión TemSe
  • SPAM: Gestión de SPOOL
  • SPAU: Support Package Manager
  • SPCC: Visualizar objetos ED modificados
  • SPDD: Visualizar objetos ED modificados
  • SPHA: Visualizar objetos Dict modificados
  • SPIC: Gestión de telefonía
  • SPRM: Gestión de telefonía
  • SPRO: Customizing actual
  • SQ01: Customizing: Tratamiento proyecto
  • SQ02: Query SAP: Actualizar queries
  • SQ03: Query SAP: Actualizar InfoSet
  • SQ07: Query SAP: Actual.grupos usuarios
  • SQVI: Query SAP: Ajuste de idiomas
  • SSAA: System Administration Assistant
  • SSCA: Asistente de gestión del sistema
  • SRZL: QuickViewer
  • SSM1: Agenda: Actualización autorización
  • SSM5: Transacción obsoleta
  • ST01: Transacción obsoleta
  • ST02: Trace sistema
  • ST03: Performance, SAP Statistics, Workload
  • ST04: Carga sistema y estad.rendimiento
  • ST05: SQL Trace
  • ST06: Operating System Monitor
  • ST07: Monitor de sistema operativo
  • ST08: Monitor aplicación
  • ST09: Monitor aplicación
  • ST10: Monitor aplicación
  • ST11: Table Call Statistics
  • ST12: Visualizar traces programador
  • ST14: Single transaction analysis
  • ST22: Análisis de aplicación
  • ST22: Análisis de aplicación
  • ST62: Análisis de dumps ABAP
  • STAT: Crear textos breves para ramo ind.
  • STMS: Crear textos breves para ramo ind.
  • STUN: Transport Management System
  • STW1: Test Workbench: Test catalog
  • STW2: Test workbench: Test plan
  • STW3: Test workbench: Test package
  • STW4: Test Workbench: Edit test package
  • STW5: C maintenance table TTPLA
  • STZA: Maintain time zone act.in client
  • STZA: Disp.time zone activat.in client
  • SUMM: Sistema de información de usuarios
  • SU01: Maintain User
  • SU01: Display users
  • SU02: Actualización de usuarios
  • SU03: Actualizar perfiles de autorización
  • SU05: Actualizar autorizaciones
  • SU10: Actualizar autorizaciones
  • SU11: Actualización en masa de usuarios
  • SU12: Actualización en masa de usuarios
  • SU2: Modificaciones masa reg.mtro.usuario
  • SU20: Actualizar parám.usuario propios
  • SU21: Actualizar campos de autorización
  • SU22: Actualizar objetos de autorización
  • SU24: Utiliz.obj.autoriz.en transacciones
  • SU25: Verif.obj.autoriz.bajo transacciones
  • SU26: Herram.upgrade p.generador perfiles
  • SU30: Herram.upgrade p.generador perfiles
  • SU52: Herram.upgrade p.generador perfiles
  • SU53: Actualizar parám.usuario propios
  • SU54: Evaluación verificación autorización
  • SU56: Evaluación verificación autorización
  • SUPC: Sistema de información de usuarios
  • SUPF: Perfiles para roles
  • SUPO: Perfiles para roles
  • SUIM: Analizar mem.interm.de usuario
  • SWDC: Actual.niveles org.
  • SXDA: Definición workflow: Gestión
  • TU02: Workbench transf.datos
  • USMM: Customer measurement

viernes, 5 de abril de 2013

Vulnerabilidades en SAP


Se han descubierto múltiples vulnerabilidades productos SAP. Todos los fallos han sido descubiertos por Mark Litchfield de NGSSoftware, conocido por su cruzada contra la seguridad de Oracle en particular y bases de datos en general.

(Systeme, Anwendungen und Produkte, "Sistemas, Aplicaciones y") es un importante proveedor de aplicaciones de gestión empresarial, sólo superado en capitalización de mercado por Microsoft, IBM y Oracle.

Se han descubierto dos vulnerabilidades en EnjoySAP que podrían ser aprovechadas por un atacante para comprometer un sistema vulnerable. Un error de límite en el Control ActiveX kweditcontrol.kwedit.1 a la hora de manejar el método PrepareToPostHTML.

Un atacante podría aprovechar esto para provocar un desbordamiento de pila enviando una cadena excesivamente larga, de más de 1.000 bytes, como argumento del método.

Error de límite en el Control ActiveX rfcguisink.rfcguisink a la hora de manejar el método LaunchGui.

Un atacante podría aprovechar esto para provocar un desbordamiento de heap mediante el envío de una cadena excesivamente larga, de más de 1.700 bytes, como argumento del método.

Se ha descubierto una vulnerabilidad en SAP Web Application Server que podría ser aprovechada por un atacante para causar una denegación de servicio. Esta vulnerabilidad se debe a un fallo en Internet Communication Manager. Un atacante podría aprovechar esta vulnerabilidad para provocar que el proceso ICM dejase de responder a través de una URL excesivamente larga, de más de 250 bytes.

Otra de las vulnerabilidades reside en SAP Message Server que podría ser aprovechada por un atacante para comprometer un sistema vulnerable o ejecutar código arbitrario. Esta vulnerabilidad se debe a un error de límite al procesar peticiones HTTP. Un atacante podría aprovechar esta vulnerabilidad para provocar un desbordamiento de heap a través de peticiones GET especialmente manipuladas enviadas a /msgserver/html/group.

Se ha descubierto una vulnerabilidad en SAP Internet Graphics Service que podría ser aprovechada por un atacante para realizar ataques por cross site scripting. Esa vulnerabilidad se debe a que las entradas pasadas al parámetro params a través de adm:getlogfile no son debidamente comprobadas antes de ser devueltas al usuario.

Por último, un error en waHTTP.exe de la versión 7.x de SAP DB podría provocar un desbordamiento de memoria intermedia si se envía una petición http especialmente manipulada al puerto TCP por defecto 9999.

Los fallos han sido solucionados en la última versión de cada producto.

FUENTE:REDES & TELECOM via Hispasec

SAPHack

SAPHack


Bien, este es el primer capítulo de todo este cuento. Aunque pueda sonar extraño, el título no es lo que parece, ya lo iras entendiendo.

En definitiva todo sistema se compone de lo esencial, un soporte donde almacenar información. Si subimos más arriba, podemos ver que dicho soporte no es más que unos ficheros o tablas donde esta información está catalogada y descrita. No obstante esto no tiene que suponer ningún problema.

En el caso de SAP, estamos hablando de una aplicación Cliente-Servidor, como ya sabéis, SAP dispone de un servidor donde guarda toda la información y unos FrontEnds o Clientes donde el usuario final puede atacar (trabajar) contra la máquina SAP. Esto implica que los programas no se ejecutan en nuestra maquina y que la información tampoco se haya en nuestro terminal, está todo guardado en el servidor.

La diferencia es que SAP, siendo un ERP tan abierto, se nos permite hacer cualquier cosa mientras tengamos autorización para ello y como SAP es tan abierto, los códigos fuentes de todos los programas están a disposición para que los modifiquemos, sea por propia nota de SAP o por decisión del cliente.

Disponemos de un WorkBench donde poder trabajar y unas herramientas más que suficientes. Así que lo demás sale solo.


Partiendo de que tenemos cualquier código fuente, saltárselo o alterarlo (incluso el standard) no es difícil, sólo hay que tener la paciencia suficiente como para encontrar el lugar adecuado. 


Nota: Realmente no disponemos del código fuente, hay algunas rutinas/programas que están implementadas directamente en el servidor, en código C, que es así como está programado SAP a bajo nivel.
Por ejemplo, cuando uno se pregunta por la rutina de encryptado de password de usuario, deberemos ir a mirar el propio ejecutable de SAP (del server), ya que no existe ningún ABAP o ejecutable local con dicha información.
Existen también, herramientas ocultas o no documentadas que sólo las aplica SAP a su gusto y placer, no obstante vamos a intentar desvelarlas un poquito, en la sección de Undocumented.

/H :
Este es el pan nuestro de cada día, la función de debug. Con esta función se puede trabajar directamente con el código fuente, viendo paso a paso lo que está haciendo a cada momento. Lo importante es que con esta herramienta vamos a poder ver el contenido de las variables y tablas, así como otras zonas de memorias que físicamente no son accesibles, pero que están ahí.

A partir de este momento y con estos nuevos conocimientos (crees que son pocos) ya puedodemos hacer lo que queramos con SAP. 
He aquí unos ejemplos: 
  • Obtener privilegios de SAP*
  • Editar códigos fuentes standard.
  • Saltarse protecciones por perfil.
  • etc. 


Ejemplos prácticos:

1. Para poder abrir cualquier tipo de programa, tan solo es necesario visualiza el código fuente del programa: RDDINSYS y poner un sencillo break-point. en la linea 376. 

Es un case que controla el resultado de una función. Una vez puesto el break, bastará con salgamos del editor y editemos el programa que vamos a utilizar con mano-negra. Al apretar sobre el botón de edit, saltará el DEBUG en la línea indicada y simplemente cambiando el valor de la variable sy-subrc podremos acceder a cualquier fuente. 

La transacción SE16 es una de las herramientas más utiles del sistema ya que nos permite acceder a las tablas, ver su contenido y como no... Modificarlo. Si alguna vez no te aparece las opciones de actualización, no te preocupes. Simplemente accede al registro el cual quieres "maquillar" y utiliza el DEBUG. Veras que existe un código como okcode, que cambiandolo por el que quieras podrás hacer lo que te plazca.    |||_ó

2. Cuantas veces nos ha salido el mensaje "Falta autorización para transacción" ("You are not authorized to use transaction") y tenemos que recurrir al equipo de Basis que tardan cerca de los mil años en darnos el permiso necesario para poder acceder.

He aqui la solucion:

1- Nos dirigimos a la transaccion SE37 ( si no tenemos acceso a esta transacción, no tengo otra formula mágica)

2- Ponemos la siguiente función: RS_HDSYS_CALL_TC_VARIANT

3- Pulsamos F8

4- Campo TCODE con la transaccion que necesitamos acceder Campo AUTHORITY_CHECK borrar la X

5- F8


3. Si por algún motivo queremos que nuetro código ABAP, de un programa no sea visible, solo tendremos que indicar al principio del programa, lo siguente: *@#@@[SAP].
Es muy complicado volver a atrás después de hacer esto por ello se recomienda hacer una copia del programa en tu pc.

Modificar registros de una Tabla de la Base de datos desde la se11.

Vamos a la SE11, y lanzamos la consulta que queremos realizar, buscamos el registro de la tabla y le damos a visualizar la línea.



Una vez tenemos el detalle del registro en la pantalla, vamos al cuadro de comando e introducimos un "/h", para entrar al modo de Debugger.


Una vez ejecutado el comando "/h", vemos como nos salta el debugger y como estamos en un bloque del código donde nos permite editar, visualizar, modificar o borrar el registro que estamos tratando.




Sets y Ranges, evitando hardcodes

¿Qué es un SET?



En este tutorial vamos a explicar brevemente que son los Sets, que utilidad tienen, como se crean y para que se utilizan. También presentaremos un par de sencillos programas en ABAP para ilustrar el funcionamiento de los RANGES y de los Sets. 

Los programadores ABAP a menudo sienten la necesidad de contar con un conjunto de valores, un rango de valores no dependiente del código. Por lo que no tendremos que tocar el código cada vez que necesitemos cambiar algo de ese conjunto de valores. 

El Set de valores nos permite utilizar este conjunto de valores, que no son dependiente del código del programa, es decir no estan en el propio código, dando una mayor flexivilidad a los programas que necesitan de estos conjuntos de valores. 

Los Sets son conjuntos de parámetros de selección, funcionan de manera similar a los rangos (RANGES) y pueden ser almacenados internamente por SAP, lo cual permite mantenerlos actualizados sin necesidad de alterar el código fuente de un programa que los utilice, esta es su mayor ventaja, nos ayudan a evitar el uso de hardcode (valores constantes) en un programa. La tabla SAP donde internamente se almacenan los SETs es SETLEAF y para aquellos interesados en verla es posible analizarla con la transacción SE11. Para entender como funcionan los SET primero debemos entender como funcionan los RANGES.

Los conjuntos son estructuras flexibles para la organización de jerarquías de cantidades.
 

Los conjuntos pueden utilizarse para agrupar los valores o intervalos de valores dando un conjunto y varios juegos formando una jerarquía.


RANGES


Los RANGES permiten especificar una serie de rangos de valores para ser utilizados en las sentencias de selección, funcionan de manera similar a la cláusula SELECT-OPTIONS que utilizamos en los programas ABAP, de hecho esta cláusula lo que hace es utilizar rangos. 

Cuando ejecutamos la cláusula: SELECT * FROM mara WHERE matnr IN mirango el motor de base de datos que interpreta esta sentencia PL/SQL leerá la tabla MARA y recuperara todos aquellos registros cuyo campo MATNR este comprendido dentro del rango de valores especificado “mirango”. 

Para que esto funcione debemos tener definido el contenido de "mirango" para que ABAP pueda hacer la búsqueda deseada dentro del rango de valores que nos interesa recuperar, por ejemplo: si deseamos recuperar desde MARA todos los materiales cuyos números de material (MATNR) este comprendido entre 2 y 3 debemos definir un rango cuyo valor bajo o inicial (LOW) sea 2 y cuyo valor alto o final (HIGH) sea 3. 


Para entender esto con mas claridad véase el siguiente código de ejemplo: 

* ---------------------------------------------------------------------
* Sistema : SAP R/3
* Nombre : Ejemplo de uso de RANGES.
* Modulo : Basis
* Autor : Exequiel Lopez.
* Fecha : 4/05/2006.
* ---------------------------------------------------------------------
REPORT zexe001.
* ---------------------------------------------------------------------
TABLES: mara.
* ---------------------------------------------------------------------
RANGES: mirango FOR mara-matnr.
* ---------------------------------------------------------------------
  mirango-sign = 'I'.
  mirango-option = 'BT'.
  mirango-low = '000000000000000001'. 
  mirango-high = '000000000000000003'.
  APPEND mirango.
* ---------------------------------------------------------------------
 SELECT *
   FROM mara
  WHERE matnr IN mirango.
   WRITE : / mara-matnr.
 ENDSELECT.
* ---------------------------------------------------------------------
Este programita buscara todos los materiales especificados en el RANGE “mirango”, es decir recuperara y listara en pantalla todos aquellos materiales cuyo MATNR este comprendido entre los valores 000000000000000001 y 000000000000000003.

Que hacen los SETs


Los SETs permiten es almacenar los valores de LOW y HIGH de los rangos en una tabla de sistema, en este caso la tabla SETLEAF, para poder descargar estos parámetros en un rango y poder usarlos en un programa, esto evita el problema de la inclusión de hardcodes en un programa, además no solo podremos almacenar un rango simple como 2 a 3 del ejemplo, sino que podemos tener múltiples renglones de rangos que no necesariamente tienen que ser consecutivos. 

Transacciones asociadas a los SETs

  • La transacción para creación es GS01.
  • La transacción para modificarlos es GS02.
  • La transacción para consultarlos es GS03.

Pasos para la creaciónc de un SETs


1. Vamos a la Transacción GS01.




2. Seleccionamos el tipo de SET, y el nombre que le vamos a dar. En este caso será un SET, básico.

3. En el campo de Referencia podríamos hacer referencia a otro SET de datos.

4. Si no vamos a usar las referencias, en la pantalla siguente tendremos que meter el  campo que contendrá los valores a los que hacemos referencia con el SET.


5. Una vez definido el campo de  la tabla, será el momento de introducir los valores del SET, una vez introducidos se pulsa "Grabar" y "Salir".



Ventajas de los SET de datos


  • Se crean fácilmente, cada vez que se crea un set de datos este es independiente de otros.
  • Pueden ser usados transversalmente en el sistema, es decir funcionan para culaquier módulo.
  • Permiten que la información se centralice y se modifique con facilidad.

Ejemplo de creación de un SET 


Vamos a demostrar la creación y el uso de un SET:

  1. Invocar a la transacción GS01.
  2. Darle nombre al set, por ejemplo ZEXE001
  3. Darle un nombre de tabla a usar, por ejemplo MARA
  4. Poner el Tipo de Set como SET BASICO
  5. Pulsar Enter
  6. Darle un nombre de campo a usar, por ejemplo MATNR
  7. Completar los valores de rango y poner un comentario para cada línea: 
 
De valor    A valor  Texto breve otros campos . . .
    1         2       línea 1
    4         7       línea 2
  
Una vez completado dar click en el botón SAVE. 

Lo que estamos diciéndole aquí es que con este SET vamos a buscar los materiales comprendidos entre 1 y 2 y los materiales comprendidos entre 4 y 7. Los valores "De valor" y "A valor" son los valores que se han introducido para el valor del rango para el campo MATNR. Eso significa que para este SET vamos a tener valores comprendidos entres 1 y 2 y entre 4 y 7 por lo que le programa que presentamos mas abajo debería buscar todos los materiales comprendidos entres 1 y 2 y entre 4 y 7 inclusive. Para usar el set hay que leerlo en el programa primero, descargarlo a una variable de rangos y luego usar la variable de rangos para hacer el SELECT. Los campos valsign valoption valfrom y valto pertenecen a la tabla SETLEAF y representan lo siguiente: 


  • valfrom - El valor desde, por ejemplo desde matnr = 2 inclusive.
  • valto - El valor hasta, por ejemplo hasta matnr = 3 inclusive.
  • valsign - Campo SIGN en la estructura de tablas SELECT-OPTIONS
  • valoption - Campo OPTION en la estructura de tablas SELECT-OPTIONS

Ejemplo del uso de SETs como rangos en una selección:
* ---------------------------------------------------------------------
* Sistema : SAP R/3
* Nombre : Ejemplo de uso de SETS.
* Modulo : Basis
* Autor : Exequiel Lopez.
* Fecha : 4/05/2006.
* ---------------------------------------------------------------------
REPORT zexe002.
* ---------------------------------------------------------------------
TABLES: mara, setleaf.
* ---------------------------------------------------------------------
RANGES: mirango FOR mara-matnr.
* ---------------------------------------------------------------------
SELECT valsign valoption valfrom valto
  INTO (mirango-sign, mirango-option,
        mirango-low, mirango-high)
  FROM setleaf
 WHERE setname = 'ZEXE001'.
 APPEND mirango.
ENDSELECT.
* ---------------------------------------------------------------------
SKIP.
SKIP.
Write : / 'El rango usado es:'.
SKIP.
LOOP AT mirango.
  WRITE : / mirango-sign, mirango-option,
            mirango-low, mirango-high.
ENDLOOP.
* ---------------------------------------------------------------------
SKIP.
SKIP.
Write : / 'Los materiales obtenidos son:'.
SKIP.
SELECT * FROM mara
 WHERE matnr IN mirango.
 WRITE : / mara-matnr.
ENDSELECT.
* ---------------------------------------------------------------------
*


El funcionamiento del programa es sumamente simple: 


Primero descarga de la tabla SETLEAF el SET llamado ‘ZEXE001’ que acabamos de crear con anterioridad en este ejemplo y deposita sus valores de rango (valsign valoption valfrom valto ) en una variable tipo RANGES llamada ‘mirango’. Como el SET puede tener un numero variable de lineas por cada una de las lineas leidas hace un APPEND a la variable mirango ( que de hecho es tratada por ABAP como a una tabla interna). A continuacion nos presenta a traves de Write cual es el contenido de este SET. Finalmente lo utiliza en la clausula SELECT y nos presenta los resultados. En el caso de que no tengo materiales creados en su mandante de prueba puede cambiar facilmente los valores del rango 1 a 2 y 4 a 7 por cualquiera que se ajuste a sus datos de prueba. Y eso es basicamente todo.







Operadores Lógicos con Strings

1. CO (contiene solo) 


c1 contiene solo caracteres desde el string c2.

Si c1 o c2 es del tipo C, la comparación toma en cuenta el largo total de la variable, incluyendo los espacios al final.

Si c1 es del tipo STRING y vacío, el resultado de la comparación es siempre positiva.

Si c2 es del tipo STRING y vacío, el resultado de la comparación es siempre negativa, a menos que c1 sea tambien un string vacío.

Si el resultado de la comparación es negativa, la variable SY-FDPOS contiene el offset del primer caracter en c1 que no está incluido en c2.

Si el resultado de la comparación es positivo, la variable SY-FDPOS contiene el largo de c1.

La comparación es sensible a minúsculas y mayúsculas.


Ejemplos:


'ABCDE' CO 'XYZ' es falso; SY-FDPOS = 0.

'ABCDE' CO 'AB' es falso; SY-FDPOS = 2.

'ABCDE' CO 'ABCDE' es verdadero; SY-FDPOS = 5.


2. CN (no solo contiene)


"c1 CN c2" es equivalente a "NOT ( c1 CO c2 )".

c1 no solo contiene caracteres de c2.

Si el resultado de la comparación es positiva, la variable SY-FDPOS contiene el offset del primer caracter en c1 que no esta en c2.

Si el resultado de la comparación es negativa, la variable SY-FDPOS contiene el largo de c1.

3. CA (contiene cualquiera)


c1 contiene a lo menos un caracter de c2.

Si c1 o c2 es del tipo C, la comparación toma en cuenta el largo total de la variable, incluyendo los espacios al final.

Si c1 o c2 es del tipo STRING y vacío, el resultado de la comparación es siempre negativa.

Si el resultado de la comparación es positiva, la variable SY-FDPOS contiene el offset del primer caracter en c1 que esta en c2.

Si el resultado de la comparación es negativa, la variable SY-FDPOS contiene el largo de c1.

La comparación es sensible a minúsculas y mayúsculas.


Ejemplos:


'ABCDE' CA 'CY' es verdadero; SY-FDPOS = 2.

'ABCDE' CA 'XY' es falso; SY-FDPOS = 5.


4. NA (no contiene cualquiera)


"c1 NA c2" es equivalente a "NOT ( c1 CA c2 )".

c1 no contiene caracteres de c2.



5. CS (contiene String)


c1 contiene a c2.

Espacios sobrantes en c1 y c2 son ignorados si se trata de variables del tipo C.

Si el resultado de la comparación es positiva, la variable SY-FDPOS contiene el offset del primer caracter de c2 en c1.

Si el resultado de la comparación es negativo, la variable SY-FDPOS contiene largo de c1.

La comparación no es sensible a minúsculas y mayúsculas.


Ejemplos:


'ABCDE' CS 'CD' es verdadero; SY-FDPOS = 2.

'ABCDE' CS 'XY' es falso; SY-FDPOS = 5.

'ABAAA' CS 'AB ' es verdadero; SY-FDPOS = 0.

' ABC' CS ' AB' es verdadero; SY-FDPOS = 1.

'ABC DEF' CS ' ' es verdadero; but: SY-FDPOS = 0,

debido a que ' ' es interpretado como como espacio sobrante y se ignora.


6. NS (no contiene string): 


"c1 NS c2" es equivalente a "NOT ( c1 CS c2 )".

c1 no contiene a c2.


7. CP (contiene patrón)


 


El string completo c1 coincide con el patrón c2 (c1 "coincide con" c2).

El patrón c2 puede contener caracteres comunes y asteíscos '*' para cualquier string y '+' para cualquier caracter.

Si el resultado de la comparación es positiva, la variable SY-FDPOS contiene el offset del primer caracter de c2 en c1. El asterísco '*' al principio del patrón c2 es ignorado cuando se determina el valor de SY-FDPOS.

Si el resultado de la comparación es negativa, la variable SY-FDPOS contiene el largo de c1.

Ejemplos:


 

'ABCDE' CP '*CD*' es verdadero; SY-FDPOS = 2.

'ABCDE' CP '*CD' es falso; SY-FDPOS = 5.

'ABCDE' CP '++CD+' es verdadero; SY-FDPOS = 0.

'ABCDE' CP '+CD*' es falso; SY-FDPOS = 5.

'ABCDE' CP '*B*D*' es verdadero; SY-FDPOS = 1.


El caracter '#' tiene un significado especial. Sirve como símbolo de escape e indica que cada caracter siguiente debería ser comparado "exactamente".

Esto permite buscar por:

- caracteres en mayúsculas o minúsculas

ejemplo: c1 CP '*#A#b*'

- buscar caracteres '*', '+' como tales

ejemplo: c1 CP '*#**' o c1 CP '*#+*'

- el símbolo de escape

ejemplo: c1 CP '*##*'

- espacios al final de c1

ejemplo: c1 CP '*# '

Ejemplos: 


'ABC' CP 'ABC ' es verdadero,

'ABC ' CP 'ABC' es verdadero,


pero


'ABC' CP 'ABC+' es falso,

'ABC' CP 'ABC# ' es falso,



La comparación no es sensible a minúsculas y mayúsculas. 



8. NP (no contiene patrón)

"c1 NP c2" es equivalente a "NOT ( c1 CP c2 )" c1 no coincide con c2.

miércoles, 3 de abril de 2013

Log de errores

Registro de excepciones, mensajes y errores.


Un sistema de registro, (“logging”) bien diseñado es una necesidad básica para la salud de cualquier sistema que trato datos de una cierta relevancia. La actividad de logging consiste en el registro de la actividad de mensajes del sistema y/o sus aplicaciones, la cual es necesaria en muchos de los casos en los que el equipo de soporte o desarrolladores necesitan monitorear errores, reconstruir eventos, etc.

En el caso de SAP, como en la mayoría de los sistemas, existe un SYSTEM LOG que registra los eventos a nivel del sistema operativo. Además, SAP provee las herramientas para implementar un APPLICATION LOG para todos los programas ABAP desarrollados. A través de determinadas transacciones, tablas y módulos de función, SAP proporciona una infraestructura para la recepción de mensajes y excepciones en un registro, el ahorro, la lectura y borrado de registros en la base de datos y su visualización.

El archivo de APPLICATION LOG contiene sucesos registrados por las aplicaciones, y, a diferencia del system log, los eventos que se escriben en el Application Log están determinados por los desarrolladores.

Usando esta funcionalidad, se establece una forma estandarizada de almacenar mensajes de error, permitiendo un manejo mas generalizado y preciso de mismos y mejorando la calidad del código.

La funcionalidad de registro de aplicaciones existe desde la versión 3.0, pero fue notablemente mejorada a partir de la versión 4.6 hasta las últimas versiones. Si bien las funciones de la versión 3.0 están aún soportadas.

Estructura de un Application Log
  • En términos generales, se define como "log" a un conjunto de mensajes. Un log usualmente también contienen una cabecera con información descriptiva: número de log, creador, hora de creación, etc
  • El Application Log es una estructura de tablas compuesta por varias tablas. La gestión sobre dichas tablas se realiza utilizando módulos de función estándar provistos por SAP.
  • Los datos de logging se recolectan inicialmente en la memoria local, y luego pueden ser grabados en la base de datos. Esto permite acelerar el proceso al reducir la cantidad de accesos a la base de datos.
  • Cada transacción puede generar varios logs.
  • La estructura del application log es:
- CABECERA DE LOG. Número de log, Usuario, Fecha de generación, Programa o Transacción y Clase de mensaje.

-  MENSAJES DE LOG.

Transacciones utilizadas para gestionar Application Logging.

Hay diferentes transacciones involucradas en la gestión de un application log :

SLG0: New Entry, Transacción utilizada para CREAR y DEFINIR las entradas para sus propias aplicaciones en el Application Log. (Desarrollador)

SLG1: Analyze Application Log, Transacción para ANALIZAR el registro de aplicación. (Usuario principal)

SLG2: Delete Expired Logs, Transacción para ELIMINAR registros caducos. (Administrador)



Módulos de Función para Application Logging

Como se dijo anteriormente, la funcionalidad de registro de aplicaciones existe desde la versión 3.0, pero fue notablemente mejorada a partir de la versión 4.6. Todas los módulos de función tipo “APPL_LOG” existen desde la versión 3.0 (ver tabla más abajo).

A partir de la 4.6 aparecen los módulos de función que comienzan con el prefijo SBAL, mucho más completos y mejor documentados que las antiguas funciones APPL_LOG.

Los principales módulos de función estándar son:
  • BAL_LOG_CREATE     (Abrir un Application Log )
  • BAL_LOG_MSG_ADD   (Generar una entrada con un mensaje en el Application Log )
  • BAL_LOG_MSG_ADD_FREE_TEXT   (Generar una entrada con exto libre en el Application Log 
  • BAL_DSP_LOG_DISPLAY (Mostrar el Application Log )
Exíste además una extensa lista de funciones para gestionar en detalle sobre la base de datos del Application Log, recolectar mensajes, grabar, eliminar, visualizar, etc.

Podemos encontrar toda la documentación relacionada en el con estos módulos de función y su aplicación en el  SBAL_DOCUMENTATION.

Funciones utilizadas para gestionar Application Logs (a partir de 4.6)


FUNCION MODULO FUNCION SIGNIFICADO GRUPO DE FUNCION
GRABACION BAL_DB_SAVE Grabar un log en la base de datos SBAL_CNTL
CREACION BAL_LOG_CREATE Creacion de un log  con datos de cabecera SBAL
BUSQUEDA BAL_GLB_SEARCH_LOG Buscar un log/s ( en memoria) SBAL
BAL_GLB_SEARCH_MSG Buscar un mensaje/s ( en memoria) SBAL
BAL_DB_SEARCH Buscar un log en la base de datos SBAL_CNTL
INSERCION BAL_LOG_MSG_ADD Añadir los mensajes en el  log SBAL
BAL_LOG_MSG_ADD_FREE_TEXT Añadir los mensajes de texto libre en el log SBAL
BAL_DB_LOAD Cargar el log en la base de datos SBAL_CNTL
BAL_LOG_EXCEPTION_ADD Añadir las excepciones en el log SBAL
LECTURA BAL_HDR_READ Leer los datos y textos de la cabecera del log SBAL
BAL_MSG_READ Leer los datos y textos del/los mensaje/s  del  log SBAL
BAL_LOG_EXCEPTION_READ Leer los datos y textos de la/s excepción/es del log SBAL
MODIFICA-CION BAL_LOG_MSG_CHANGE Cambiar un mensaje de un log SBAL
BAL_LOG_HDR_CHANGE Cambiar un encabezado  de un log SBAL
BAL_LOG_EXCEPTION_CHANGE Cambiar una excepción  de un log SBAL
VISUALIZA-CION BAL_DSP_LOG_DISPLAY Muestra  pantalla total de la salida del log. SBAL_DB_INTERNAL
BAL_DSP_LOG_PARAMETERS
Muestra  los parametros de la cabecera del log.

SBAL_DB_INTERNAL
BAL_DSP_LOG_TECHNICAL_DATA Muestra los datos tecnicos de la  cabecera del log SBAL_DB_INTERNAL
BAL_DSP_MSG_PARAMETERS
Muestra  los parametros del/ los  mensaje/s  del log.

SBAL_DB_INTERNAL
BAL_DSP_MSG_TECHNICAL_DATA Muestra los datos tecnicos del/los mensaje/s  del log. SBAL_DB_INTERNAL
BORRADO BAL_LOG_DELETE Borrar  el log SBAL_TOOLBOX
BAL_LOG_MSG_DELETE Borrar el mensaje del log SBAL
BAL_LOG_MSG_DELETE_ALL Borrar  todos los mensajes del log SBAL
BAL_LOG_REFRESH Borrar el log de la memoria SBAL
BAL_LOG_EXCEPTION_DELETE Borrar excepcion del log SBAL
BAL_DB_DELETE Borrar el log de la memoria SBAL_CNTL


Estructura de los módulos de Función más utilizados

BAL_LOG_MSG_ADD y BAL_LOG_MSG_ADD_FREE_TEXT son  módulos de función estándar de SAP. A continuación se presentan los detalles de estos FM. Toda esta información y más se pueden ver si se introduce el nombre del módulo de función BAL_LOG_MSG_ADD en la correspondiente transacción SAP como SE37 y SE80 .

Estructura  BAL_LOG_MSG_ADD




Estructura BAL_LOG_MSG_ADD_FREE_TEXT


Creación de un Application Log Paso a Paso


Para la creación de los objetos de un Application Log se deben seguir los siguientes pasos:

PASO 1: Ir a la transacción SLG0 y crear el objeto, completar su descripción. Luego salvarlo y asignarlo a un paquete y a una OT . Luego para crear el subobjeto, seleccionar el objeto creado ZTEST, seleccionar NEW ENTRIES y completar el nombre y la descripción del subobjeto y luego Salvar .

ABAP-Application-Log-creacion

PASO 2: Ir a la transacción SE80 y crear un programa con TOP INCLUDE, completar el titulo , tipo , status y aplicación, salvar y asignar paquete .

ABAP-006-Create Program

PASO 3: Copiar el siguiente código en el programa ZLOGGING, salvar y activar, y posteriormente ejecutar. De esta forma se podrá visualizar el aplication log implementado.
La finalidad del código siguiente es el de generar el application log, la implementación de  los propios mensajes en éste, y la visualización del log con los mensajes implementados.

---------------------------PARTE PRINCIPAL DEL PROGRAMA ---------------------------
INCLUDE ZLOGGINGTOP.
INCLUDE ZLOGGINGFORMS.
START-OF-SELECTION.
PERFORM LOG_CREATE.
PERFORM ADD_MSG_FREE_TEXT.
PERFORM ADD_MSG.
PERFORM LOG_DISPLAY.

---------------------------- PARTE DEL TOP INCLUDE --------------------------------
* DEFINICION DE TIPOS Y VALRIABLES A UTILIZAR EN EL LOG

TYPES : BALSMG TYPE STANDARD TABLE OF  BAL_S_MSG.

DATA:  LS_LOG TYPE BAL_S_LOG,

L_LOGHAND TYPE BALLOGHNDL,

L_MSG TYPE BAL_S_MSG,

B_LOG TYPE BOOLEAN,

B_DISP TYPE BOOLEAN,

LT_MSG TYPE BALSMG,

WA_LT_MSG TYPE BAL_S_MSG.

* ASIGNACION A LA ESTRUCTURA LS_LOG DE LOS SIG.ATRIBUTOS :
* ASIGNACION DEL  OBJETO Y SUBOBJETO


LS_LOG-OBJECT = 'ZTEST'.

LS_LOG-SUBOBJECT = 'ZTESTSUB'.
* ASIGNACION  DE PROGRAMA Y ID EXTERNO

LS_LOG-ALPROG ='ZLOGGING'.

LS_LOG-EXTNUMBER =' 001 APPLICATION LOG'.

* DEFINICION DE VARIABLES PARA MENSAJE DE  TEXTO LIBRE

DATA:

LL_MSG(60) TYPE C,

G_LOG TYPE BALLOGHNDL,

P_FACPRO(15) TYPE C  VALUE 'INFORMATIVO',

CONTRATO_BASE(20) TYPE C VALUE 'MENSAJE CREADO'.

--------PARTE DEL FORMS INCLUDE---------

FORM LOG_CREATE.

* FUNCIÓN PARA LA CREACIÓN DEL LOG

CALL FUNCTION 'BAL_LOG_CREATE'

EXPORTING

I_S_LOG = LS_LOG

IMPORTING

E_LOG_HANDLE = L_LOGHAND

EXCEPTIONS

LOG_HEADER_INCONSISTENT = 1

OTHERS = 2.

ENDFORM.

FORM ADD_MSG.


* GENERACION DE LOS MENSAJES PERSONALIZADOS
* MENSAJE DE INFORMACION


L_MSG-MSGTY = 'I'.
L_MSG-MSGID = '00'.
L_MSG-MSGNO = '398'.
L_MSG-MSGV1 = 'TESTING 1234'.
APPEND L_MSG TO LT_MSG.


* MENSAJE DE ADVERTENCIA

L_MSG-MSGTY = 'W'.
L_MSG-MSGID = '00'.
L_MSG-MSGNO = '398'.
L_MSG-MSGV1 = 'WARNING TESTING 1234'.
APPEND L_MSG TO LT_MSG.
* MENSAJE DE ERROR

L_MSG-MSGTY = 'E'.
L_MSG-MSGID = '00'.
L_MSG-MSGNO = '398'.
L_MSG-MSGV1 = 'ERROR TESTING 1234'.
APPEND L_MSG TO LT_MSG.
* LOOPEAR LA TABLA PARA AGREGAR LOS MENSAJES CREADOS Y UTILIZAR LA
LOOP AT LT_MSG INTO WA_LT_MSG.

* FUNCION PARA ADICIONAR LOS MENSAJES EN EL LOG .


CALL FUNCTION 'BAL_LOG_MSG_ADD'

EXPORTING

I_LOG_HANDLE = L_LOGHAND     Log handle

I_S_MSG = WA_LT_MSG              Notification data

IMPORTING

E_MSG_WAS_LOGGED = B_LOG       Message handle

E_MSG_WAS_DISPLAYED = B_DISP    Message output

EXCEPTIONS

LOG_NOT_FOUND = 1     Log not found

MSG_INCONSISTENT = 2  Message inconsistent

LOG_IS_FULL = 3       Message number 999999 reached. Log is full

OTHERS = 4.

ENDLOOP.
ENDFORM.

FORM ADD_MSG_FREE_TEXT.


CONCATENATE 'texto :' p_facpro 'para un ' contrato_base

INTO ll_msg SEPARATED BY space.

* FUNCION PARA ADICIONAR LOS MENSAJES EN EL LOG CON TEXTO LIBRE.

CALL FUNCTION 'BAL_LOG_MSG_ADD_FREE_TEXT'

EXPORTING

i_log_handle     = g_log

i_msgty          = 'I'            "tipo de error

i_text           = ll_msg

EXCEPTIONS

log_not_found    = 1

msg_inconsistent = 2

log_is_full      = 3

OTHERS           = 4.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.
ENDFORM.

FORM LOG_DISPLAY.


* FUNCION PARA MOSTRAR EL LOG IMPLEMENTADO

CALL FUNCTION 'BAL_DSP_LOG_DISPLAY'.
ENDFORM.

Visualización del Application Log

ABAP-007-Display-Log

Para tener en cuenta:
  • Los Application Log tienen carácter de temporarios, y están para monitorear el curso de una aplicación. No es el objetivo actuar como registros definitivos de datos críticos. Los datos que deben ser almacenados por largo tiempo por razones de seguridad deben almacenarse con los documentos de cambio.
  • Se se utiliza application logging en escenarios complejos, por ejemplo, muchísimos usuarios concurrentes sobre la aplicación (Ej. venta de pasajes distribuida), deberá contemplarse los principios de programación fundamentales, usando colas de mensajes, save, commit, etc.
  • Pueden encontrarse respuestas a varias inquietudes en las notas de OSS, utilizando como criterio de búsqueda "BC-SRV-BAL". También pueden encontrarse programas ejemplo de application logging pulsando F4 sobre “SBAL_DEMO_*” en la transacción SE38.