SAP Referencia de utilización (Where-Used List)

Una de las funcionalidades importantes dentro de nuestro trabajo día a día, sobre todo si estamos asumiendo un rol técnico, pero también como funcional, es saber donde se usan los objetos de SAP, saber buscar.

Un buen sabueso sabe seguir las pistas

Pongamos ejemplos.

  • Estamos ejecutando un proceso o una aplicación y nos aparece un mensaje, queremos saber donde se lanza ese mensaje.
  • Tenemos un campo en pantalla y queremos averiguar en qué tabla de base de datos se guarda. O en que BAPI se usa.
  • Tenemos una tabla de base de datos y queremos saber donde se actualiza.
  • Queremos buscar un literal en el código fuente de todos los objetos de un paquete.
  • Queremos documentar un sistema en el cual no hemos participado desde el principio.

Mensajes

Estas ejecutando un proceso, sea online o batch, sea en SAP GUI o en WebUI, y te salta un mensaje de error. No tienes idea de porqué sale, qué lo llama y necesitas identificarlo. Te has debugueando (olé) todo el proceso y no lo sacas. Necesitas saber el punto donde se lanza ese mensaje. Calma, vamos a ver como sacarlo vía referencia de utilización.

Identificando el mensaje

Para buscar donde se lanza un mensaje primero hay que saber identificarlo, es decir, saber qué mensaje es el que estamos buscando.

Mensajes en SAP GUI

Cuando estamos ejecutando un report o una transacción en SAP GUI veremos en la barra inferior el mensaje que nos salta. Al pulsar sobre esa barra obtendremos un popup con la información detallada del mensaje.

Pulsando sobre el mensaje tenemos este popup.
Donde vemos el numero de mensaje y la clase de mensaje

Si pulsamos el botón se nos abrirá otro popup con datos más técnicos.

Donde posicionando el cursor en uno de los campos y dando a Navegar podemos ver el punto del código donde se llama. Pero a veces con esto no vale, así que nos quedamos además con la clase de mensaje y el número de mensaje.


Mensajes en Jobs de Fondo

Cuando se ejecuta un proceso en fondo no hay nadie para ver el mensaje cuando se produce. En este caso el estándar guarda cada mensaje que se da en el log del Job.

Para ello entraremos en la SM37, seleccionando el job que queremos y pulsando el botón Log job.

Mensajes en WebUI

En WebUI los mensajes aparecen, dependiendo del skin que estemos usando, en la barra superior o en la inferior. Si nos posicionamos con el cursor encima del texto del mensaje veremos el Tipo, Número, clase de mensajes y Variables de ese mensaje.

Si no lo ves es porque tienes que ajustar el parámetro BSPWD_USER_LEVEL al máximo (9) en tu perfil de usuario en la transacción SU3 (o dentro de Parámetros de la SU01).

¿Dónde se usa ese mensaje?

Una vez tengamos identificado la clase de mensajes y el Número de mensaje podemos ir a la transacción SE91 a visualizar el mensaje.

Seleccionando el número de mensaje y pulsando el botón <> obtendremos todos los puntos de código donde se llama explícitamente el mensaje.

La importancia de usar la sentencia MESSAGE

Porque es importante el matiz «explícitamente» ya que si un mensaje no es llamado con la sentencia MESSAGE la Referencia de Utilización no lo encontrará en el código.

Por ejemplo cuando un mensaje se añade vía un Módulo de Función o un método de una clase. Esto es muy habitual cuando se manda un mensaje en el WebUI. En estos casos no vamos a encontrarlo y tendremos que usar la búsqueda por literal (ver sección «Buscar en código»)

Por lo tanto, es importante, cuando añada os un mensaje en nuestro código, si se realiza vía módulo de función o método de clase que pongamos la siguiente sentencia.

IF 1 = 2. MESSAGE<tipo><número>(clase). ENDIF.

Ese mensaje nunca se va a llamar puesto que el IF nunca se cumplirá. Pero sirve para encontrar el mensaje en el código usando el botón de Referencia de Utilización desde la SE91.


Objetos del diccionario

Como objetos del diccionario de datos me refiero a elementos de datos, dominios, estructuras, tipos tabla, vistas y tablas de base de datos. Vamos, aquello que vemos en la transacción SE11.

Al entrar en cualquiera de estos objetos veremos el botón que nos permitirá buscar donde se usa ese objeto en otras entidades, pudiendo además elegir sobre qué subconjunto elegir.

Además dándole al botón podemos acotar la búsqueda sobre los objetos de un paquete concreto o por nombre de objeto.

El resultado es una lista de dónde se usa el objeto dentro del ámbito que hayamos seleccionado.


Programas, Clases y Módulos de función

Lo mismo que con los Objetos del diccionario de datos, la diferencia es que desde un programa, MF o Método de una clase solo podrán ser usados en otro código fuente. Con lo que algo más se acota por el tipo de objeto y sus posibles usos.


No me funciona el botón

Si no funciona la búsqueda puede ser que falte por reconstruir el índice de los objetos SAP en el sistema. Para ello tenemos que ejecutar los siguientes reports:

  • SAPRSEUC – Para reconstruir el índice de los objetos de cliente (Z* y Y*)
  • SAPRSEUB – Para reconstruir el índice de los objetos de SAP

Buscar en el código

A pesar de todas las opciones anteriormente descritas, es posible que necesitemos buscar algo que hayamos usado en código o que use el estándar. Imagínate que quieres recuperar sitios donde se ha usado un parámetro de un Módulo de Función, un hardcode concreto, un comentario, un mensaje llamado vía BAPI o una sentencia concreta.

Para ello yo siempre uso (y lo uso muy a menudo) el report estándar RS_ABAP_SOURCE_SCAN.

Para mi es una de los reports que más uso en mi día a día. Para buscar algo que hice y no recuerdo o para buscar como el estándar usa determinada lógica, MF o Clase. Mi forma de usarla siempre es poniendo el String buscado y el paquete. Si estoy buscando código Z pongo como paquete Z* y si no ya voy jugando.

Por ejemplo si busco así:

Recibo esta información:

También suelo jugar con el campo «Lugar del hallazgo +/- líneas para que muestre más o menos código en el resultado.

Como problemas son:

  • Si no acotas bien el paquete puede ser que busque en demasiados objetos, tardando en realizar la búsqueda.
  • La lista de resultados puede ser demasiado grande

En Conclusión

Estamos para aprender, cualquiera que tenga otra idea o que use otros métodos me gustaría saberlos. Yo esto lo uso continuamente, cualquiera de las soluciones que explico. Sobra decir que la experiencia y la intuición también ayudan a encontrar aquello que buscas, pero eso no se puede explicar.

Un buen sabueso sabe seguir las pistas.

2 comentarios sobre “SAP Referencia de utilización (Where-Used List)

Deja un comentario