PDA

Ver la Versión Completa : Determinar las Funciones que Utiliza un Programa


andrebas
04/10/12, 21:38:44
Buen día,

He estado desarrollando reporte para auditoria en el que se necesito determinar las funciones que utiliza un programa, alguien conoce alguna función o si están almacenada esta información en tablas transparentes

Agradezco de antemano su colaboración.

vanesamacri
05/10/12, 13:57:01
¡Hola!

Desconozco si existe un reporte estándar que haga específicamente lo que pedís. Hice una búsqueda rápida por internet y no tuve éxito. Tampoco cuento con mucho tiempo como para ponerme a debuguear el código del buscador de SAP.

Por eso, adjunto al final de este mensaje, un muy breve código que acabo de hacer en un ratito libre. Es muuuuuuy básico pero quizás te ayude como referencia para lo que necesitás hacer vos.

¿Qué es lo que hace? Básicamente, levanta el código fuente del programa ingresado en el parámetro en pantalla de selección. Dicho código se encuentra en base de datos, pero no en formato legible (campo DATA de tabla transparente REPOSRC).

Una vez que tiene el código fuente en memoria, busca en el mismo las llamadas a funciones (CALL FUNCTION). Finalmente, muestra en pantalla los aciertos encontrados.

Adjunto capturas de pantalla de una ejecución:

http://www5.picturepush.com/photo/a/10682993/img/Anonymous/CAPTURAS.png

Se puede apreciar que en pantalla de salida se muestra el listado de los llamados a funciones que contiene el programa ingresado en pantalla de selección. No muestra los llamados duplicados a una misma función.

NOTA: reitero lo básico que es este código. No contempla, entre muchas otras cosas, la lectura de includes de un reporte ingresado (así como se encuentra, se deberían ingresar los distintos includes en el parámetro de pantalla de selección para consultarlos de manera individual).

Espero que al menos te sea útil como referencia para encarar lo que estás haciendo.

Saludos.


*&---------------------------------------------------------------------*
*& Report Y_PRUEBA *
*& *
*&---------------------------------------------------------------------*

REPORT y_prueba .


TYPES: BEGIN OF ty_cadena,
linea(300) TYPE c,
END OF ty_cadena.

DATA: i_codigo TYPE STANDARD TABLE OF ty_cadena,
r_codigo TYPE ty_cadena,
i_funciones TYPE STANDARD TABLE OF ty_cadena,
r_funciones TYPE ty_cadena.

***Comilla simple.
CONSTANTS: c_d TYPE char1 VALUE ''''.


***Parámetro correspondiente al nombre del programa que se desea consultar.
PARAMETERS: p_prog TYPE rs38m-programm.


***Se recupera de base de datos el código fuente del programa.
READ REPORT p_prog INTO i_codigo.


***Se recorre la tabla interna que contiene el código fuente del programa consultado.
LOOP AT i_codigo INTO r_codigo.

***Se suprimen espacios blancos innecesarios.
CONDENSE r_codigo.
***Se convierte el texto a mayúscula.
TRANSLATE r_codigo-linea TO UPPER CASE.

***Se verifica si la línea actual contiene un llamado activo a una función.
IF r_codigo-linea(13) EQ 'CALL FUNCTION'.

***Se almacena el nombre de la función llamada.
r_funciones-linea = r_codigo-linea+13.
***Se suprimen las comillas.
REPLACE ALL OCCURRENCES OF c_d IN r_funciones-linea WITH space.
***Se suprimen espacios blancos innecesarios.
CONDENSE r_funciones-linea.
***Se convierte el texto a mayúscula.
TRANSLATE r_funciones-linea TO UPPER CASE.

***Se almacena en tabla interna final.
APPEND r_funciones TO i_funciones.

ENDIF.

ENDLOOP.

SORT i_funciones BY linea.
***Se eliminan los duplicados a llamados de la misma función.
DELETE ADJACENT DUPLICATES FROM i_funciones.

***Se muestran en pantalla las funciones llamadas por el reporte consultado.
LOOP AT i_funciones INTO r_funciones.

WRITE:/ r_funciones-linea.

ENDLOOP.

andrebas
05/10/12, 14:54:12
Muchas Gracias por la pronta respuesta.. y ese programa se ve de gran utilidad lo voy a implementar en una subrutina para que me guarde esa info en una itab..

Saludos

ballan
09/10/12, 10:22:50
1.- Llamar a la transaccion SE30

2.- Ingresamos el nombre de transaccion, programa o funcion de la cual deseams saber a que funciones llama y pulsamos ejecutar

3.- Ejecutamos la transaccion, programa o funcion con los parametros necesarios, etc y una vez terminado el proceso veremos que nos devuelve a la pantalla principal de la SE30

4.- Pulsamos el boton EVALUAR

5.- Nos saldra un resumen indicando cuanto consumo hay de BBDD, de ABAP, etc veremos que hay un boton que pone LISTA RANKING, pulsamos dicho boton

6.- A continuacion nos aparecera toda la secuencia de metodos, call funcion, performs, PBO, PAI que se han ido ejecutando, solo faltaria descargarse esta lista a excel o algo asi y filtra todos los call function

La ventaja que tiene esto es que hay programas que por ejemplo tienen un call function pero nunca se utiliza, por medio de esta transaccion vemos lo que se ejcuta efectivamente

vanesamacri
09/10/12, 11:36:49
1.- Llamar a la transaccion SE30

2.- Ingresamos el nombre de transaccion, programa o funcion de la cual deseams saber a que funciones llama y pulsamos ejecutar

3.- Ejecutamos la transaccion, programa o funcion con los parametros necesarios, etc y una vez terminado el proceso veremos que nos devuelve a la pantalla principal de la SE30

4.- Pulsamos el boton EVALUAR

5.- Nos saldra un resumen indicando cuanto consumo hay de BBDD, de ABAP, etc veremos que hay un boton que pone LISTA RANKING, pulsamos dicho boton

6.- A continuacion nos aparecera toda la secuencia de metodos, call funcion, performs, PBO, PAI que se han ido ejecutando, solo faltaria descargarse esta lista a excel o algo asi y filtra todos los call function

La ventaja que tiene esto es que hay programas que por ejemplo tienen un call function pero nunca se utiliza, por medio de esta transaccion vemos lo que se ejcuta efectivamente

Interesante manera.

Tengo una única duda: al ejecutar mediante esta transacción, ¿hay impacto en base de datos? A lo que me refiero es, si el programa el cual estoy intentando averiguar sus funciones, tiene lógica que impacta sobre la base de datos, ¿al ejecutarlo mediante la SE30 impactará sobre la misma o se ejecuta en alguna especie de modo test sin modificar la base de datos?

Gracias.

ballan
09/10/12, 11:56:54
Si

Lo que ejecutes con la SE30 sera como si lo hubieras ejecutado en real