sap: modularización en abap
DESCRIPTION
Tutorial sobre la creación de subrutinas en ABAPTRANSCRIPT
MODULARIZACIÓN EN ABAP
• Podemos modularizar ABAP, esto es dividir el programa en variaspartes, mediante el uso de prodecimientos o subrutinas (tambiénllamados métodos o funciones en otros lenguajes). Esto hace queel código sea más fácil de entender, de mantener, y de encapsularlos datos.
• Esto último se consigue porque los datos que se manejan en unprocedimiento tan sólo están activos dentro del procedimiento ydesaparecen cuando este se ha terminado de ejecutar.
• Para crear una subrutina o procedimiento usamos la instrucciónFORM .....ENDFORM, por ejemplo para crear un procedimientollamado uno que escriba en pantalla la palabra "uno"
FORM uno.WRITE / 'uno'.
ENDFORM.
• Para llamar al procedimiento anterior usamos la instrucciónPERFORM
PERFORM uno.
• Cada vez que escribamos la anterior instrucción se ejecutará elcódigo dentro del procedimiento uno.
• Podemos llamar a un procedimiento dentro de otro procedimiento,por ejemplo
FORM dos.
1
WRITE / 'dos'.PERFORM uno.
ENDFORM.
• Podemos pasar parámetros a una subrutina mediante la instrucciónUSING VALUE o mediante la instrucción CHANGING.
• Cuando pasamos un parámetro con CHANGING en realidad se creaun puntero al dato que le queremos pasar a la subrutina. Esto es loque se llama pasar un parámetro por referencia. Si el código dela subrutina altera el contenido del parámetro esto afecta alprograma en su conjunto.
DATA x TYPE i VALUE 1.PERFORM suma CHANGING x.FORM suma CHANGING y TYPE i.
y = y + 1.ENDFORM.
• En este caso el valor de la variable x se incrementa en uno cadavez que llamamos o ejecutamos este procedimiento, ya que lo queen realidad pasamos es una referencia o puntero que contiene ladirección de x.
• Cuando usamos la instrucción USING VALUE en realidad estamoshaciendo una copia del parámetro y esto es lo que pasamos a lasubrutina. Esto es lo que se llama pasar un parámetro por valor,por ejemplo
DATA x TYPE i VALUE 1.PERFORM suma USING VALUE x.FORM suma USING VALUE y LIKE x.
y = y + 1.
2
WRITE / y.ENDFORM.
• En este caso al ejecutar la subrutina aparece en pantalla un 2, yaque este es el valor de y. Sin embargo el valor de x permaneceinalterado, ya que tan sólo hemos pasado una copia.
• La variable y tan sólo existe durante el tiempo en que se estáejecutando la subrutina suma, y desaparece con la instrucciónENDFORM.
• Si usamos la intrucción USING es como si estuviéramos usando lainstrucción CHANGING (es decir estamos pasando un parámetropor referencia) , pero es costumbre usar esta instrucción tan sóloen el caso en que al ejecutar el procedimiento no se altere el valordel parámetro, por ejemplo
DATA x TYPE i VALUE 1.PERFORM mostrar USING x.FORM mostar USING y LIKE x.
WRITE / y.ENDFORM.
• En este caso hemos pasado una referencia (es decir la dirección dela variable x) al procedimiento mostrar. Por lo tanto, cuando semuestra en pantalla el valor de y, en realidad lo que se muestra esel valor realmente almacenado en x, no una copia.
• Si usamos la instrucción CHANGING VALUE es como si usáramos lainstrucción USING VALUE, es decir, estamos pasando un parámetropor valor (una copia). La diferencia es que al terminarse deejecutar el procedimiento, este devuelve una copia del valor quetenga el parámetro local, por ejemplo,
3
DATA x TYPE i VALUE 1.x = PERFORM sumar CHANGING VALUE x.
WRITE x.FORM sumar CHANGING VALUE y LIKE x.
y = y + 1.ENDFORM.
• En este programa el procedimiento sumar añade 1 al parámetroque se pasemos y devuelve el parámetro modificado. Comoasignamos a x el parámetro que devuelve el procedimiento sumar,lo que se muestra por pantalla es 2.
• Podemos pasar dos (o más) parámetros. En este caso el orden enque se pasan los parámetros es importante, ya que los parámetrosse asignan por el orden en que se escriben en la interfaz (es deciren la instrucción PERFORM). Veamos un ejemplo.
DATA x TYPE i VALUE 4.DATA y TYPE i VALUE 2.PERFORM dividir USING VALUE x y.FORM dividir USING VALUE a LIKE x
b LIKE y.DATA result TYPE f.result = a / b.WRITE result.
ENDFORM.
• En este caso el resultado que aparecerá por pantalla será un 2, yaque primero pasamos el valor de x (una copia) y luego el valor dey (otra copia).
• También podemos pasar un parámetro por valor y otro porreferencia, por ejemplo
4
DATA x TYPE i VALUE 4.DATA y TYPE i VALUE 2.DATA z TYPE i VALUE 10.PERFORM sumar USING VALUE x y
CHANGING z.WRITE z.FORM sumar USING VALUE a LIKE x
b LIKE y.CHANGING c LIKE z.
DATA c TYPE i.c = a + b.
ENDFORM.
• En este caso se mostrará por pantalla el valor de 6, puesto queeste es el valor que tendrá z una vez que se ha ejecutado lafunción sumar, teniendo en cuenta que le hemos pasado del valorde x e y por valor (una copia) y le hemos pasado una referencia(una dirección de memoria) de la variable z.
5