ABAP Completo

AB AP WORK S HOP Version 1.0 Xioma Consulting Centroamérica 2007 Xioma Consulting - ABAP WORKSHOP 1 I N TROD U CCI

Views 381 Downloads 35 File size 4MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

AB AP WORK S HOP Version 1.0

Xioma Consulting Centroamérica 2007

Xioma Consulting - ABAP WORKSHOP

1

I N TROD U CCI ÓN ABAP (Advanced Business Application Programming), o ABAP/4 es un lenguaje de programación desarrollado por la empresa alemana SAP (Systeme, Anwendungen, Produkte in der Datenverarbeitung)1. Los alcances del lenguaje ABAP se han ampliado según se ha ido desarrollando el escenario de desarrollo de software. Han sido actualizaciones periódicas, como la adición de instrucciones orientadas a objetos dentro del lenguaje y herramientas más poderosas para el desarrollo de formularios. ABAP fue desarrollado en la década de los 80 a partir de una investigación que produjo toda una serie de lenguajes de cuarta generación de aplicación específica y cuyo objetivo apuntaba a la producción de alto nivel de reportes. Fue incluido al producto SAP R/2. El objetivo de éste producto era brindar una aplicación de negocios en mainframe para grandes corporaciones para la administración de materiales, finanzas y contabilidad. Originalmente se suponía que los usuarios del lenguaje de programación serian usuarios, que pudieran manipular la información por sí mismos, pero el lenguaje resultó ser demasiado complejo para usuarios ordinarios, haciendo necesario que fueran programadores quienes lo manipularan debido a que se requería de una alta destreza.

Según fueron disminuyendo las

consideraciones de desempeño, el lenguaje empezó a convertirse en un componente central del sistema SAP. En los 90, SAP empezó a convertir todo el código clave del SAP R/3 a ABAP, de tal forma que para el año 2003 el proyecto SAP se basaba ya en ABAP para las funciones más básicas.

1

Systems, Applications & Products in Data Processing

Xioma Consulting - ABAP WORKSHOP

2

ARQU I TE CTU RA D E S AP El sistema R/3 posee una arquitectura de software modular que sigue los principios de la arquitectura Cliente/Servidor. El modelo en 3 capas compuesto por una capa de presentación, una de aplicación y una de base de datos; pueden estar alojadas en diferentes computadores sirviendo esto como base para la escalabilidad del sistema.

Capa de presentación: Esta es la capa donde se ejecuta la interfase de usuario (SAPGUI) para brindar el acceso a las aplicaciones por parte de los usuarios finales. Capa de Aplicación: Es en esta capa donde se ejecuta ABAP, tanto las aplicaciones desarrollas por SAP como las desarrolladas por los usuarios. Desde esta capa ABAP envía y recibe datos a la capa de base de datos. Capa de Base de datos: Este es el nivel más bajo en el modelo, y es donde se administra la información con la ayuda del sistema de administración de base de datos relacional (RDBMS). Este nivel almacena no solamente datos maestros y transaccionales, sino también los programas y metadatos que describen el sistema R/3 son administrados y almacenados acá. Toda la distribución técnica del software es independiente de la ubicación física del hardware, tanto vertical como horizontalmente.

Xioma Consulting - ABAP WORKSHOP

3

TRAN S P ORT ORG ANI Z E R El Transport Organizer permite la administración de las órdenes de transporte de un usuario.

Con la opción de visualización se puede ver la lista objetos locales y aquellos que se encuentren en una orden de transporte esperando a ser liberados. Las órdenes que pertenecen a la clase Workbench incluyen todos los objetos relacionados con el desarrollo de aplicaciones. En el caso de las órdenes de Customizing, éstas contienen a los objetos generados por los cambios en la parametrización del sistema. Existen dos estados posibles para las ordenes, las liberadas que son aquellas ordenes que están listas para ser transportadas a otro mandante y las modificables que son aquellas ordenes que están esperando una liberación. Las órdenes liberadas pueden ser visualizadas desde una fecha específica.

Xioma Consulting - ABAP WORKSHOP

4

Para liberar la orden, se debe liberar primero todas las tareas incluidas en la orden de transporte y posteriormente la orden. Se libera un objeto a la vez, seleccionándolo y pulsando el botón LIBERAR DIRECTAMENTE . Solamente se pueden liberar las ordenes propias, por lo que si fuera necesario liberar una tarea o una orden que perteneciera a otro usuario es necesario reasignarla utilizando el botón MODIFICAR TITULAR .

Xioma Consulting - ABAP WORKSHOP

5

COMP OS I CI ON D E U N P ROG RAM A AB AP Código fuente Es la parte esencial del programa que contiene todas las sentencias ABAP que dirigen la mayor parte del comportamiento del programa.

Pantallas Contiene toda la disposición de pantallas y la lógica de flujo asociada a las mismas. Normalmente se crea la disposición de pantallas utilizando una herramienta llamada screen painter o desde el ABAP Workbench. Sin embargo existen pantallas especiales, como el selection screen en los reportes, que poseen una disposición y lógica que se controla únicamente a través de sentencias ABAP.

Interfase Contiene todas las opciones de los menús, la barra estándar de herramientas, la barra de herramientas de aplicación y los botones. Contiene también los títulos y status.

Elementos de Texto Estos son dependientes del idioma. Puede ser traducidos directamente desde la herramienta de mantenimiento de textos o utilizando una herramienta especial de traducción.

Documentación La documentación es dependiente del idioma. Es importante recordar escribir la documentación orientada al usuario. En caso de querer documentar código, se hace a través de comentarios en el código directamente.

Variantes Las variantes permiten predefinir valores en la pantalla de selección (selection screen) de los programas. Esto suele ser muy útil durante los periodos de prueba o para la ejecución de tareas repetitivas.

Xioma Consulting - ABAP WORKSHOP

6

E D I TOR El editor ABAP se invoca a través de la transacción SE38, o por la ruta del menú SAP HERRAMIENTAS->WORKBENCH ABAP->DESARROLLO->SE38 - EDITOR ABAP.

Imagen Inicial

En la imagen inicial del editor se indica el nombre del programa que se desea tratar, y cuenta con las siguientes opciones en la barra de herramientas:

1. Verificar Esta opción se encarga de revisar la sintaxis del programa.

Xioma Consulting - ABAP WORKSHOP

7

2. Activar La activación ejecuta una revisión sintáctica, almacena y posteriormente deja disponible al programa para ser ejecutado en el ambiente del R/3. 3. Ejecutar Ejecuta el programa. 4. Referencia de Utilización Las referencias de utilización sirven para identificar otros objetos del ambiente que utilicen el programa indicado.

5. Análisis de Entorno Verifica todos los objetos de repositorio a la cual se les hace referencia dentro del programa. 6. Manual Online Invoca la ayuda de ABAP disponible en línea en el sistema. 7. Borrar Elimina el programa, y otros componentes que formen parte del mismo de serle indicado.

Xioma Consulting - ABAP WORKSHOP

8

8. Copiar Crea una copia del programa con otro nombre.

9. Renombrar Cambia el nombre del programa.

10. Debugging Ejecuta el programa a través del de la herramienta de Debugging 11. Con Variante Ejecuta el programa con una variante creada con la opción de variantes.

Xioma Consulting - ABAP WORKSHOP

9

12. Variantes Crea una variante para el programa, siempre y cuando el programa reciba algún tipo de parámetro de entrada.

13. Crear Crea el programa e invoca el editor de código.

Xioma Consulting - ABAP WORKSHOP

10

14. Visualizar Invoca el editor de código en modo de solo visualización. 15. Modificar Invoca el editor de código para modificar un programa que ya existe.

Editor de Código El editor de Código es el ambiente donde se encuentran las herramientas básicas de desarrollo y donde se introduce el código ABAP.

Xioma Consulting - ABAP WORKSHOP

11

La barra del editor contiene las siguientes herramientas:

1. Objeto Anterior Se desplaza al objeto anterior cuando existe más de un objeto en la lista de objetos. 2. Objeto Siguiente Se desplaza al objeto siguiente en la lista de objetos cuando existe más de un objeto en la lista de objetos.

3. Visualizar Modificar Cambia el estado del editor entre modo de visualización o modo de modificación. 4. Activo Inactivo Cambia el estado del programa entre activo e inactivo. 5. Otro Objeto Ésta opción permite cambiar el objeto actual por otro que se desee editar. Se divide en varias categorías de las cuales las más importantes son: diccionario de datos, bibliotecas de clases, programa y grupo de funciones.

Xioma Consulting - ABAP WORKSHOP

12

6. Verificar Ésta opción se encarga de revisar la sintaxis del programa. 7. Activar La activación ejecuta una revisión sintáctica, almacena y posteriormente deja disponible al programa para ser ejecutado en el ambiente del R/3. 8. Verificar (Ejecutar) Ejecuta el programa. 9. Referencia de Utilización Las referencias de utilización sirven para identificar otros objetos del ambiente que utilicen el programa indicado. 10. Visualizar Lista de Objetos Ejecuta el ABAP Development Workbench donde se muestran los objetos relacionados con el programa. 11. Visualizar Ventana de Navegación Muestra la ventana de navegación que consiste en una pila con los últimos objetos revisados. 12. Imagen Completa Muestra la venta del objeto en revisión maximizada. 13. Ayuda Invoca la ayuda del sistema. 14. Fijar/Borrar Break Point Si el programa se encuentra en modo activo, se fija un Break-point en la línea actual, que será ejecutado solamente para el usuario que lo fijó. 15. Patrón Inserta una plantilla a partir de la línea actual. Sobre todo en el caso de la invocación de funciones o la invocación del método de un objeto, ésta función puede ser de gran utilidad para conocer los parámetros que pueden ser utilizados.

Xioma Consulting - ABAP WORKSHOP

13

16. Pretty Printer Ajusta el formato del código para que sea mucho más fácil de leer por el usuario.

Creación de un nuevo programa Los programas en SAP que no pertenecen al estándar deben iniciar su nombre con la letra Z, distinguiéndose así los programas de usuarios. En la imagen inicial se digita el nombre del programa y se utiliza el botón CREAR. En éste momento se deben llenar las propiedades básicos del programa en la ventana de atributos.

Xioma Consulting - ABAP WORKSHOP

14

Entre los tipos de programa que se pueden crear, están los siguientes:

1. Programa ejecutable (1) Estos son los programas que pueden iniciarse directamente sin código de transacción y en fondo, desde la transacción SE38 o la SA38. 2. Modulpool (M) para dynpros2 SAP Screen Painter Contiene pasos para procesar módulos de dynpro de las transacciones y sólo puede llamarse mediante un código de transacción o una función de menú.

3. Report de Include (I) Contiene un código de programa que no puede ejecutarse por sí sólo. Esta parte de programa puede incluirse en otro programa mediante la instrucción INCLUDE. 4. Pool de subrutinas (S) Contiene partes de programa (FORM) que pueden ser invocadas desde instrucciones PERFORM externas. 5. Grupo de funciones (F) Contiene módulos de funciones. Estos grupos y módulos se administran en la biblioteca de funciones, que se invoca por medio de la transacción SE37. 6. Pool de interfaces (J) Contiene interfaces. El generador de clases gestiona las interfaces y las clases. 7. Pool de clases (K) Contiene clases. El generador de clases gestiona las interfaces y las clases.

El status del programa indica, si se trata de un programa productivo, de test o de sistema. Dependiendo de esta propiedad se genera cierto tipo de control en la administración de los programas.

2

Un dynpro se suele llamar una pantalla de SAP

Xioma Consulting - ABAP WORKSHOP

15

La propiedad de grupo de autorizaciones indica a que grupo ha sido asignado el programa, sirviendo como referencia para validar los derechos que un usuario pueda tener sobre éste. El sistema verificará si el usuario pertenece a este grupo de autorizaciones: •

Antes de lanzar o editar un programa



Al actualizar los atributos



Al utilizar otra utilidad del desarrollo de programas

Al ejecutar la opción de grabar, es necesario indicar la clase de desarrollo (paquete) a la que pertenece el programa, o definirlo como un objeto local. Las clases de desarrollo o paquetes se agrupan a los objetos que pertenecen al ABAP Workbench. La asignación a una clase de desarrollo se indica en el catálogo de objetos. Los objetos locales pertenecen a la clase de desarrollo $TMP (Objeto Local) y no son transportables.

Una vez seleccionada la clase de desarrollo, si ésta no es local, el sistema procede a solicitar una orden de transporte válida a la que se encontrará atado el programa. Esta puede ser una orden ya existente o una orden nueva. Las órdenes de transporte pueden ser revisadas y editadas por medio de la transacción SE09.

Xioma Consulting - ABAP WORKSHOP

16

Para crear la orden se oprime el botón de crear , posteriormente se le asigna la descripción a la nueva orden y se graba . El sistema asignará automáticamente un número para la orden de transporte y otro para la nueva tarea vinculada al programa.

Programa Hola Mundo Los programas tipo REPORT son el tipo más básico, y se utilizan primordialmente para la generación de reportes, batch inputs3 e interfases. Un ejemplo de un programa tipo REPORT es el siguiente: REPORT ZHOLA no standard page heading. WRITE 'Hello World!'.

Todos los programas ejecutables deben iniciar con la instrucción REPORT , el parámetro adicional NO STARNDARD PAGE HEADING elimina del reporte la línea que imprime el título del reporte. Para imprimir un texto en la pantalla se utiliza la instrucción WRITE . Una vez finalizado el programa es necesario activarlo y posteriormente puede ser ejecutado .

3

Programas de carga., usualmente a partir de archivos planos.

Xioma Consulting - ABAP WORKSHOP

17

Los strings o cadenas de caracteres en ABAP se encierran entre comillas simples. La comilla doble se utiliza para introducir un comentario.

Xioma Consulting - ABAP WORKSHOP

18

E V E NTOS ABAP es un lenguaje estructurado orientado a eventos, los cuales se disparan dependiendo de una condición. El código dentro de cada evento se ejecuta siguiendo el clásico comportamiento TOP-DOWN. Los eventos más utilizados se presentan a continuación en el orden que son ejecutados:

LOAD-OF-PROGRAM Este evento se ejecuta justamente después de que el sistema ha cargado un programa de tipo 1, M, F o S en memoria. Siendo este bloque ejecutado únicamente una vez por cada programa en cada sesión interna. Sintaxis: LOAD-OF-PROGRAM.

INITIALIZATION Este evento se ejecuta antes de que se muestre la pantalla de selección. Normalmente es utilizado para inicializar valores clave para la ejecución del programa. Sintaxis: INITIALIZATION.

Ejemplo: PARAMETERS QUAL_DAY TYPE D DEFAULT SY-DATUM. INITIALIZATION. QUAL_DAY+6(2) = '01'. QUAL_DAY = QUAL_DAY - 1.

START-OF-SELECTION Se puede interpretar como el evento principal y es ejecutado justo después del evento SELECTION-SCREEN. Sintaxis: START-OF-SELECTION.

Ejemplo: START-OF-SELECTION.

Xioma Consulting - ABAP WORKSHOP

19

WRITE ‘Hola Mundo!’.

La instrucción REPORT siempre tiene implícito el evento START-OFSELECTION. Por lo tanto todo el código entre la instrucción REPORT y el siguiente evento se ejecuta en el START-OF-SELECTION.

END-OF-SELECTION Se procesa después que toda la información se ha leído, y justo antes de que se muestre la impresión del reporte.

TOP-OF-PAGE Se ejecuta antes que se imprima información en la primera página de un reporte. De esta forma permite la creación de una cabecera definida por el programador siempre que se haya suprimido la cabecera estándar (REPORT NO STANDARD PAGE HEADING). Las líneas definidas en el TOP-OF-PAGE se mantienen fijas al visualizar el reporte en pantalla a la hora de realizar un desplazamiento vertical. Por lo que no es conveniente utilizar toda una página como cabecera dado que el usuario no podría desplazarse.

AT SELECTION-SCREEN Este evento solamente tiene sentido en los reportes. El evento se ejecuta una vez que se haya procesado la pantalla de selección. En el caso que se genere un error todos los campos presentes en la pantalla de selección estarán disponibles nuevamente para recibir datos.



Sintaxis:

AT SELECTION-SCREEN {OUTPUT} | {ON } {ON HELP-REQUEST}FOR | {ON VALUE-REQUEST FOR } {ON EXIT-COMMAND}. .

Ejemplo: Parameters:

numero(2).

AT SELECTION-SCREEN. IF NUMERO > 10. message s333(s1) with ‘Número mayor que 10'. ENDIF.

Xioma Consulting - ABAP WORKSHOP

20

Si se utiliza la adición OUTPUT se ejecutara el código dentro del AT SELECTION-SCREEN antes que el usuario introduzca información en los campos. Este evento se ejecuta después del INITIALIZATION y el LOAD-OF-PROGRAM. La adición ON asume que se ejecutará el bloque cuando un parámetro o select-options ha sido modificado. Esto es muy útil cuando se desea realizar validaciones sobre los campos en la pantalla de selección, pues en caso de enviar un error el cursor se quedará posicionado sobre el parámetro indicado en el AT SELECTION-SCREEN. En el caso del ON HELP-REQUEST FOR, se espera la ejecución del bloque cuando se oprime el botón de ayuda (F1) sobre el campo indicado después del FOR , igualmente para el ON VALUE-REQUEST FOR, será invocado el bloque al oprimir el botón de la ayuda de búsqueda (F4). ON EXIT-COMMAND ejecutará el bloque cuando el usuario oprima los botones de BACK (

), EXIT(

) o CANCEL (

).

AT LINE-SELECTION El evento se ejecuta al oprimir la tecla F2 o al dar doble click sobre una línea en la pantalla de salida del reporte. El evento asigna a la variable de ambiente SYUCOMM el valor PICK. El valor de la linea seleccionada quedará en la variable de ambiente SY-LISEL. Si a la tecla F2 se le cambia el código PICK, el doble click automáticamente asume el nuevo código. Esto provocará que se deba evaluar en en el bloque de AT USER-COMMAND.



Sintaxis:

AT LINE-SELECTION.

Ejemplo: AT LINE-SELECTION. MESSAGE S333(S1) WITH SY-LISEL.

Xioma Consulting - ABAP WORKSHOP

21

AT USER-COMMAND Este bloque se ejecutará cuando el sistema ejecute un código de función, en otras palabras cuando el usuario ejecute un evento en la pantalla. Cuando la función es PICK o cuando inicia con el símbolo ‘% ‘ el bloque no se ejecuta. A continuación se muestra una tabla con los códigos de función estándar:

CÓDIGO

DE CIÓN

F U N-

DESCRIPCIÓN

BACK

Regresar

P-

Hacer Scroll a la página anterior

P--

Hacer Scroll a la primera página

P+

Hacer Scroll a la página siguiente

P++

Hacer Scroll a la última página

PL-

Hacer Scroll a la primera línea de la página

PL-n

Hacer Scroll n líneas hacia atrás

PL+n

Hacer Scroll n líneas hacia adelante

PNOP

Sin efecto

PP-

Hacer Scroll una página hacia atrás

PP-n

Hacer Scroll n páginas hacia atrás

PPn

Hacer Scroll al inicio de la página n

PRI,PRINT

Imprimir

PS--

Hacer Scroll a la primera columna

PS++

Hacer Scroll a la última columna

PS-

Hacer Scroll una columna a la izquierda

PS-n

Hacer Scroll n columnas a la izquierda

PS+

Hacer Scroll una columna a la derecha

PSn

Hacer Scroll n columnas a la derecha

PZn

Hacer Scroll a la línea n

RW

Cancelar

Xioma Consulting - ABAP WORKSHOP

22

Los siguientes códigos éstandar no pasan por el AT USER-COMMAND:

CÓDIGO

DE CIÓN

F U N-

DESCRIPCIÓN

%CTX

Llamado a un menú contextual

%EX

Salir

%PC

Guardar Archivo

%PRI

Imprimir

%SC

Buscar

%SC+

Buscar siguiente

%SL

Buscar en oficina

%ST

Guardar en reporte de árbol

Xioma Consulting - ABAP WORKSHOP

23

D E F I N I CI ON D E DATOS Tipos de Datos Los tipos de datos indican el ámbito al que pertenece un objeto de datos. Estos pueden ser nativos del sistema, o nuevos tipos de datos definidos por el usuario (ya sea local en un programa o en el diccionario de datos de SAP). En ABAP/4 existen los siguientes tipos de datos estándar:

TIPO

D E S C R I P C I Ó N T A M A Ñ O VA L O R I N I C I A L

C

Texto (Caracter)

1

Blanco

N

Texto Numérico

1

’00…0’

D

Fecha (AAAAMMDD)

8

‘00000000’

T

Hora (HHMMSS)

6

‘000000’

X

Hexadecimal

1

X’00’

I

Entero (Integer)

4

0

P

Número Empaquetado

8

0

F

Número de Punto Flotante 8

‘0.0’

String

Cadena de caracteres

Blanco

Xstring

Secuencia de bytes

Blanco

Definición de Tipos Es posible la definición de nuevos tipos de datos utilizando la instrucción TYPES. Al igual que en los tipos de datos estándar los nuevos tipos serán utilizables al crear nuevos objetos de datos y al asignar los tipos a los parámetros formales y símbolos de texto. Sintaxis: TYPES TYPE .

Ejemplos: TYPES Numero TYPE I. TYPES: BEGIN OF PERSONA, NOMBRE(20) TYPE C,

Xioma Consulting - ABAP WORKSHOP

24

EDAD TYPE I, El nombre del tipo puede ser de hasta 30 caracteres. Y no se pueden END OF PERSONA. utilizar los caracteres especiales '(', ')', '+', '.', ',', ':', '-', ''. Los números pueden ser utilizados, pero el nombre no puede consistir solo de números.

TYPE-POOLS Los TYPE-POOLS son precursores de la definición general de tipos en el diccionario ABAP. Antes de la versión 4.0 solo se podían definir tipos de datos elementales y estructuras planas en el diccionario. Todos los demás tipos debían estar disponibles debían ser definidos con la instrucción TYPES en un TYPE-POOL. Desde la versión 6.40 se ha reemplazado el uso de TYPE-POOLS por clases globales, sin embargo los TYPEPOOLS definidos en versiones anteriores siguen disponibles y pueden ser utilizados. Sintaxis: TYPE-POOLS: .

Ejemplo: TYPE-POOLS: VRM.

Comentarios Los comentarios se utilizan para documentar el código, y de esta manera ayudar a mejorar su interpretación. Existen dos tipos de comentarios en ABAP: 1. Línea Completa: Este se activa al colocar el símbolo ‘*’ en la primera posición de la línea. 2. Al final de la línea: Se utiliza el símbolo ‘ “ ‘ . Ejemplos: *------------------------------------------------------* Autor: * Fecha de creación * Fecha de Modificación *------------------------------------------------------Contador = Contador + 1. “Contador de impresión

Xioma Consulting - ABAP WORKSHOP

25

Variables Las variables son valores que puede cambiar en el transcurso de la ejecución de un programa dependiendo de ciertas condiciones o información recibida en un programa. La declaración de las variables en ABAP se realiza con la instrucción DATA. Ésta puede ser invocada desde cualquier lugar de un programa ABAP. Sintaxis: DATA [TYPE ] | [LIKE ]. Ejemplos: DATA Cumpleaños TYPE D. DATA Nombre(40).

El nombre de la variable puede ser de hasta 30 caracteres. Y no se pueden utilizar los caracteres especiales '(' , ')' , '+' , '-' , ',' y ':' . Los números pueden ser utilizados, pero el nombre no puede consistir solo de números.

Al utilizar la opción LIKE se crea la variable con referencia a otro objeto de datos en el sistema, heredando así las mismas características. Ejemplo: DATA: Nombre(40), Nombre2 LIKE Nombre.

Constantes La instrucción CONSTANTS permite la definición de objetos de datos estáticos declarados en un programa ABAP. Éstos pueden ser de cualquier tipo definido en el sistema. Sintaxis: CONSTANTS [TYPE ] VALUE . Ejemplos: CONSTANTS:

CHAR1 VALUE ‘X’, INT TYPE I VALUE 99.

CONSTANTS: BEGIN OF CONST_REC, C(2) TYPE I VALUE 'XX', N(2) TYPE N VALUE '12',

Xioma Consulting - ABAP WORKSHOP

26

X I P F D T END OF

TYPE X VALUE TYPE I VALUE TYPE P VALUE TYPE F VALUE TYPE D VALUE TYPE T VALUE CONST_REC.

'FF', 99, 99, '9.99E9', '19950101', '235959',

El símbolo “:” se utiliza para evitar la repetición consecutiva de ciertas instrucciones como DATA, CONSTANTS, PARAMETERS, WRITE, etc. Separando los parámetros correspondientes a cada ocurrencia por medio de la coma. Ejemplo: DATA: contador type i, Temporal(10), Fecha LIKE SY-DATUM.

Field Symbols Los field symbols son nombres simbólicos que apuntan a un área de memoria durante el tiempo de ejecución. Es posible liberar estos punteros con la instrucción UNASSING. También es posible preguntar en las cláusulas condicionales si un Field Symbol esta asignado mediante la condición IS ASSIGN. Para crear un field symbol se utiliza la siguiente sintaxis: Sintaxis: FIELD-SYMBOLS: , … .

Para asignar la referencia al símbolo creado se utiliza la instrucción ASSIGN: Sintaxis: ASSIGN TO .

Ejemplo: FIELD-SYMBOLS: . DATA: FECHA LIKE SY-DATUM. IF IS ASSIGN. UNASSIGN . ASSIGN FECHA TO . = '19751130'. WRITE FECHA. ENDIF.

Xioma Consulting - ABAP WORKSHOP

27

Los símbolos de texto se pueden accesar en el menú del editor con la opción pasar a -> Elementos de Texto. También por medio de la transacción SE38 indicando el nombre del programa y seleccionando la opción Elementos de Texto.

Creación de textos Se puede crear textos dependientes del idioma o símbolos de texto para todos los programas ABAP. Se asigna un código de tres dígitos a cada símbolo de texto. Para accesarlo en el programa se utiliza de la siguiente manera: Sintaxis: text-.

Ejemplo: WRITE text-t01.

Parámetros Los parámetros son variables de entrada en un programa tipo REPORT. Estos generan una pantalla automática de entrada donde los parámetros tienen ciertas características especiales según el tipo al que pertenecen.

Parameters La instrucción PARAMETERS crea una variable de entrada con las mismas características que la instrucción DATA. El nombre de cada parámetro no puede exceder los 8 caracteres. Sintaxis: PARAMETERS [{LIKE } | { TYPE } | { AS CHECKBOX [USER-COMMAND fcode] } { RADIOBUTTON GROUP [USER-COMMAND fcode]} | { AS LISTBOX VISIBLE LENGTH vlen [OBLIGATORY] [USER-COMMAND fcode] }] [DEFAULT val] [LOWER CASE] [MATCHCODE OBJECT search_help] [VALUE CHECK] [OBLIGATORY|NO-DISPLAY].

Xioma Consulting - ABAP WORKSHOP

28

Ejemplo: PARAMETERS: Nombre(40), MATERIAL LIKE MARA-MATNR, FECHA TYPE DATUM.

El nombre de un parámetro no puede exceder los 8 caracteres. Para definir los textos de los parámetros utilice en el menú la opción IR A-> Elementos de Texto>Textos de Selección. Esto aplica igualmente para los parámetros definidos en el Selection-Screen.

La opción AS CHECKBOX permite que el campo en pantalla aparezca solamente como un campo de entrada binario (marcado o no marcado). El parámetro por ende poseerá una longitud de 1 y será tipo CHAR. Ejemplo: PARAMETERS: ESTUDIA AS CHECKBOX.

La adición RADIOBUTTON genera un grupo de campos en la pantalla de selección de los cuales el usuario solamente puede seleccionar uno. Cada parámetro, al igual que en el caso anterior, es del tipo CHAR con longitud de uno. Ejemplo: PARAMETERS: B1 RADIOBUTTON GROUP R1, B2 RADIOBUTTON GROUP R1, B3 RADIOBUTTON GROUP R1.

Cuando se desean crear parámetros a seleccionar de una lista, se utiliza la opción AS LIST BOX VISIBLE LENGHT , donde n indica el largo del campo a desplegar, más no el tamaño de la variable. Para llenar la lista se puede utilizar la función VRM_SET_VALUES desde el evento AT SELECTION-SCREEN OUTPUT y el TYPE-POOL VRM. Ejemplo: TYPE-POOLS : VRM. DATA: param TYPE vrm_id, values TYPE vrm_values, value LIKE LINE OF values.

Xioma Consulting - ABAP WORKSHOP

29

PARAMETERS: p_name(1) AS LISTBOX VISIBLE LENGTH 20. AT SELECTION-SCREEN OUTPUT. param = 'P_NAME'. value-key = '1'. value-text = 'Xioma'. APPEND value TO values. value-key = '2'. value-text = 'Crystalis'. APPEND value TO values. CALL FUNCTION 'VRM_SET_VALUES' EXPORTING id = param values = values.

Al definir un valor por defecto para el parámetro se utiliza la instrucción DEFAULT. Ejemplo: PARAMETERS: MAT LIKE MARA-MATNR DEFAULT ‘00001’.

La instrucción LOWER CASE permite que se introduzcan letras minúsculas en el parámetro. Ejemplo: PARAMETERS: nombre LIKE zusuario-nombre LOWER CASE.

Cuando sea necesario asignar un objeto de ayuda al parámetro se ha de utilizar la instrucción MATCH CODE OBJECT. Si existiera una ayuda de búsqueda ya asignada a la referencia, ésta será ignorada. Ejemplo: PARAMETERS: MAT LIKE MARA-MATNR MATCH CODE OBJECT ZHLP_MATERIAL.

Si el elemento de datos de la referencia posee un dominio que debe ser validado, es necesario utilizar la instrucción VALUE CHECK. Ejemplo: PARAMETERS: werks LIKE bsis-werks VALUE CHECK.

Cuando se requiere que el parámetro sea obligatorio se agrega la instrucción OBLIGATORY. En caso que sea necesario definir un parámetro para ser utilizado

Xioma Consulting - ABAP WORKSHOP

30

únicamente para la invocación del reporte mediante SUBMIT, se utiliza la instrucción NO-DISPLAY. Ejemplo: PARAMETERS: MAT LIKE MARA-MATNR OBLIGATORY, MEINS LIKE MARA-MEINS NO-DISPLAY.

Si es necesario reducir el tamaño del área de entrada se utiliza la instrucción VISIBLE LENGHT. Esto no modifica el tamaño de la variable.

Select-Options Select-options indica un parámetro de tipo especial (RANGES) que permite que el usuario defina un conjunto de valores para el parámetro. El nombre de cada parámetro no puede exceder los 8 caracteres. Sintaxis: SELECT-OPTIONS FOR [OBLIGATORY|NO-DISPLAY] [VISIBLE LENGTH vlen] [NO-EXTENSION ] [NO INTERVALS] [DEFAULT val1 [TO val2] [OPTION opt] [SIGN sign]] [LOWER CASE] [MATCHCODE OBJECT search_help] .

Ejemplo: SELECT-OPTIONS MAT FOR MARA-MATNR.

Cuando se desea que el parámetro para el SELECT-OPTIONS sea dinámico se coloca la variable de referencia entre paréntesis. Ejemplo: PARAMETERS: dbtab(30) TYPE c, column(30) TYPE c. DATA name(80) TYPE c. SELECTION-SCREEN BEGIN OF SCREEN 500 AS WINDOW. SELECT-OPTIONS opcion FOR (name). SELECTION-SCREEN END OF SCREEN 500. CONCATENATE dbtab '-' column INTO name. CALL SELECTION-SCREEN 500 STARTING AT 10 10.

Xioma Consulting - ABAP WORKSHOP

31

Cuando se requiere que el parámetro sea obligatorio se agrega la instrucción OBLIGATORY. En caso que sea necesario definir un parámetro para ser utilizado únicamente para la invocación del reporte mediante SUBMIT, se utiliza la instrucción NO-DISPLAY. Ejemplo: SELECT-OPTIONS: MAT FOR MARA-MATNR OBLIGATORY, MEINS FOR MARA-MEINS NO-DISPLAY.

Si es necesario reducir el tamaño del área de entrada se utiliza la instrucción VISIBLE LENGHT. Esto no modifica el tamaño de la variable. Ejemplo: SELECT-OPTIONS: MAT FOR MARA-MATNR VISIBLE LENGHT 10.

Para eliminar el botón de múltiples selecciones se utiliza la instrucción NOEXTENSION, y si fuera el caso de eliminar el campo para el hasta, se utiliza la instrucción NO INTERVALS. Ejemplo: SELECT-OPTIONS: MAT FOR MARA-MATNR NO-EXTENSION, MEINS FOR MARA-MEINS NO INTERVALS.

Al definir un valor por defecto para el parámetro se utiliza la instrucción DEFAULT. Ejemplo: SELECT-OPTIONS: MAT FOR MARA-MATNR DEFAULT ‘00001’ TO ‘0002’ SIGN ‘I’ OPTION ‘BT’.

La instrucción LOWER CASE permite que se introduzcan letras minúsculas en el parámetro. Ejemplo: SELECT-OPTIONS: nombre for zusuario-nombre LOWER CASE.

Xioma Consulting - ABAP WORKSHOP

32

Cuando sea necesario asignar un objeto de ayuda al parámetro se ha de utilizar la instrucción MATCH CODE OBJECT. Si existiera una ayuda de búsqueda ya asignada a la referencia, ésta será ignorada. Ejemplo: SELECT-OPTIONS: MAT FOR MARA-MATNR MATCH CODE OBJECT ZHLP_MATERIAL.

Controles de Selección de Pantalla Utilizando el comando SELECTION-SCREEN es posible brindar un formato a la pantalla de selección en un reporte.

Recuadros y Títulos Es posible crear recuadros que encapsulen los parámetros de selección y textos. Sintaxis:

SELECTION-SCREEN BEGIN OF BLOCK bloque .

SELECTION-SCREEN END OF BLOCK bloque.

Ejemplo: Report Zejemplo.

*Ejemplo 1 SELECTION-SCREEN BEGIN OF BLOCK EJE_1 WITH FRAME TITLE EJE_1 NO INTERVALS. SELECT-OPTIONS: S_FECHA FOR SY-DATUM. PARAMETERS: P_PARA(20). SELECTION-SCREEN END OF BLOCK EJE_1.

Xioma Consulting - ABAP WORKSHOP

33

*Ejemplo 2 SELECTION-SCREEN BEGIN OF BLOCK EJE_2 WITH FRAME TITLE EJE_2. SELECT-OPTIONS: S_FECHA2 FOR SY-DATUM. PARAMETERS: P_PARA2(20). SELECTION-SCREEN END OF BLOCK EJE_2. *Ejemplo 3 SELECTION-SCREEN BEGIN OF BLOCK EJE_3. SELECT-OPTIONS: S_FECHA3 FOR SY-DATUM. PARAMETERS: P_PARA3(20). SELECTION-SCREEN END OF BLOCK EJE_3.

INITIALIZATION. MOVE ‘EJE 1’ TO EJE_1. MOVE ‘EJE 2’ TO EJE_2.

El recuadro se genera alrededor del código incluido en el ámbito del SELECTION-SCREEN al utilizar la adición WITH FRAME. En combinación con el WITH FRAME se puede utilizar la adición TITLE para agregar un título al recuadro, pero éste no puede superar los 8 caracteres. La adición NO INTERVALS hace que el SELECT-OPTIONS aparezca dentro del recuadro como un campo único.

Xioma Consulting - ABAP WORKSHOP

34

Existen dos limitantes para éste comando. La primera es que solamente es posible anidar 5 bloques en profundidad y la segunda es que la adición NO INTERVALS se hereda a los bloques anidados solo si la adición WITH FRAME esta presente.

Agrupación de Ítemes Utilizando el SELECTION-SCREEN es posible agrupar parámetros o textos en una misma línea, para ello se utiliza la adición BEGIN OF LINE y END OF LINE. Sintaxis: SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN END OF LINE.

Ejemplos: REPORT EJEMPLO2. SELECTION-SCREEN BEGIN OF LINE. PARAMETERS: PARAM1(8), PARAM2(8), PARAM3(8). SELECTION-SCREEN END OF LINE.

Xioma Consulting - ABAP WORKSHOP

35

REPORT EJEMPLO2. SELECTION-SCREEN BEGIN OF LINE. PARAMETERS: P_PARAM1(10). SELECTION-SCREEN COMMENT (15) W_NOMBRE. SELECTION-SCREEN ULINE (10). SELECTION-SCREEN PUSHBUTTON (10) W_BOTON USER-COMMAND UCOM. SELECTION-SCREEN END OF LINE. INITIALIZATION. W_NOMBRE = ‘Comentario’. W_BOTON = ‘Botón’.

Es posible incluir parámetros, botones, comentarios o bloques subrayados como campos de entrada en el ámbito del BEGIN OF LINE y END OF LINE. El SELECT-OPTIONS no es permitido dado que la naturaleza de éste es crear múltiples objetos en una sola línea (la cota inferior y la cota superior).

Posicionamiento de Ítemes Dentro del conjunto de instrucciones posibles para la adición BEGIN OF LINE se encuentra la opción POSITION. Ésta opción se utiliza para definir la posición en la línea definida por el BEGIN OF LINE. Sintaxis: SELECTION-SCREEN POSITION .

Ejemplo: SELECTION-SCREEN BEGIN OF LINE. PARAMETERS: PARAM1(8).

Xioma Consulting - ABAP WORKSHOP

36

SELECTION-SCREEN POSITION 20. PARAMETERS: PARAM2(8). SELECTION-SCREEN POSITION 30. PARAMETERS: PARAM3(8). SELECTION-SCREEN END OF LINE.

Subrayado El subrayado puede ser generado en las pantallas de selección así como en los reportes ABAP. Sin embargo difieren en su sintaxis.

Sintaxis: SELECTION-SCREEN UNLINE

Ejemplos: SELECTION-SCREEN BEGIN OF LINE. PARAMETERS: P_PARAM1(10). SELECTION-SCREEN ULINE (10). SELECTION-SCREEN END OF LINE.

El formato puede tener la forma ‘POS(TAM)’ o ‘(TAM)’. SELECTION-SCREEN BEGIN OF LINE. PARAMETERS: P_PARAM1(10). SELECTION-SCREEN ULINE 11(3). PARAMETERS: P_PARAM2(10). SELECTION-SCREEN ULINE 26(3). PARAMETERS: P_PARAM3(10). SELECTION-SCREEN END OF LINE.

Xioma Consulting - ABAP WORKSHOP

37

Comentarios En el SELECTION-SCREEN también es posible generar comentarios. Siempre que se utilice el comando COMMENT. Sintaxis: SELECTION-SCREEN COMMENT FOR MODIF ID VISIBLE LENGHT

FIELD

.

Ejemplo: SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT (15) W_NOMBRE. PARAMETERS: P_PARAM1(10). SELECTION-SCREEN END OF LINE. INITIALIZATION. W_NOMBRE = ‘Comentario’.

Xioma Consulting - ABAP WORKSHOP

38

Al igual que con el comando ULINE, es necesario que exista un campo de entrada definido de lo contrario la pantalla de selección no será generada. Si se incluye el parámetro FOR FIELD, entonces el comentario queda oficialmente atado a un campo de entrada. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT (15) W_NOMBRE FOR FIELD P_PARAM1. PARAMETERS: P_PARAM1(10). SELECTION-SCREEN END OF LINE. INITIALIZATION. W_NOMBRE = ‘Comentario’.

Botones Los botones son utilizados para ejecutar una función del usuario dentro del código para interactuar dinámicamente con el usuario. Sintaxis: SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN PUSHBUTTON fmt name USER-COMMAND ucom. SELECTION-SCREEN END OF LINE.

Ejemplo: TABLES: SSCRFIELDS. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN PUSHBUTTON (10) W_BUTTON USER-COMMAND UCOM. SELECTION-SCREEN END OF LINE. INITIALIZATION. W_BUTTON = 'Botón'. AT SELECTION-SCREEN. IF SSCRFIELDS-UCOMM = 'UCOM'. MESSAGE S333(S1) WITH 'Se ha oprimido el botón'. ENDIF.

Xioma Consulting - ABAP WORKSHOP

39

Puede notarse en el ejemplo que el botón puede existir por si mismo dado que es un campo de entrada. Cuando se hace click sobre el botón, el campo del sistema SSRFIELDS-UCOMM obtiene el valor del valor que se le ha asignado al botón en su definición. Entonces se puede hacer una evaluación de este campo en el evento SELECTION-SCREEN para poder determinar si un éste fue o no oprimido y ejecutar el código que corresponde.

Botones en la Barra de Herramientas Muchos de los reportes estándar de SAP poseen botones en la barra de herramientas junto al botón de ejecución . Este tipo de botón también puede ser utilizado en el momento que se genera la pantalla de selección, y se pueden crear en ésta hasta cinco botones en el nivel de la barra de herramientas.

Sintaxis: SELECTION-SCREEN FUNCTION KEY .

El parámetro número puede tener valores de 1 a 5. Ejemplo: TABLES: SSCRFIELDS. SELECTION-SCREEN FUNCTION KEY 1. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN PUSHBUTTON (10) W_BUTTON USER-COMMAND UCOM. SELECTION-SCREEN END OF LINE.

Xioma Consulting - ABAP WORKSHOP

40

SELECTION-SCREEN SKIP 9. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN PUSHBUTTON (10) W_BUTTO2 USER-COMMAND UCOW. SELECTION-SCREEN END OF LINE. INITIALIZATION. MOVE ‘Botón de Aplicación’ to SSCRFIELDS-FUNCTXT_01. W_BUTTON = ‘Botón 1’. W_BUTTO2 = ‘Botón 2’.

Al ejecutar el programa, el campo SSCRFIELDS-FUNCTXT_01se asocia al botón 1 de la barra de herramientas en el evento de inicialización. Este valor es entonces desplegado en el botón en tiempo de ejecución. Se puede asociar el campo FUNCTXT_02 al botón dos, y así sucesivamente hasta el botón cinco. Algunas variables del sistema son inicializadas cuando se utiliza este comando. El sistema inicializa el campo SSCRFIELDS-UCOMM a FC01 para la tecla de función 1, FC02 para la tecla de función 2 y así sucesivamente. La variable toma el valor en el momento de realizar el click sobre el botón y puede ser evaluado en el evento AT SELECTION-SCREEN. Para asignar texto al botón que se esta creando, es necesario asegurarse de asignar un texto al campo SSCRFIELDS-FUNCTXT_01 para la tecla de función 1, para el campo SSCRFIELDS-FUNCTXT_02 para la tecla de función 2, y así sucesivamente. El momento para realizar estas asignaciones es en el evento INITIALIZATION.

Xioma Consulting - ABAP WORKSHOP

41

Líneas en Blanco Las líneas en blanco permiten dejar espacios en la pantalla de selección para facilitar la lectura de ésta. Para dejar una línea en blanco se utiliza el comando SKIP de la misma manera que se hace en un reporte ABAP. Sintaxis: SELECTION-SCREEN SKIP .

El número de líneas en blanco puede ser de 1 a 9, en caso de ser solamente 1 se puede omitir el número.

Ejemplo: SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN PUSHBUTTON (10) W_BUTTON USER-COMMAND UCOM. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN SKIP 9. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN PUSHBUTTON (10) W_BUTTO2 USER-COMMAND UCOW. SELECTION-SCREEN END OF LINE. INITIALIZATION. W_BUTTON = 'Botón 1'. W_BUTTO2 = 'Botón 2'.

Xioma Consulting - ABAP WORKSHOP

42

Ventanas de Selección Es posible definir ventanas de selección que pueden ser llamadas desde programas de diálogo. Sintaxis: SELECTION-SCREEN BEGIN OF

SCREEN TITLE AS WINDOW.

. . . SELECTION-SCREEN END OF SCREEN .

Ejemplos: SELECTION-SCREEN BEGIN OF SCREEN 1001 TITLE title AS WINDOW. parameters: nombre(10). select-options: centro for t001-waers. SELECTION-SCREEN END OF SCREEN 1001. . . . CALL SELECTION-SCREEN ‘1001’ STARTING AT 5 5

Xioma Consulting - ABAP WORKSHOP

43

VARI AB LE S D E AMB I EN TE (S Y) SY es una estructura que contiene las variables de ambiente que se modifican en tiempo de ejecución por el sistema mientras se ejecuta un programa. No es necesario definir la estructura y ésta estará disponible desde cualquier parte de un programa.

El siguiente cuadro describe los campos que pueden resultar de uso más frecuente:

CÓDIGO

DESCRIPCIÓN

BATCH

Indicador de modo Batch X indica modo de fondo activo.

DATUM

Fecha del Sistema

DYNNR

Número de la pantalla actual

INDEX

Indica la iteración del LOOP

MSGNO

Número de Mensaje

MSGTY

Tipo de Mensaje (E,I,W)

MSGV1

Línea de Mensaje 1

MSGV2

Línea de Mensaje 2

MSGV3

Línea de Mensaje 3

MSGV4

Línea de Mensaje 4

PAGNO

Número de Página

REPID

Nombre del programa ABAP

SUBRC

Valor de retorno de una sentencia ABAP

TABIX

Línea actual en la tabla interna

TCODE

Código de la Transacción

TFILL

Total de entradas en la tabla interna

UZEIT

Hora

TITLE

Título del programa

UCOMM

Función ejecutada

UNAME

ID del usuario

LISEL

Valor de la línea seleccionada

Xioma Consulting - ABAP WORKSHOP

44

Ejemplo: … Select single * from T001. IF SY-SUBRC EQ 0. WRITE: ‘Existen valores en la tabla T001’. ENDIF. …

Xioma Consulting - ABAP WORKSHOP

45

OP E RAD ORE S ARI TM É TI COS Existen varias operaciones en el estándar, muchas de éstas se pueden conseguir bajo la cláusula COMPUTE. Sin embargo en el presente documento solamente se nombraran los operadores aritméticos de uso más frecuente.

La suma Para realizar una suma se utiliza el símbolo ‘+’ o la instrucción ADD. Sin embargo se recomienda utilizar la primera forma del ejemplo por ser más eficiente. Ejemplo: A = A + 1. ADD 1 to A.

La Resta El símbolo ‘-‘ indica la operación de sustracción, así mismo es posible la utilización de la instrucción SUBSTRACT. Es más eficiente la utilización del símbolo ‘-‘. Ejemplo: A = A – 1. SUBSTRACT 1 TO A.

La Multiplicación La Multiplicación utiliza el símbolo ‘*’ o en su defecto puede utilizarse la instrucción MULTIPLY, siendo esta última la menos eficiente. Ejemplo: A = A * 2. MULTIPLY A BY 2.

Xioma Consulting - ABAP WORKSHOP

46

La División Para la división se utiliza el símbolo ‘/’ o al igual que en los otros casos existe una instrucción equivalente en lenguaje natural llamada DIVIDE siendo esta menos eficiente. Ejemplo: A = A / 2. DIVIDE A BY 2.

El Exponente Para elevar un valor a una potencia n se utiliza dos veces el símbolo ‘*’ quedando de la siguiente manera: ‘**’. Ejemplo: A = A ** 2.

El Residuo4 Para obtener el residuo de la división se utiliza el operador MOD. Ejemplo: B = A MOD 3.

El cociente5 Para obtener el cociente de la división se utiliza el operador DIV. Ejemplo: B = A DIV 3.

4

El residuo de la división de 5 entre 3 es 2.

5

El cociente de la división de 5 entre 3 es 1.

Xioma Consulting - ABAP WORKSHOP

47

I N S TRU CCI ONE S D E D E CI S I ÓN Las instrucciones de decisión evalúan una expresión y en base al valor de verdad que tenga dicha expresión se ejecuta el código que corresponda.

OPERADORES LÓGICOS o BOOLEANOS Los operadores lógicos sirven para definir relaciones entre expresiones generando de esta manera nuevos valores de verdad. En la lógica Booleana solamente existen dos valores: VERDADERO o FALSO. Los operadores que existen en ABAP son los siguientes: AND, OR y NOT. Estos operadores respetan las reglas de la lógica Booleana.

OR

AND

V A L O R V A L O R R E S U LTADO 1 2

VALOR VALOR 1 2

R E S U L-

Verdadero

Verdadero

Verdadero

Verdadero

Verdadero

Verdadero

Verdadero

Falso

Falso

Verdadero

Falso

Verdadero

Falso

Verdadero

Falso

Falso

Verdadero

Verdadero

Falso

Falso

Falso

Falso

Falso

Falso

TADO

NOT VALOR

R E S U LTA D O

Verdadero

Falso

Falso

Verdadero

Es posible agrupar las expresiones encerrándolas entre paréntesis. Los valores y campos deben separarse utilizando espacios en blanco. Ejemplo: Incorrecto: f1 EQ f2 AND (f3 EQ f4).

Xioma Consulting - ABAP WORKSHOP

48

Correcto: f1 EQ f2 AND ( f3 EQ f4 ).

El NOT toma prioridad sobre el operador AND, y el operador AND sobre el operador OR: NOT f1 EQ f2 OR f3 EQ f4 AND f5 EQ f6

Esto corresponde a ( NOT ( f1 EQ f2 ) ) OR ( f3 EQ f4 AND f5 EQ f6 )

OPERADORES RELACIONALES Los operadores relacionales sirven para determinar el valor de verdad entre dos operándos. En ABAP existen los siguientes:

OPERADOR

DESCRIPCIÓN

=,EQ

Igual que

, NE

Diferente que

>, GT

Mayor que

=, GE

Mayor o igual que

Herramientas->Workbench ABAP->Test->Trace SQL

En la pantalla inicial, se puede comenzar y detener la grabación del trace. A partir del momento en que se activa la función de rastreo (trace), y hasta el momento en el que se desactive, toda la actividad de la base de datos que ocurre para un usuario específico o para un sistema completo es almacenada y registrada en un archivo de rastreo. Se puede restringir

Xioma Consulting - ABAP WORKSHOP

130

la cantidad de datos desplegados en pantalla poniendo un filtro de despliegue. Los datos se pueden mostrar como una lista básica o en una lista ampliada.

Performance Analysis contiene las siguientes opciones de rastreo: •

SQL Trace



Enqueue Trace



RFC Trace



Buffer Trace

SQL Trace SQL Trace le permite ver como el código OPEN SQL que se usa en programas ABAP es convertido a declaraciones de SQL estándar y los parámetros con los cuales las declaraciones integradas SQL son pasadas al sistema de base de datos.

Del SQL Trace generado se puede determinar: •

Cuales instrucciones SQL utiliza la aplicación



Que valores usa el sistema para determinados accesos y cambios a la base de datos.



Como traduce el sistema comandos OPEN SQL de ABAP en comandos SQL estándar.



En que punto ejecuta COMMIT la aplicación.



Donde la aplicación hace accesos de base de datos repetidos.

Enqueue Trace Permite rastrear las instrucciones de bloqueo y desbloqueo que se utilizan en una aplicación, y los objetos de bloqueo y parámetros en el cual se aplican. Se puede desplegar y analizar las entradas del trace registradas en el archivo de rastreo. Cuando enqueue trace esta habilitado, el sistema registra todo las instrucciones de bloqueo y desbloqueo que ocurren para un usuario o grupo de usuarios.

Xioma Consulting - ABAP WORKSHOP

131

El registro contiene la siguiente información: •

Instrucciones de bloqueo ejecutadas.



Nombre de tablas del evento de bloqueo.



Nombre del programa que coloca el bloqueo.



Tipo de bloqueo.



Dueño del bloqueo.



Tiempo total utilizado por el bloqueo.



Tiempo requerido por el servidor de bloqueos para liberar el bloqueo.

RFC Trace Se puede rastrear cuales llamadas remotas han sido ejecutadas desde la aplicación o el Sistema SAP, y en cuales instancias han sido ejecutadas esas llamadas. Se puede mostrar y analizar los registros de rastreo en el archivo de rastreo. Del archivo de rastreo se puede deducir lo siguiente: •

Qué módulos de función han sido llamados remotamente por el programa a ser analizado.



Si el RFC fue ejecutado satisfactoriamente.



El tiempo total utilizado en procesar la llamada remota.



El tipo de comunicación RFC (RFC cliente o RFC servidor).



En qué instancia fue ejecutada la llamada remota.



Qué parámetros técnicos componen la instancia.



El número de bytes enviados y recibidos por el RFC.

Buffer trace Utilizando la opción buffer trace se puede monitorear los accesos realizados al buffer de tablas. Por defecto, los registros son agrupados por secuencia de instrucciones en una línea. Cuando la opción buffer trace esta activo, el sistema almacena los accesos del buffer de un usuario o un grupo de usuarios. Buffer trace indica: •

Qué instrucciones ejecutan accesos al buffer.

Xioma Consulting - ABAP WORKSHOP

132



Cuales operaciones de buffer son realizadas.



Cómo es administrado el buffer.

Utilizando Performance analysis Se ejecuta la transacción ST05 (Performance Analysis) En esta aplicación se seleccionan los indicadores de las opciones de rastreo que se quieren ejecutar.

Posteriormente se selecciona la opción del menú Trace->Trace on.

En un nuevo modo se ejecuta la transacción a la que se le desea habilitar la funcionalidad BADI, se realizan los pasos que se requieren de la aplicación. Luego se regresa a la transacción ST05, y se selecciona la opción del menú Trace->Trace off.

Xioma Consulting - ABAP WORKSHOP

133

Posteriormente se selecciona la opción del menú Trace->Display Trace.

Al hacer esto aparecerá la ventana “Set Restrictions for Displaying Trace”

Aquí se puede seleccionar la opción de rastreo (SQL Trace, Enqueue Trace, RFC Trace, Buffer Trace), y si se desea hacer una lista de rastreo, lista de rastreo detallado, o una lista de rastreo ordenada por fecha y hora.

Xioma Consulting - ABAP WORKSHOP

134

Se presiona el botón “Display Trace List”

.

Aparecerá una lista con llamados a la Base de Datos

Aquí es donde se puede dar el seguimiento de las operaciones obtenidas por el rastreo. Si se da doble clic a las operaciones entonces se obtendrá información más detallada de la instrucción seleccionada.

Xioma Consulting - ABAP WORKSHOP

135

Log de Sistema Se utiliza para señalar y corregir errores que ocurren en el sistema. La manera de accesarla es: •

A través del código de transacción SM21.



Desde el Árbol de navegación del Menú SAP->Herramientas->Workbench ABAP->Test->Log de sistema.

El campo "System log entries read" dice cuantas entradas del archivo del log ha leído el sistema, inicia con 0.

Seleccionando tipo de log En el menú Log de Sistema->Seleccionar se encuentran varias posibles tipos de log de sistema a analizar: SysLog local: Mensajes del servidor de aplicaciones del que se encuentra conectado.

Xioma Consulting - ABAP WORKSHOP

136

Log de sistema remoto: Log de otro servidor de aplicaciones. Para especificar un determinado sistema remoto se usa la opción nombre de instancia. Todos los log de sistema remotos: El log del sistema en el cual actualmente se esta loggueado, junto con todos aquellos otros servidores de aplicación en el mismo sistema. Log de sistema central: Si se quiere usar esta opción, se debe haber configurado a todos los servidores de aplicación tal que ellos envíen los mensajes del log local al log central. La información en el log del sistema central puede diferenciarse de los datos en los logs individuales locales.

Entorno El menú Entorno provee las siguientes funcionalidades: Visualizar SAPPARAM: Despliega la configuración de los parámetros del log en el perfil del sistema. Mostrar autorizaciones: Muestra las autorizaciones requeridas por el log de sistema. Relojes: Despliega el reloj de sistema que se usa como referencia para determinar la fecha y hora que será asignada en el log. Esto para reconocer diferencias de tiempos entre mensajes de distintos servidores de aplicaciones. Status de procesos: Despliega el estado actual de los procesos enviados en el log de sistema.

Leyendo un Reporte log Para desplegar el log del sistema actual se seleccionan los criterios de filtrado a aplicar al log, y se presiona el botón “Nueva lectura log de sistema”, el sistema despliega una tabla con las entradas del log de sistema que corresponden al criterio seleccionado. Se puede agrupar el resultado del reporte con la opción del menú Log de sistema>Clasificar, existen diversos criterios de clasificación.

Xioma Consulting - ABAP WORKSHOP

137

Se puede desplegar información detallada de una entrada especifica seleccionando la entrada y seleccionando la opción del menú Tratar->Detalles.

Xioma Consulting - ABAP WORKSHOP

138

Análisis Dump Un análisis Dump es una lista que permite identificar las causas y posibles soluciones a errores en un programa. El Workbench de ABAP genera un dump siempre que un reporte o transacción se terminen debido a un error serio. El sistema ingresa el error en el log del sistema y crea un snapshot del programa al momento de suceder el error, y lo almacena en una tabla llamada SNAP.

La manera de accesarla es: •

A través del código de transacción ST22.



Desde el Árbol de navegación del menú SAP->Herramientas->Workbench ABAP->Test->Análisis Dump.

Los análisis Dump dan al usuario o al programador información sobre las causas del error que hacen que el programa se cierre abruptamente. Se pueden usar para identificar rápidamente donde y por qué ocurrió el error.

Parte de la información que contiene el Snapshot: •

Por qué termino el programa.



Qué causó la terminación del programa.



En que parte del código fuente ocurrió la finalización del programa.



Qué se puede hacer para corregir el error.



Valores de campos cuando el programa terminó.



Las llamadas o eventos que fueron activados cuando el programa terminó.



Otros programas que fueron afectados.

Xioma Consulting - ABAP WORKSHOP

139

Utilizando el Análisis Dump Seleccionar las opciones de filtrado a aplicar.

Presionar el botón Inicio o ir a la opción del menú Errores tiempo ejecución>Visualizar. Se desplegará una lista con los errores que cumplen con los criterios de filtrado.

Xioma Consulting - ABAP WORKSHOP

140

Para ver la información detallada del error se selecciona la línea que se desea revisar y se presiona doble clic, o se selecciona el botón buscar

.

Aquí aparecerá la explicación de los motivos del error, a través de esta es que se podrá hacer el análisis a profundidad de a qué se debió el error.

Xioma Consulting - ABAP WORKSHOP

141

CRE ACI ÓN D E F U N CI ONE S (S E 37 ) Las funciones son similares a los procedimientos, pero como ya se mencionó anteriormente se comportan como una “caja negra”. Su definición es global en el sistema, por lo cual no es necesario definirlas en el programa. Las funciones en ABAP se manipulan por medio de la transacción SE37. Existen ya una cantidad considerable de funciones estándar definidas en el sistema y que están disponibles para el desarrollador. A continuación se explicarán los pasos necesarios para crear una función. Primero se deberá crear un grupo de funciones y luego se creará la función.

Creación de un grupo de funciones Los grupos de funciones contienen módulos de funciones. Estos grupos y módulos se administran en la biblioteca de funciones, que se invoca por medio de la transacción SE37.

Para crear un grupo de funciones se utiliza el menú principal con la opción Pasar a – > Gestión gr. funciones –> Crear grupo

Xioma Consulting - ABAP WORKSHOP

142

En esta pantalla se debe ingresar el nombre del grupo de funciones, una descripción breve y el responsable.

Al hacer click en Grabar el sistema solicitará la creación de una orden de transporte. Una vez creado satisfactoriamente el grupo de funciones, Deben activarse el programa de control y sus respectivos includes.

Creación de una función Para crear una función se utiliza la transacción SE37. Se introduce el nombre de la función y se da click en Crear.

Xioma Consulting - ABAP WORKSHOP

143

Luego se coloca el Grupo de Funciones dentro del cual estará la función y una descripción breve. Se indicará el grupo de funciones ZGRUPO_PRUEBA creado en el paso anterior.

Una vez colocados los datos se da click en Grabar.

El sistema mostrará el Function Builder. Aquí se tienen cuatro tipos de parámetros que pueden ser creados: IMPORTING, EXPORTING, CHANGING y TABLES. Además de una pestaña EXCEPTIONS y otra para el CODIGO FUENTE de la función. Xioma Consulting - ABAP WORKSHOP

144

-

Importing Estos son los parámetros de entrada de la función. Cuando la función es invocada, un parámetro actual válido debe ser especificado para cada parámetro importing que no sea opcional. El valor que se les transfiere en la invocación no cambia durante la ejecución de la función.

-

Exporting Estos son los parámetros de salida de la función. Cuando se invoca la función, un parámetro actual puede ser especificado para cada parámetro exporting. El contenido del parámetro exporting es transferido al parámetro actual si la ejecución de la función finaliza sin errores.

Xioma Consulting - ABAP WORKSHOP

145

-

Changing Estos son parámetros tanto de entrada como de salida. Cuando la función es invocada, un parámetro actual válido debe ser especificado para cada parámetro changing que no sea opcional. El contenido del parámetro changing es transferido al parámetro actual si la ejecución de la función finaliza sin errores.

-

Tables Igual que los parámetros changing, estos son parámetros tanto de entrada como de salida, pero solo pueden ser usados para transferir tablas estándar con header line. En este ejemplo no utilizaremos este tipo de parámetro.

Xioma Consulting - ABAP WORKSHOP

146

-

Exceptions Se utilizan para capturar un tipo de error específico durante el tiempo de ejecución, de tal manera que se produzca un dump (error fatal) que cancele bruscamente la ejecución de la función. EXCEPTIONS lista las excepciones que se manejan cuando el programa realiza la llamada. Al final de la lista de excepciones, se puede usar OTHERS para referirse al resto de las excepciones. Si una de las excepciones listadas ocurre, SY-SUBRC toma el valor definido en la sección Exceptions y el control es devuelto al programa principal.

Xioma Consulting - ABAP WORKSHOP

147

Hay dos maneras de manejarlo:  RAISE .  MESSAGE ... RAISING .

RAISE La instrucción “RAISE excepción” lo que hace es detener la ejecución de la función, y asignar al SY-SUBRC el valor correspondiente a lo asignado en la sección de EXCEPTIONS del CALL FUNCTION. Ejemplo: CALL FUNCTION ... EXCEPTIONS div_cero = 5. “código del programa principal IF SY-SUBRC = 5. MESSAGE ‘Division por Cero’. “código del programa principal ENDIF. “código en el módulo de funciones FUNCTION division IMPORT n1 n2 EXPORT result EXCEPTION div_zero. IF n2 = 0. RAISE div_zero. “ elevar excepción ELSE.

Xioma Consulting - ABAP WORKSHOP

148

ENDIF.

result = n1 / n2.

ENDFUNCTION.

MESSAGE ... RAISING excepción Esta instrucción igualmente asigna al SY-SUBRC el valor correspondiente a lo asignado en la sección EXCEPTIONS del CALL FUNCTION. En la función se dispara la excepción utilizando la siguiente estructura: MESSAGE ID id_mensaje TYPE tipo NUMBER número RAISING excepcion Y luego donde se invocó la función se construye el mensaje dinámicamente utilizando el contenido de los campos del sistema SY-MSGID , SY-MSGTY , SYMSGNR y SY-MSGV1-4.

Ejemplo: CALL FUNCTION division EXCEPTIONS div_zero = 5. “código programa principal IF SY-SUBRC = 5. “código del programa principal MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3. ENDIF. “código en el módulo de funciones FUNCTION division IMPORT n1 n2 EXPORT result EXCEPTION div_zero. IF n2 = 0. MESSAGE ID ‘XXX’ TYPE ‘E’ NUMBER ‘001’ WITH ‘Error en proceso’ n2 ‘no es un divisor válido’ RAISING div_zero. “elevar excepción asignando valores de retorno “Alternativamente puede usar la siguiente estructura: “ MESSAGE E001(ZMM) RAISING EXCEP1. “ mensaje 001 de tipo error (E) de la clase ZMM ELSE. result = n1 / n2. ENDIF. ENDFUNCTION.

-

Código Fuente Aquí se escribe el código de la función.

Xioma Consulting - ABAP WORKSHOP

149

En este ejemplo la función lo único que hace es devolver el stock disponible para un material que se encuentra en un lote, una ubicación, un centro y un almacén. Si no se encuentra el material, la función devuelve un mensaje de error.

Xioma Consulting - ABAP WORKSHOP

150

B U S I N E S S AP P LI CATI ON P ROG RAMMI N G I N TERFACE (B AP I ) Una BAPI (Business Application Programming Interface) es una función de SAP que permite llevar a cabo una tarea funcional. Por ejemplo, una BAPI puede decir la disponibilidad de un material, crear un pedido o incluso un documento financiero. Existen una gran cantidad de BAPIs disponibles para que sean utilizados por los desarrolladores, de ahí su nombre que viene del viejo concepto de API (Application Programming Interface). Su aparición en SAP R/3 fue a partir de la versión 3.1 y se hizo para permitir la integración de software entre SAP R/3 y otros fabricantes de software. El número total de BAPIs se ha ido incrementando con la liberación de nuevas versiones de SAP R/3. Los objetos contenidos en el repositorio encapsulan los datos y procesos. De esta forma el acceso a los datos y procesos, por agentes externos, es permitido solo mediante métodos específicos; representados estos por su BAPI correspondiente. De esto último se desprende que una BAPI no es más que un método de un Objeto de Negocio de SAP R/3. Por ejemplo, la funcionalidad implementada para el objeto tipo "Customer" incluye una verificación para la existencia del cliente. De esta forma el tipo de objeto "Customer" posee una BAPI llamada "Customer.CheckExistence". Para que un programa de aplicación sea capaz de usar la BAPI de un método, solo necesita saber como invocar el método; es necesario conocer la definición de la interfase del método. La interfase de una BAPI se define por:

.- Parámetros de Entrada( Import Parameters ) .- Contiene datos a ser pasados desde el programa llamante a la BAPI .- Parámetros de Salida( Export Parameters ) .- Contiene los datos que la BAPI pasa al programa invocante .- Tablas de Entrada/Salida( Import/Export Table Parameters )

Xioma Consulting - ABAP WORKSHOP

151

Para conocer los parámetros que utiliza una BAPI específica se puede hacer de las siguientes maneras: 1. Ingresando a la transacción BAPI.

A. Árbol de Navegación Organizado ya sea de manera jerárquica o alfabéticamente, aquí se busca el nombre de la BAPI requerida según sea su categoría o su nombre, es importante recordar que por lo general todas las BAPIs comienzan con esta palabra en sus nombres como por ejemplo: BAPI_GOODSMVT_CREATE, la cual es utilizada para el movimiento de mercancías. B. Pestaña de opciones y propiedades de una BAPI, aquí se ve información relacionada con una BAPI especifica como es su descripción, modulo de funciones a la que pertenece y documentación entre otras. C. En el Campo Módulo de Funciones al dar doble-click aparece la pantalla donde se encuentra el código fuente de la BAPI. \

Xioma Consulting - ABAP WORKSHOP

152

2. Ingresando a la Transacción SE37.

A. SE coloca el nombre de la BAPI en caso de conocerlo, de no ser así, se puede colocar en este campo “BAPI*” y de esta manera obtener como resultado todas las BAPIs disponibles, una ves seleccionada la BAPI se selecciona visualizar y aparece el código fuente de la BAPI. Código Fuente BAPI. Al ser una función la visualización de los parámetros, código o pruebas de la BAPI se realizan desde la transacción SE37. Las diferentes pestañas ubicadas en la parte superior muestran los parámetros de entrada, de salida y las tablas que requiere la BAPI para realizar un proceso específico. Generalmente es complicado saber para un proceso determinado, usando una BAPI “X” que datos se deben enviar para poder obtener el resultado requerido la manera más común es analizar estos parámetros basándose en sus descripciones para así reunir todo lo necesario para realizar el proceso. En la actualidad las BAPIs del sistema SAP R/3 se implementan como módulos de funciones que se tratan con el Function Builder del Workbench ABAP. Cada módulo de función que da soporte a una BAPI debe cumplir los requisitos siguientes: .- Soportar el Protocolo Remote Function Call( RFC ) .- Haber sido asignada como un método a un Objeto de Negocio SAP .- Debe procesarse sin retornar ventanas de diálogo al programa llamante

Xioma Consulting - ABAP WORKSHOP

153

Ventajas de usar BAPIs Las BAPIs son métodos estandarizados de los Objetos de Negocio SAP R/3, que permiten la integración de los componentes de software de los clientes y de terceros. Algunas de las ventajas de usar BAPIs son: .- Es un Estándar de Negocio .- Es un Estándar Consensuado .- Garantiza estabilidad y compatibilidad futura .- Garantiza orientación a objetos .- Independencia de entorno( apertura )

Usar BAPIs en programas de aplicación Actualmente una BAPI puede ser invocada de dos formas diferentes: .- Llamar la BAPI en el repositorio .- Hacer llamada RFC a la función que implementa la BAPI Ejemplo de llamada de una BAPI * *

Fecha de posteo lw_goodsmvt_header-pstng_date =

SY-DATUM.

*

Fecha de documento lw_goodsmvt_header-doc_date =

*

tipo de movimiento lw_goodsmvt_item-move_type = c_move_type.

*

codigo de material lw_goodsmvt_item-MATERIAL = WG_M.

*

Material Receptor lw_goodsmvt_item-MOVE_MAT = WG_M.

SY-DATUM.

call function 'BAPI_GOODSMVT_CREATE' exporting goodsmvt_header = lw_goodsmvt_header goodsmvt_code = c_goodsmvt_code importing materialdocument = l_materialdocument matdocumentyear = l_matdocumentyear tables goodsmvt_item = lt_goodsmvt_item return = t_return. IF SY-SUBRC NE 0. "Si no hubo errores

Xioma Consulting - ABAP WORKSHOP

154

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING WAIT = 'X'. WL_RETURN-TYPE = 'S'. MESSAGE ID 'S1' TYPE 'S' NUMBER '333' WITH 'Creado Doc material: ' l_materialdocument 'Año: ' l_matdocumentyear. ELSE. "Si hubieron errores WG_ERROR = 'X'. ENDIF.

Xioma Consulting - ABAP WORKSHOP

155

B ATCH I NP U TS La creación de Batch Inputs no es más que un proceso automático que permite usar un guión para ejecutar transacciones de forma masiva. Cuando se habla de Bacth-Input se puede estar refiriendo a un fichero plain-text que necesita que un programa standard (o propio) recoja dicha información, o un programa que simula el proceso de llenado de las pantallas como si el usuario estuviese delante.

Crear una grabación Para crear una grabación se ingresa a la transacción SM35 y se da click en el botón o se accesa directamente desde la transacción SHDB dando click en y aparece la siguiente ventana donde se coloca el nombre de la grabación y el código de transacción. En este ejemplo es MM01 y se da click en Iniciar Grabación.

Xioma Consulting - ABAP WORKSHOP

156

1. Ingresar los datos necesarios: a. Material: (si es número externo colocar el código, si es número interno el sistema lo dará automáticamente) Para este caso es externo. b. Ramo: Ramo de la empresa (en este caso es Alimentos) c. Tipo de material: es el tipo de material que vamos a crear ( en este caso es Salchicha)

2. Dar Enter 3. En la siguiente pantalla seleccionar las vistas que se van a crear para este material. Para este ejemplo serán las de Datos básicos 1 y 2.

Xioma Consulting - ABAP WORKSHOP

157

4. Dar Enter o click en 5. En la vista de Datos básicos 1 colocar los siguientes datos a. Descripción del material b. UMB

Xioma Consulting - ABAP WORKSHOP

158

6. Dar Enter 7. En la vista de Datos básicos 2 colocamos la información correspondiente en los siguientes campos: a. Denominación estándar b. Formato DIN

Xioma Consulting - ABAP WORKSHOP

159

8. Dar Enter para la siguiente pantalla:

Xioma Consulting - ABAP WORKSHOP

160

9. Dar click en la opción “Si” para el mensaje que indica que se ha creado el material.

Click en Guardar y volver a la transacción SHDB donde aparece el ejemplo

Xioma Consulting - ABAP WORKSHOP

161

Se marca y click en , y aparece la siguiente pantalla donde se coloca el nombre del programa donde se va a generar el código de dicha grabación.

Se introduce la descripción

Y por último click en principal.

para que genere el código que se va a utilizar en el programa

Xioma Consulting - ABAP WORKSHOP

162

B AS E S D E DATOS LÓG I CAS Las bases de datos lógicas son programas especiales ABAP que recuperan datos y los hacen disponibles para programas de uso. El empleo más común de bases de datos lógicas es leer información de la base de datos y unirlos a programas ejecutables ABAP. Sin embargo, desde la versión 4.5A, también ha sido posible llamar bases de datos lógicas que usan el módulo de función LDB_PROCESS. Esto le permite llamar varias bases de datos lógicas de cualquier programa ABAP. Es también posible llamar una base de datos lógica más de una vez en un programa.

Funciones de las bases de datos lógicas Además de permitir leer datos de la base de datos, las bases de datos lógicas también son utilizadas para las siguientes tareas: Lectura de los mismos datos para varios programas: Los programas individuales no necesitan conocer la estructura exacta de las tablas de base de datos relevantes (y menos sus llaves foráneas).

Definición de la misma interfaz de usuario para varios programas: Las Bases de datos lógicas tienen una pantalla de selección establecida. Por lo tanto, todos los programas que usan la base de datos lógica tienen la misma interfaz de usuario.

Comprobación de autorización central: Las comprobación de autorización para datos centrales y sensibles pueden ser programadas en el centro de la base de datos para impedirlos y de ese modo evitar el uso de programas simples.

Mejor funcionamiento: Si se quiere mejorar los tiempos de respuesta, las bases de datos lógicas le permiten tomar un número de medidas para lograrlo (por ejemplo, el uso JOINS en vez de SELECT anidados).

Xioma Consulting - ABAP WORKSHOP

163

Creación de una base de datos lógica (SE36) Para la creación, modificación o uso de bases de datos lógicas se cuenta con un Generador de Bases de Datos Lógicas, y se puede acceder de la siguiente forma: 1)Al hacer login en la aplicación, en la barra de menú, click en herramientas -> Workbench ABAP -> Desarrollo -> Entorno de Programación -> Bases Datos Lógicas.

2)Directamente mediante la transacción SE36.

Xioma Consulting - ABAP WORKSHOP

164

Seguidamente aparece la pantalla del Generador de bases de datos lógicas.

El siguiente ejemplo utiliza 5 tablas Z que son: ZTESTUDIANTES, ZTNOTAS, ZTPROFES, ZTPROFES_CURSO y ZTCURSOS en donde ZTESTUDIANTES es el nodo raíz o principal

Xioma Consulting - ABAP WORKSHOP

165

Se introduce la descripción de la base de datos lógica

Se coloca el nombre del nodo raíz, la descripción y se especifica el tipo de nodo, para este caso el nodo raíz se llamara ZTESTUDIANTES

Aparece la base de datos lógica con el único nodo creado hasta el momento

Se procede a insertar los nodos, se marca el nodo actual y click en

Xioma Consulting - ABAP WORKSHOP

166

Aparece una pantalla en donde se coloca el nombre del nodo que se va a insertar (ZTNOTAS), la descripción, se escoge debajo de cual nodo se va a insertar y por último se especifica el tipo

Se repite el proceso con todos los nodos q se van a insertar y al final quedaría la base de datos lógica de la siguiente forma

Se crean los campos de selección (SELECT-OPTIONS), click en Por ser la primera vez, nos va a mostrar la siguiente pantalla donde se marca para cuales nodos se quiere que hayan delimitaciones opcionales y SELECT-OPTIONS

Xioma Consulting - ABAP WORKSHOP

167

De esta forma se crea el include de los SELECT-OPTIONS en donde se cambian los ‘?’ que se generan automáticamente por los nombres que se desean, para el ejemplo se crearon 3: S_EST(estudiantes), S_MAT(cursos) y S_PROF(profesores).

Xioma Consulting - ABAP WORKSHOP

168

Se regresa a la pantalla principal con

y click en

El nombre del programa creado es ‘SAPDBZLDB_EXAMPLE02’ en donde: las primeras 5 letras son ‘SAPDB’ y van a ser constantes, seguido del nombre de la base de datos lógica ‘ZLDB_EXAMPLE02’ Se genera el programa automáticamente con dos includes principales

Donde el include TOP contiene la declaración de las tablas que se insertaron como nodos

Xioma Consulting - ABAP WORKSHOP

169

Y el include NXXX contiene los includes de cada nodo insertado en la base de datos lógica.

Xioma Consulting - ABAP WORKSHOP

170

En donde cada include creado por nodo van a haber dos FORMS generados automáticamente y que se pueden modificar dependiendo de lo que se requiera, se puede ver el caso del include para el nodo ZTESTUDIANTES

El nombre del primer FORM creado es ‘PUT_ZTESTUDIANTES’ en donde: los primeros 4 caracteres son ‘PUT_’ y van a ser constantes, seguido del nombre del nodo ‘ZTESTUDIANTES’. Y el segundo FORM ‘AUTHORITYCHECK_ZTESTUDIANTES’ va a estar formado por ‘AUTHORITYCHECK_’, seguido del nombre del nodo ‘ZTESTUDIANTES’

Importante: el FORM ‘PUT_ZTESTUDIANTES’ tiene la siguiente línea: PUT ZTESTUDIANTES. Ahí es donde envía el resultado de la búsqueda realizada, en el programa de control el resultado se va a recibir por medio del evento: GET ZTESTUDIANTES. Después de modificar los includes para cada nodo, se regresa a la pantalla principal y se da click en anteriormente

para modificar el texto de los SELECT-OPTIONS que se crearon

Xioma Consulting - ABAP WORKSHOP

171

Creación del programa (SE38) Ahora se procede a crear el programa ejecutable para unirlo con la base de datos lógica. Se accesa directamente desde la SE38

Se crea el programa de ejemplo ZLDB_PRUEBA02

Xioma Consulting - ABAP WORKSHOP

172

En los atributos del programa se coloca la descripción del mismo, además se escoge el tipo (Programa Ejecutable) y lo mas importante se introduce el nombre de la Base de datos lógica que se creo anteriormente (ZLDB_EXAMPLE02)

Y por último con un pequeño código se extrae la información requerida

Xioma Consulting - ABAP WORKSHOP

173

Y así se vería el programa al momento de ejecutarlo (con los SELECT-OPTIONS que se crearon en la base de datos lógica)

Función LDB_PROCESS El módulo de funciones permite que se llame una base de datos lógica directamente en el mismo modo interno. Los registros leídos por la base de datos lógica se traspasan a las subrutinas CALLBACK indicadas. La profundidad de lectura se determina mediante los eventos deseados que se han indicado en el parámetro CALLBACK. Puede haber como máximo dos llamadas por nodo

Xioma Consulting - ABAP WORKSHOP

174

que se correspondan con los eventos GET nodo o GET nodo LATE en SUBMIT. Es decir, si el campo "GET" está marcado, se llamará la subrutina CALLBACK directamente después de la lectura de los datos y antes del procesamiento del subárbol que se halla en la base. Si está marcado "GET_LATE", se llamará la subrutina CALLBACK después de procesar el subárbol que se halla en la base.

A pesar de que se pueden llamar diferentes bases de datos lógicas anidadas de la forma que se desee, existen las siguientes restricciones en cuanto al procesamiento de la misma base de datos lógica: a. No se puede volver a llamar la misma base de datos lógica mientras no esté finalizada otra ejecución (excepción LDB_ALREADY_RUNNING). b. Se puede llamar varias veces consecutivamente la misma base de datos lógica cuando está prevista para ello (excepción LDB_NOT_REENTRANT). Que esté prevista para ello significa que el programa de base de datos contiene una subrutina (LDB_PROCESS_INIT) que prepara la base de datos lógica para un paso posterior.

Existen varias posibilidades para indicar limitaciones de la base de datos que, en su mayoría, se corresponden con el traspaso de parámetros en SUBMIT.

SELECTIONS: estructura RSPARAMS. Se corresponde con el suplemento WITH SELECTION-TABLE en SUBMIT.

VARIANT: nombre de una variante que pertenece al programa de base de datos de la base de datos lógica. Se corresponde con el suplemento USING SELECTION-SET en SUBMIT.

EXPRESSIONS: delimitaciones opcionales en el formato RSDS_TEXPR. Se corresponde con el suplemento WITH FREE SELECTIONS en SUBMIT.

La regulación en caso de conflicto es idéntica a SUBMIT: las delimitaciones almacenadas en la variante VARIANT se sobrescriben con las indicadas de forma explícita en SELECTIONS. De forma similar, las delimitaciones opcionales archivadas en la variante se sobrescriben con las traspasadas de forma explícita en EXPRESSIONS.

Xioma Consulting - ABAP WORKSHOP

175

El siguiente es un ejemplo del uso de la funcion LDB_PROCESS llamando a la base de datos logica ZLD_EXAMPLE02 REPORT

ZLDB_PRUEBA01.

TABLES ZTESTUDIANTES. SELECT-OPTIONS SL_EST FOR ZTESTUDIANTES-ZID_EST. TYPE-POOLS: RSDS, RSFS. DATA: CALLBACK TYPE TABLE OF LDBCB, CALLBACK_WA LIKE LINE OF CALLBACK, SELTAB TYPE TABLE OF RSPARAMS, SELTAB_WA LIKE LINE OF SELTAB, TEXPR TYPE RSDS_TEXPR, FSEL TYPE RSFS_FIELDS. ***

FORM's que se ejecutan una vez que se llama la LDB

CALLBACK_WA-LDBNODE CALLBACK_WA-GET CALLBACK_WA-GET_LATE CALLBACK_WA-CB_PROG CALLBACK_WA-CB_FORM

= = = = =

***

'ZTESTUDIANTES'. ‘X’. ‘X’. SY-REPID. 'CALLBACK_ZTESTUDIANTES'.

APPEND CALLBACK_WA TO CALLBACK. CLEAR CALLBACK_WA. CALLBACK_WA-LDBNODE = 'ZTNOTAS'. CALLBACK_WA-GET = ‘X’. CALLBACK_WA-CB_PROG = SY-REPID. CALLBACK_WA-CB_FORM = 'CALLBACK_ZTNOTAS'. APPEND CALLBACK_WA TO CALLBACK. ***S_EST es el SELECT-OPTIONS creado en ZLD_EXAMPLE02***

Xioma Consulting - ABAP WORKSHOP

176

SELTAB_WA-KIND = 'S'. SELTAB_WA-SELNAME = 'S_EST'. LOOP AT SL_EST. MOVE-CORRESPONDING SL_EST TO SELTAB_WA. APPEND SELTAB_WA TO SELTAB. ENDLOOP. ********** Funcion para llamar LDB a partir de la version 4.5A ********** CALL FUNCTION 'LDB_PROCESS' EXPORTING ***********Nombre de base de datos logica que se creo********** LDBNAME = 'ZLDB_EXAMPLE02' VARIANT = ' ' EXPRESSIONS = TEXPR FIELD_SELECTION = FSEL TABLES CALLBACK = CALLBACK SELECTIONS = SELTAB EXCEPTIONS LDB_NOT_REENTRANT = 1 LDB_INCORRECT = 2 LDB_ALREADY_RUNNING = 3 LDB_ERROR = 4 LDB_SELECTIONS_ERROR = 5 LDB_SELECTIONS_NOT_ACCEPTED = 6 VARIANT_NOT_EXISTENT = 7 VARIANT_OBSOLETE = 8 VARIANT_ERROR = 9 FREE_SELECTIONS_ERROR = 10 CALLBACK_NO_EVENT = 11 CALLBACK_NODE_DUPLICATE = 12 OTHERS = 13. IF SY-SUBRC 0. WRITE: 'Exception with SY-SUBRC', SY-SUBRC. ENDIF. FORM CALLBACK_ZTESTUDIANTES USING NAME TYPE LDBN-LDBNODE WA TYPE ZTESTUDIANTES EVT TYPE C CHECK TYPE C. CASE EVT. WHEN 'G'. WRITE: / WA-ZNOMBRE, WA-ZAPE1, WA-ZAPE2. ULINE. WHEN 'L'. ULINE. ENDCASE. ENDFORM. FORM CALLBACK_ZTNOTAS USING NAME WA EVT CHECK WRITE: / WA-ZNOTA. ENDFORM.

Xioma Consulting - ABAP WORKSHOP

TYPE TYPE TYPE TYPE

LDBN-LDBNODE ZTNOTAS C C.

177

OB JE CTOS D E AU TORI Z ACI ÓN Creación de un objeto de autorización (SU21) Para crear un objeto de autorización se utiliza la transacción SU21. A través de esta transacción se pueden crear, visualizar o modificar dichos objetos que a nivel de código ABAP son verificados a través de la instrucción Authority-check. Estos objetos se suelen agrupar por clases.

Para crear el nuevo objeto es necesario seleccionar la clase en la cual se debe incluir, a través de un doble click. En caso de querer crear una clase nueva se da click en el botón donde se indicara el nombre de la clase y la descripción. Una vez dentro de la clase se utiliza de nuevo el botón

para crear el nuevo objeto de autorización.

Xioma Consulting - ABAP WORKSHOP

178

Creación de la clase

Acceso a la clase creada

Los objetos de autorización están compuestos por el nombre del objeto, una descripción, la clase a la que pertenecen y los ámbitos de autorización correspondientes. Estos últimos definen el comportamiento del objeto y están determinados por un elemento de datos y un dominio (pueden ser creados nuevos ámbitos por medio de la transacción SU20).

Xioma Consulting - ABAP WORKSHOP

179

Es usual utilizar un ámbito que determine las acciones que se pueden ejercer sobre el objeto que se desea evaluar en el authority-check. El ámbito ACTVT permite definir estas acciones.

Xioma Consulting - ABAP WORKSHOP

180

Una vez finalizado el proceso se visualiza el nuevo registro en el listado de objetos.

Utilizando la transacción SU03 se asigna el perfil que contiene al objeto de autorización.

Authority-check Las verificaciones de autorización se deben realizar antes de tratar de acceder información en la base de datos. La instrucción AUTHORITY-CHECK verifica si el usuario tiene o no derechos sobre los valores que se desean acceder. Si la variable SYSUBRC vale 0, entonces el usuario tiene derechos suficientes para proseguir, si es 12 el usuario no tiene permiso suficiente y en el caso de 24 no se especificaron suficientes parámetros para validar la autorización. Para realizar la verificación de la autorización se hace referencia a los objetos de autorización, estos definen la combinación de campos que sirven como modelo tanto para las autorizaciones como para las verificaciones de autorización. Se organizan en clases de objetos para facilitar su administración y localización (transacción SU21).

Xioma Consulting - ABAP WORKSHOP

181

Sintaxis: AUTHORITY-CHECK OBJECT ‘’ ID ‘’ {FIELD ‘’} | DUMMY ... ID ‘’{FIELD ‘’}| DUMMY.

Ejemplo: PARAMETERS carr TYPE spfli-carrid. AT SELECTION-SCREEN. AUTHORITY-CHECK OBJECT 'S_CARRID' ID 'CARRID' FIELD carr ID 'ACTVT' FIELD '03'. IF SY-SUBRC NE 0. MESSAGE 'Sin autorización' TYPE 'E'. ENDIF.

Se puede utilizar la opción de patrón en el menú del editor para obtener facilmente los parametros de autorización de un objeto. En caso de que no se desee enviar un valor, se envia en su lugar la palabra DUMMY.

Xioma Consulting - ABAP WORKSHOP

182

OB JE TOS D E B LOQU E O SAP puede sincronizar el acceso simultáneo de varios usuarios a los mismos datos con un mecanismo de bloqueo. Cuando se programan las transacciones interactivas, los bloqueos son fijados y lanzados llamando funciones de bloqueo y desbloqueo. Estas funciones se generan automáticamente al crear los objetos de bloqueo en el diccionario de ABAP.

Estructura de un objeto de bloqueo Las tablas en las que los datos se deben bloquear se definen en un objeto de bloqueo junto con sus campos llave. Cuando se seleccionan las tablas, hay una tabla (la tabla primaria) que es la que primero se selecciona. Otras tablas (tablas secundarias) se pueden también agregar usando llaves foráneas.

Bloquear campos Los argumentos a bloquear de una tabla en el objeto de bloqueo consisten en los campos llave de la tabla.

Los campos a bloquear de ese objeto de bloqueo son usados como parámetros de entrada en las funciones de bloqueo y desbloqueo. Cuando se llaman estas funciones, las filas de la tabla son especificadas definiendo valores en estos campos. Estos valores pueden también ser genéricos. Los campos del bloqueo definen qué subconjunto de las filas de la tabla debe ser bloqueado.

Xioma Consulting - ABAP WORKSHOP

183

Crear un Objeto de Bloqueo Para crear un objeto de bloqueo se utiliza la transacción SE11.

El nombre del Objeto de bloqueo siempre debe de comenzar con la letra E, y usualmente posterior a eso se coloca “Z_” seguido por el nombre del objeto que se desea bloquear. Al presionar el botón de Crear, veremos la siguiente pantalla:

Xioma Consulting - ABAP WORKSHOP

184

Permitir RFC: Si este indicador está seleccionado, se podrán llamar los módulos de funciones generados durante la generación del objeto de bloqueo, los cuales fijan y liberan bloqueos mediante Remote Function Calls (RFC).

Dependencias En caso que se active permitir RFC para un objeto de bloqueo existente, deberá asegurarse que la llamada de los módulos de funciones generados se efectúe con parámetros adecuados al tipo. Antes de activar el objeto de bloqueo con la nueva opción, debería verificar todos los programas que utilicen los módulos de funciones en cuestión. En el siguiente Tab se encuentran las Tablas a utilizar. En un objeto de bloqueo se indicarán las tablas en las que deben bloquearse registros con una orden de bloqueo.

Xioma Consulting - ABAP WORKSHOP

185

Tabla primaria

En la selección de tablas se partirá de una tabla (tabla primaria). Modo de bloqueo

Determina cómo sincronizar el acceso de varios usuarios a los registros de la tabla. Existen los siguientes modos: •

Protección de escritura: los datos bloqueados pueden ser visualizados o tratados únicamente por un usuario. Tanto la petición de otra protección de escritura como de otra protección de lectura serán rechazadas.



Protección de lectura: Varios usuarios pueden tener acceso de sólo lectura a los mismos datos simultáneamente. No obstante, en el momento en que un usuario pase a tratar los datos, éstos quedarán bloqueados para los demás usuarios. Las peticiones de nuevas protecciones de lectura se aceptarán incluso si éstas provienen de otros usuarios. Las protecciones de escritura serán rechazadas.

Xioma Consulting - ABAP WORKSHOP

186



Protección de escritura ampliada: Igual a la de protección de escritura, pero sólo puede ser solicitada una vez por la misma transacción. Cualquier otra nueva petición de una protección será rechazada.

Tablas secundarias

A la tabla primaria pueden añadírsele otras tablas (tablas secundarias) mediante relaciones de llaves externas. El tercer Tab es de Parámetros de bloqueo, en el cual se indican los valores que serán pasados a las funciones de bloqueo y desbloqueo

Nombre de parámetro bloqueo

Un parámetro de bloqueo tiene, por lo general, el mismo nombre que el campo de tabla correspondiente. Una modificación será precisa, por ejemplo, cuando varios campos de diferentes tablas del objeto de bloqueo tienen el mismo nombre. Indicador Pond

En caso que este indicador esté marcado para el campo, se incluirá como parámetro en los módulos de funciones generados durante la activación del objeto de bloqueo. Estos parámetros sirven para la transmisión de la llave a bloquear o para el control del comportamiento de bloqueo en la transmisión del valor inicial. El indicador se fija por defecto. En caso de no necesitar el parámetro de bloqueo en los módulos de funciones generados, se puede desmarcar. En este caso, en relación a este parámetro, se bloqueará siempre de forma genérica.

Xioma Consulting - ABAP WORKSHOP

187

Al finalizar de realizar los cambios solamente se la da al botón Activar queden listos los cambios.

para que

Funciones de los Objetos de bloqueo Cuando se ha creado un objeto de bloqueo automáticamente se crean dos funciones, una para bloquear (ENQUEUE_) y otra para desbloquear objetos (DEQUEUE_< nombre objeto de bloqueo >) Los módulos generados de la función se asignan automáticamente a los grupos de la función. No se debe cambiar estos módulos de la función y su asignación a los grupos de la función puesto que los módulos de la función son generados nuevamente cada vez que el objeto de bloqueo es activado.

Parámetros de las funciones Nombres de campo del objeto de Bloqueo Las llaves que se bloquearán se deben pasar aquí. Parámetros para pasar bloqueos al programa de actualización Un bloqueo se quita generalmente en el final de la transacción o cuando se invoca la función de desbloqueo (DEQUEUE). Sin embargo, no sucede así si la transacción ha llamado rutinas de actualización. En este caso, un parámetro debe comprobar que se haya quitado el bloqueo. El parámetro _SCOPE controla cómo el bloqueo o el desbloqueo se pasa al programa de actualización. Se tiene las opciones siguientes: • •



_SCOPE = 1: Los bloqueos o los desbloqueos no se pasan al programa de actualización. Se quita el bloqueo cuando se termina la transacción. _SCOPE = 2: El bloqueo o el desbloqueo se pasa al programa de actualización. El programa de actualización es responsable de quitar el bloqueo. El programa interactivo con el cual el bloqueo fue solicitada no tiene mas influencia en el comportamiento del bloqueo. Ésta es la configuración estándar de la función de bloqueo (ENQUEUE). _SCOPE = 3: El bloqueo o desbloqueo también se pasa al programa de actualización. El bloqueo se debe quitar en el programa interactivo y en el programa de actualización. Ésta es la configuración estándar para la función de desbloqueo (DEQUEUE).

Parámetros para el modo de Bloqueo

Xioma Consulting - ABAP WORKSHOP

188

Un parámetro MODE_ existe para cada tabla del objeto de bloqueo. El modo de bloqueo para esta tabla se puede fijar dinámicamente con este parámetro. Los valores permitidos para este parámetro son S (bloqueo de lectura), E (bloqueo en escritura), X (ampliado el bloqueo en escritura), y O (bloqueo optimista). El modo de bloqueo especificado para la tabla respectiva cuando el objeto de bloqueo fue creado es el valor por defecto para este parámetro. Este valor prefijado puede, sin embargo, ser eliminado como sea necesario cuando se invoca la función. Si se modifica este valor por defecto, cuando se haga el desbloqueo debe de tener el mismo valor que se asignó a la función de bloqueo. Control de transmisión de bloqueos El parámetro _COLLECT controla si la petición de bloqueo o desbloqueo debe ser realizada directamente o si debe primero ser escrito al contenedor local de bloqueos (las peticiones de bloqueo y desbloqueo pueden ser almacenados en un contenedor local de bloqueos y ser enviados juntos invocando la función FLUSH_ENQUEUE). Este parámetro puede tener los valores siguientes: • •

Valor inicial: La petición de bloqueo o desbloqueo se envía directamente al servidor de bloqueos. “X”: La petición de boqueo o desbloqueo se pone en el contenedor local de bloqueos. Estos se pueden entonces enviar al servidor de bloqueos agrupados invocando la función FLUSH_ENQUEUE.

Siempre que se usa el modo X del bloqueo (ampliar el bloqueo en escritura), los bloqueos no se deben enviar al contenedor local de bloqueos si hay asignados muchos bloqueos para determinada tabla. En este caso, habrá una pérdida considerable en funcionamiento en comparación con la transmisión directa de bloqueos. Comportamiento en conflicto de bloqueos (solo al bloquear) La función ENQUEUE también tiene el parámetro _WAIT. Este parámetro determina el comportamiento del bloqueo cuando hay un conflicto al bloquear. Se tienen las opciones siguientes: Valor inicial: Si un intento de bloqueo falla porque ya hay un bloqueo, se acciona la excepción FOREIGN_LOCK. “X”: Si un intento de bloqueo falla porque hay un bloqueo, el intento de bloquear se repite después de esperar cierto tiempo. Se acciona la excepción FOREIGN_LOCK solamente si ha transcurrido cierto límite de tiempo desde el primer intento de bloqueo. El tiempo de espera y el límite de tiempo son definidos por parámetros de perfil. Controlando borrado del bloqueo de entrada (DEQUEUE solamente) La función de desbloqueo también tiene el parámetro _SYNCHRON. Si se pasa el valor “X”, la función DEQUEUE espera hasta que la entrada de bloqueo se ha quitado de la tabla de bloqueos. Si no, entonces se suprime asincrónicamente, es decir, si la tabla de

Xioma Consulting - ABAP WORKSHOP

189

bloqueos del sistema se lee después de que se quita el bloqueo, la entrada en la tabla de bloqueos puede existir. Excepciones de la función de ENQUEUE · FOREIGN_LOCK': Ya existe un bloqueo. Se puedes obtener el nombre del usuario que tiene el bloqueo revisando la variable del sistema SY-MSGV1. · SYSTEM_FAILURE: Se acciona esta excepción cuando en el servidor de bloqueos ocurrió un problema mientras se fijaba el bloqueo. En este caso, el bloqueo no podrá ser fijado. Si las excepciones no son procesadas por el programa que lo llama, entonces los mensajes apropiados se despliegan. Campos de referencia para los objetos de bloqueo RFC activados El tipo de una función RFC debe ser definido completamente. Los parámetros de la función tienen los siguientes campos de referencia para los objetos RFC:

PARÁMETROS

CAMPOS

DE

REFERENCIA

X_

DDENQ_LIKE-XPARFLAG

_WAIT

DDENQ_LIKE-WAITFLAG

_SCOPE

DDENQ_LIKE-SCOPE

_SYNCHRON

DDENQ_LIKE-SYNCHRON

Ejemplo con objetos de bloqueo Se tiene el caso de reservaciones de vuelos. Los vuelos se registran en la tabla SFLIGHT y las reservaciones para los vuelos en la tabla SBOOK. Las dos tablas se relacionan con una llave foránea. El objeto de bloqueo E_BOOKING debe por lo tanto contener la tabla SFLIGHT como tabla primaria y la tabla SBOOK como tabla secundaria.

Xioma Consulting - ABAP WORKSHOP

190

El argumento de bloqueo de la tabla SFLIGHT contiene los campos MANDT, CARRID, CONNID y FLDATE. El argumento de bloqueo de la tabla SBOOK contiene los campos MANDT, CARRID, CONNID, FLDATE, BOOKID y CUSTOMID. Al seleccionar el modo exclusivo de bloqueo hace que los datos puedan ser vistos y modificados solo por el usuario que lo esta invocando. Cuando se activa el objeto de bloqueo, los módulos siguientes de la función se generan de su definición: * ENQUEUE_E_BOOKING (ejecuta el bloqueo) * DEQUEUE_E_BOOKING (libera el bloqueo) La función ENQUEUE_E_BOOKING se invoca de la siguiente manera:

Con esta llamada, el vuelo LH 400 del 29 de noviembre de 1998 esta bloqueado de manera exclusiva (modo E de bloqueo) en la tabla SFLIGHT junto con todas las reservaciones incorporadas a la tabla SBOOK para este vuelo (puesto que el valor inicial 0 se transfiere para BOOKID y CUSTOMID). El bloqueo se envía al programa de actualización (_SCOPE = `2'). Si hay un conflicto de bloqueos, se hace otra tentativa de fijar el bloqueo después de cierto tiempo (_WAIT = `X'). El bloqueo puede ser quitado invocando la función DEQUEUE_E_BOOKING:

Xioma Consulting - ABAP WORKSHOP

191

Las entradas exclusivas de bloqueo existentes para el vuelo LH 400 se suprimen en la tabla SFLIGHT. La petición de suprimir las entradas de bloqueo se pasa al programa de actualización (_SCOPE = `3').

Xioma Consulting - ABAP WORKSHOP

192

AB AP D E V E LOP ME N T WORK B E NCH

El ABAP development workbench es una aplicación que reúne prácticamente todas las herramientas técnicas del entorno de SAP para dar soporte al desarrollo eficiente de aplicaciones empresariales de gran escala a través del ambiente distribuido de cliente/servidor en el R/3. Esta integración permite una mayor agilidad durante el desarrollo y el mantenimiento de las aplicaciones. El repositorio de R/3 contiene todos los objetos de desarrollo, por ejemplo programas, definiciones de la base de datos y tipos de datos globales. Es por esto que los objetos de desarrollo suelen ser conocidos como objetos del repositorio, y estos objetos son independientes del mandate. El repositorio de R/3 se encuentra organizado por aplicación, y cada una de estas se encuentra dividida en subdivisiones lógicas llamadas clases de desarrollo (paquetes). Cada vez que se crea un nuevo objeto de desarrollo, éste debe ser asignado a un paquete.

MIME Repository El repositorio de objetos MIME se utiliza para almacenar estilos de hojas, gráficos, iconos, audio, y otros tipos de objetos en el sistema SAP. Se crean como objetos en la base de datos de SAP y puede ser referidos como parte de diferentes aplicaciones tecnológicas.

Xioma Consulting - ABAP WORKSHOP

193

Estos objetos utilizan la infraestructura de desarrollo de SAP. Cualquier cambio realizado en este repositorio implica la asignación del objeto en una orden de transporte.

Repository Browser Este repositorio representa una herramienta que se utiliza para editar todos los objetos de desarrollo, tales como la edición de programas ABAP, creación de transacciones, aplicaciones de diálogo, funciones, etc

Repository Information System El repositorio del sistema de información facilita la búsqueda de objetos en el sistema SAP. Se pueden localizar objetos que encajan con un criterio particular.

Tag Browser El navegador de etiquetas permite agregar etiquetas y sus atributos para el editor correspondiente. Por ejemplo es muy útil para la implementación del diseño de aplicaciones Web. Siempre se asume que el usuario entiende el significado de las etiquetas individuales y sus atributos.

Transport Organizer El organizador de transportes brinda la funcionalidad para la creación, documentación y liberación de ordenes de transporte durante todo el período de parametrización y desarrollo, así como posteriormente para la reorganización del entorno de desarrollo. Las herramientas que posee estas orientadas específicamente a los equipos de desarrollo y a los administradores de la implementación.

Xioma Consulting - ABAP WORKSHOP

194

AP LI CACI ON E S D E D I ÁLOG O El desarrollo de aplicaciones de dialogo posee como característica principal el diseño de pantallas. Estas pantallas son realmente programas dinámicos (DYNPRO) que se encuentran integrados con el diccionario de ABAP, lo cual permite la verificación de la consistencia de los campos automáticamente. Por ejemplo la verificación de campos obligatorios, tipos, llaves o valores prefijados. La disposición de los DYNPRO es muy flexible permitiendo el uso de campos de entrada y salida, botones de radio, cajas de check, botones y otros objetos.

Screen Painter (SE51)

El screen painter permite la creación de aplicaciones de diálogo por medio del desarrollo de DYNPROs. Cada DYNPRO estará asociado a un programa y su diferenciador es un número de 4 dígitos.

Lógica del proceso La lógica del proceso dicta la manera en que un programa dinámico procesa la información que fluye por él. Esta lógica se compone de dos eventos principales que determinan el flujo del programa, el proceso antes de la salida (PBO) y el proceso después de la entrada (PAI). Estos procesos se crean automáticamente por el screen painter.

Xioma Consulting - ABAP WORKSHOP

195

Process Before Output (PBO) El PBO se procesa inmediatamente antes de que la disposición de pantalla sea mostrada, de tal forma que se pueden invocar todas las rutinas que se requieran para inicializar los campos y/o variables.

Process After Input (PAI) El PAI es ejecutado justo después que un usuario realiza una acción. Toda la lógica que se desea ejecutar en un programa debe ser invocada desde este evento.

Process on help-request (POH) El POH se invoca cuando se dispara el evento de ayuda al oprimir la tecla F1. En este bloque se buscará ejecutar el módulo que esta relacionado con el campo al que se le invocó la ayuda. Si existieran varios campos que cumplen el criterio solo se ejecutará el evento para el primero de ellos. Una vez finalizado el POH se reinicia la lógica del proceso ejecutando el PBO. Este proceso tiene prioridad sobre las ayudas definidas en el diccionario de datos.

Process on value-request (POV) El POV se ejecuta cuando se dispara el evento de ayuda de búsqueda (matchcode) con la tecla F4. En este bloque se buscará ejecutar el módulo que esta relacionado con el campo al que se le invocó el match-code. . Si existieran varios campos que cumplen el criterio solo se ejecutará el evento para el primero de ellos. Una vez finalizado el POH se reinicia la lógica del proceso ejecutando el PBO. Este proceso tiene prioridad sobre las ayudas definidas en el diccionario de datos.

MODULE Dentro de los eventos PBO y PAI se deben crear bloques de código llamados módulos, estos son las subrutinas que contienen el código que controla el programa. Sintaxis: MODULE [ AT {EXIT COMMAND } | {CURSOR-SELECTION } ] [ ON {CHAIN-INPUT } | {CHAIN-REQUEST } ].

Ejemplo: PROCESS BEFORE OUTPUT. * MODULE STATUS_0100. * PROCESS AFTER INPUT. MODULE USER_COMMAND_0100. …

Xioma Consulting - ABAP WORKSHOP

196

*&------------------------------------------* *& Module USER_COMMAND_0100 INPUT *&------------------------------------------* *text *-------------------------------------------* MODULE USER_COMMAND_0100 INPUT. ENDMODULE. " USER_COMMAND_0100

INPUT

Es importante considerar que no es posible usar sentencias ABAP en la lógica del proceso, éstas deben ir dentro de los módulos. Por razones Para el caso del AT EXIT COMMAND la función que se utilice debe ser de tipo ‘E’9 y debe estar en el PAI. En caso de existir varios AT EXIT COMMAND, solo se ejecutará el primero. En el caso del AT CURSOR-SELECTION la función debe ser ‘CS’ y el tipo ha de ser ‘S’. Además el cursor debe estar posicionado en un campo de entrada o salida. Todo esto en el PAI. Si se quisiera asignar al doble click la funcionalidad del AT CURSOR-SELECTION se puede conseguir definiendo la función CS a la tecla F2.

ON CHAIN-INPUT y ON CHAIN-REQUEST se utilizan para ejecutar los eventos ON INPUT y ON REQUEST para los campos individuales en una cadena (CHAIN).

FIELD Esta instrucción puede ser utilizada en cualquiera de los cuatro bloques de la lógica de procesos (PAI, PBO, POH y POV), sin embargo no tiene efecto alguno en el bloque PBO. Su función es regular el envío de información entre el DYNPRO y el programa ABAP. Se utiliza en conjunto con la instrucción MODULE cuando se desea condicionar un módulo a ejecutar para un campo específico. Sintaxis: FIELD MODULE {ON INPUT} | {ON REQUEST} | {ON {CHAIN-INPUT}|{CHAIN-REQUEST}} | {AT CURSOR-SELECTION}.

9

Ver Menu Painter

Xioma Consulting - ABAP WORKSHOP

197

ON INPUT implica que el módulo se ejecutará solo si el valor del campo es vacío o cero en el caso de valores numéricos. Si el campo posee un valor inicial tampoco se ejecutara, sin importar que el usuario lo haya vuelto a digitar. La condición ON REQUEST hará que se ejecute el módulo si se da un cambio en el campo después del PBO, sin importar el valor que sea.

CHAIN La instrucción CHAIN permite encadenar una serie de campos en la lógica del proceso para ser evaluados en un módulo invocado con un CHAIN-INPUT o con un CHAIN-REQUEST. CHAIN ha de terminar con un ENDCHAIN. Es importante recordar que aunque la instrucción es válida en el PBO no tiene ningún efecto en éste bloque.

LOOP El LOOP en la lógica de proceso sirve para iterar en una tabla interna que se encuentre atada a un objeto en el DYNPRO. Por ejemplo a un TABLE CONTROL (GRID). Permitiendo así que se puedan evaluar los valores de la tabla interna.

Creación del DYNPRO Al crear un DYNPRO el primer paso es la definición de los valores básicos en la pestaña de atributos.

Xioma Consulting - ABAP WORKSHOP

198

Descripción Breve: Es obligatorio indicar una descripción para el DYNPRO. Tipo de DYNPRO: Existen 4 tipos de dynpros. Normal: Es el DYNPRO que forma una pantalla por sí mismo. Subscreen: Es una subárea en un DYNPRO normal, pero que posee su propia lógica de proceso. Modal: Es una ventana que depende de una ventana padre, y no retorna el control a la ventana padre sino hasta que es cerrada. DYNPRO Selección: Este tipo de DYNPRO es de uso interno de SAP y es generado automáticamente. Manipular este tipo de DYNPROS por medio del screen painter no es muy recomendando dado que este tipo de DYNPRO puede ser regenerado. Opciones: Existen 5 tipos de opciones. Retener datos: Esta opción permite retener los datos para la siguiente ejecución del DYNPRO si las opciones del usuario están activadas en Sistema -> Valor prefijado para usuario -> Retener datos-> Fijar datos-> Borrar datos. Desconectar compresión del dynpro para tiempo de ejecución: Esta opción comprime los campos en la pantalla que en tiempo de ejecución no sean relevantes dependiente de una serie de criterios.

Xioma Consulting - ABAP WORKSHOP

199

Dynpro modelo: Esta opción es de uso interno e identifica DYNPROs que se utilizan como modelos. Mantener posición desplazamiento: Este atributo está pensado para dynpros largos en los cuales se ha perdido la posición de desplazamiento debido a ciertas acciones. Indica que la posición de desplazamiento del dynpro principal debe mantenerse en caso de que el dynpro se visualice sucesivamente. Sin barra herramientas de aplicación: la barra de herramientas de aplicación correspondiente al status actual del programa no se visualiza, independientemente de si contiene o no pulsadores.

Otros Atributos: DYNPRO Siguiente: Indica cual es el siguiente DYNPRO que ha de ejecutarse al finalizar el actual. Puede invocarse a sí mismo para mantenerse en un DYNPRO y cambiarse en tiempo de ejecución con la instrucción SET SCREEN. En caso de hacer un SET SCREEN 0 se finaliza el programa (en caso de estar en el DYNPRO principal) o al DYNPRO anterior. Posición del Cursor: Si no se desea que el cursor sea posicionado en el primer campo de entrada, sino en otro campo, es necesario indicar el nombre de este campo. Esta función puede ser ejecutada de forma dinámica en el modulpool mediante la instrucción ABAP 'SET CURSOR FIELD '. Líneas/Columnas: La cantidad indicada de líneas y columnas determina el tamaño de DYNPRO previsto para la actualización. Lista de Elementos: Esta pestaña contiene todos los atributos de los diferentes objetos o elementos que existen en la pantalla. Lógica del proceso: En la pestaña de lógica de proceso se inserta todo el código que rige el comportamiento del DYNPRO. Disposición: El botón de disposición invoca al editor gráfico (Graphical Screen Painter).

Xioma Consulting - ABAP WORKSHOP

200

Graphical Screen Painter El screen painter gráfico muestra un canvas donde se colocan los diferentes objetos que pueden existir en un DYNPRO. La barra de componentes se encuentra a la izquierda.

1. Puntero: El puntero se utiliza para seleccionar y mover objetos en el canvas. 2. Campo de Texto: Se utiliza para colocar etiquetas en el canvas. 3. Campo de entrada/salida: Este objeto se relaciona con una variable para capturar o mostrar su valor en el DYNPRO. 4. Checkbox: Se utiliza para crear un campo de selección. 5. Radiobutton: Sirve para crear un conjunto de radio buttons. 6. Botón: Crea un botón. 7. Pestañas: Crea un control de pestañas. 8. Wizard de Pestañas: Crea automáticamente el código para controlar las pestañas. 9. Marco: Crea un marco en el canvas. Permite agrupar una serie de objetos. 10. Área de subscreen: Define un área donde ha de aparecer un subscreen. 11. Control de Tabla: Se utiliza para crear una plantilla en el canvas (GRID). 12. Wizard de Control de Tabla: Genera automáticamente el código y los objetos que se requieren para un Control de Tabla.

Xioma Consulting - ABAP WORKSHOP

201

13. Contenedor: Permite la creación de un objeto nuevo en tiempo de ejecución utilizando programación orientada a objetos. 14. Icono: Permite colocar un icono en tiempo de ejecución. 15. Ventana lista de elementos: Muestras todos los objetos en el canvas con sus atributos en forma de resumen. 16. Campos del diccionario: Permite seleccionar campos de estructuras del diccionario o de un programa para generarlos automáticamente en el canvas. 17. Ventana de atributos: Muestra y permite la edición de los atributos de un objeto. Esta ventana también se abre cuando se da doble click sobre un objeto. Los campos en rojo son obligatorios. Uno de estos campos obligatorios es el nombre del objeto. El campo texto se cambia en aquellos objetos donde sea relevante. En el campo despliegue se puede seleccionar si es un list box, cuando se refiere a un campo de entrada o visualización. Aquellos objetos que puedan contener iconos tendrán un campo para seleccionarlo de la lista de iconos de SAP. En el campo Quick Info se introduce un texto a desplegarse en tiempo de ejecución al colocar el puntero sobre el objeto. Cada objeto puede pertenecer a 4 grupos diferentes (cada uno codificable con 3 dígitos), esto permite el cambio de atributos grupales. En el caso de los botones existe el campo código de función, el cual se pasa a la variable SY-UCOMM al ser oprimido el botón. El tipo de botón de función que sirve para controlar el proceso y que puede ser de los siguientes tipos: E (ejecuta el módulo AT EXIT COMMAND, el OK Code obtiene el valor ‘/E’), H Ayuda (ejecuta el ON HELP REQUEST dejando el OK CODE en ‘?’, S Función del sistema (OK CODE ‘/’), P Función del GUI (OK CODE ‘=’), T Transacción (OK CODE ‘/n’). Por defecto el tipo de función esta en vacío y no es obligatorio. La sección de atributos contiene tres pestañas: diccionario, programa y visualización. La sección de diccionario se encarga de brindarle al objeto características provenientes del diccionario de datos tales como el formato, si el campo proviene directamente del diccionario, una

Xioma Consulting - ABAP WORKSHOP

202

rutina de conversión, definir una ayuda de búsqueda, si existe un campo de referencia o un PARAMETER ID, indicador de SET PARAMETER ID que sirve para enviar el valor que tome el campo al parámetro, indicador de GET PARAMETER ID que toma el valor del parámetro para el campo, verificación de clave externa y finalmente el indicador para permitir mayúsculas y minúsculas. En el caso de los atributos de programa se puede especificar para los campos de entrada o salida si el campo es solo de entrada o campo de salida, o si debe desplegarse en el Dynpro como un campo de sólo salida. Cuando el campo es de entrada es posible especificar si el tipo de entrada es: posible, no posible, recomendada y requerida (obligatoria). El campo de pulsador de entradas posibles sirve para controlar la aparición del botón de las ayudas de búsqueda en el campo. El check de alineación derecha justifica el texto que acompaña el objeto a la derecha. El check de Cero a la izquierda rellena con ceros cuando el contenido del campo es numérico. Al activar el check Entrada * se indica que este campo debe invocar el módulo en la lógica de proceso que esté atado al campo mediante un FIELD ... MODULE ... ON *-INPUT, cuando el primer carácter del campo sea un ‘*’. El check de tipo de letra equidistante se encarga de definir un espaciado equidistante entre los caracteres. El indicador de Visible e invisible implican que el campo se pueda o no ver durante la ejecución. El indicador de 2 dimensiones elimina el efecto de tridimensionalidad en los campos de entrada y salida durante el tiempo de ejecución. Los denominadores de izquierda y derecha conectan el objeto de texto al siguiente objeto que se encuentre a la derecha o a la izquierda. La opción de sensibilidad al doble click se encarga de asignar un OK CODE al dar doble click sobre el objeto de texto o de entrada y salida.

Xioma Consulting - ABAP WORKSHOP

203

Creación de transacciones (SE93)

La transacción SE93 permite la definición de una transacción que puede ser colocada en el menú de SAP o ejecutada directamente desde la línea de comando del SAP GUI. Las transacciones pueden entenderse como accesos directos a los programas que existen en el sistema. Todas las transacciones creadas por un usuario han de iniciar por Z, y son objetos independientes del mandante.

Xioma Consulting - ABAP WORKSHOP

204

Al crear una nueva transacción, estas pueden ser de 5 tipos: 1. Transacciones de Diálogo (Module Pool): son aquellas transacciones que están atadas a un programa que posee Dynpros. 2. Transacción de Reporte: Se utilizan para los programas que son imágenes de selecciones (Reportes). 3. Transacción de Clase: Ejecuta el método de una clase desde la transacción. 4. Transacción con variantes: Crea una transacción nueva para ejecutar la variante de otra transacción. En este caso es importante recordar que las variantes son dependientes del mandante. 5. Transacción con parámetros: Ejecuta otra transacción enviando los parámetros con los que se desea iniciar.

Menu Painter (SE41)

Los menús (también llamados Status GUI) permiten al usuario ejecutar funciones de un programa desde la barra de herramientas o la barra de menús. Estos menús son invocados desde el PBO en la lógica de proceso. Al crear un menú se debe indicar el programa al que pertenece y el nombre del status (menú).

Xioma Consulting - ABAP WORKSHOP

205

Existen 3 bloques principales que son: 1. La barra de menú: Contiene todas las opciones del menú para el dynpro. 2. La barra de pulsadores: Define todos los botones que se encuentran en la barra de pulsadores. 3. Teclas de función: Asigna el la función para las teclas de función y sus respectivas combinaciones con otras teclas. También contiene la asignación de los botones estándar de la barra de herramientas del GUI.

Una vez que el menú ha sido creado y activado, debe ser invocado por código de la siguientes manera:

PROCESS BEFORE OUTPUT. MODULE STATUS_0100. PROCESS AFTER INPUT. MODULE USER_COMMAND_0100. *&-----------------------------------------------------------*& Module STATUS_0100 OUTPUT *&------------------------------------------------------------* text *------------------------------------------------------------MODULE STATUS_0100 OUTPUT. SET PF-STATUS 'PRINCIPAL'. *

SET TITLEBAR 'xxx'.

Xioma Consulting - ABAP WORKSHOP

206

ENDMODULE.

" STATUS_0100

OUTPUT

En caso de querer excluir elementos del menú ha de ser de la siguiente manera: *&-----------------------------------------------------------*& Module STATUS_0100 OUTPUT *&------------------------------------------------------------* text *------------------------------------------------------------MODULE STATUS_0100 OUTPUT. DATA fcode TYPE TABLE OF sy-ucomm. ... APPEND 'BU'

TO fcode.

APPEND 'BACK' TO fcode. SET PF-STATUS 'PRINICIPAL' EXCLUDING fcode. ENDMODULE.

" STATUS_0100

OUTPUT

Otras Sentencias para DYNPRO CALLSCREEN Esta sentencia llama a un DYNPRO por su número. Es posible especificar las coordenadas donde ha de aparecer. Sintaxis: CALL SCREEN dynnr [STARTING AT col1 lin1 [ENDING AT col2 lin2]].

SET TITLEBAR En tiempo de ejecución esta instrucción establece el título que ha de desplegar el GUI para el DYNPRO actual. El nombre del título actual queda almacenado en la variable de ambiente SY-TITLE. Es importante considerar que el título ha de ser establecido en el PBO, de no ser definido ninguno la palabra SAP es desplegada en la barra de títulos. Además el máximo de caracteres que se soporta es de 70, y cualquier cadena superior a ésta

Xioma Consulting - ABAP WORKSHOP

207

longitud será truncada. Los títulos puede ser editados mediante la transacción SE41 y la opción “Lista de Títulos”. Sintaxis: SET TITLEBAR 'XXX’.

LOOP AT SCREEN. La tabla de ambiente SCREEN almacena los atributos de los diferentes objetos que se encuentran en el canvas del DYNPRO. Para recorrer la tabla se utiliza la instrucción LOOP. Sin embargo la tabla SCREEN es una tabla sin cabecera y sobre la cual no es posible realizar un filtro a través de la adición WHERE. Por lo tanto ha de ser recorrida totalmente y filtrada mediante un IF o un CASE. Los campos en la tabla son los siguientes:

COMPONENTE

ATRIBUTO

NAME

Nombre

GROUP1

Grupo 1

GROUP2

Grupo 2

GROUP3

Grupo 3

GROUP4

Grupo 4

REQUIRED

Campo Obligatorio

INPUT

Posible para entrada

OUTPUT

Campo de Salida

INTENSIFIED

Campo intensificado

INVISIBLE

Elemento invisible

LENGHT

Tamaño visible

ACTIVE

Campo activo

DISPLAY_3D

Tipo de caja

VALUE_HELP

Ayuda

REQUEST

Existe entrada

VALUE_IN_COMBO

Existe valor en lista

Xioma Consulting - ABAP WORKSHOP

208

Syntaxis: LOOP AT SCREEN [INTO wa]. ... ENDLOOP.

Al realizar un loop por los diferentes elementos que se encuentran en la pantalla es posible cambiar los atributos de la siguiente manera en el PBO: MODULE modify_0100 OUTPUT. LOOP AT SCREEN. IF screen-name = 'VAL'. screen-required

= '1'.

screen-intensified = '1'. MODIFY SCREEN. ENDIF. ENDLOOP. ENDMODULE.

SET CURSOR Durante el proceso del bloque PBO la instrucción SET CURSOR permite que el cursor se posicione en una ubicación del DYNPRO. Sintaxis: SET CURSOR FIELD .

Ejemplo: SET CURSOR FIELD 'EDT_CAMPO2'.

Xioma Consulting - ABAP WORKSHOP

209

AMP LI ACI ONE S Las ampliaciones son objetos del usuario que pueden ser utilizados para expandir la funcionalidad del sistema con el objetivo de satisfacer necesidades muy específicas por parte del cliente. A continuación se explican las posibles técnicas para realizar ampliaciones.

Tablas Existen dos maneras de ampliar tablas en SAP sin tener que modificar el objeto mismo: • Agregando estructuras: estas estructuras están asignadas a una sola tabla y aparecen disponibles en el objeto al ser activadas y durante el tiempo de activación del objeto ampliado. Pueden existir varias estructuras de este tipo en el objeto. Esta ampliación se consigue a través del botón ESTR.APPEND en la transacción SE11. Si fuera necesario eliminar la ampliación en la tabla, ha de eliminarse la estructura desde la SE11. •

Includes personalizables: permite utilizar las estructuras en múltiples tablas. Para que esto sea posible la instrucción INCLUDE ha de existir ya en la tabla o estructura, porque debieron haber sido previstas por los desarrolladores de SAP.

Es importante considerar que si una tabla finaliza con un campo del tipo LCHR o LRAW no es posible crear ampliaciones dado que estos campos han de ser los ultimos en la estructura de la tabla siempre. Otra consideracion improtante es que los campos que se agreguen deben iniciar siempre con ZZ o YY para evitar conflictos con futuros nombres que SAP pueda incluir en versiones posteriores.

Customer exit

El customer exit es un módulo de función que permite agregar funcionalidades propias al estándar de SAP sin modificar los objetos originales. Estas ampliaciones están definidas para programas, pantallas y menús específicos. Con la transacción SMOD se pueden visualizar los componentes creados por SAP, mientras que con la transacción CMOD se activan y administran los proyectos de ampliación.

Xioma Consulting - ABAP WORKSHOP

210

Transacción CMOD

Xioma Consulting - ABAP WORKSHOP

211

Una vez indicada la descripción del proyecto, con el botón de asignación de ampliación se incluyen los componentes del proyecto (los componentes se pueden revisar en la transacción SMOD).

Después de agregar las ampliaciones, se pueden seleccionar los componentes deseados: funciones, menús o pantallas.

Xioma Consulting - ABAP WORKSHOP

212

Los componentes se activan utilizando el botón . Para agregar el código se da doble click sobre el nombre de la función de la ampliación, y una vez ahí se da de nuevo doble click sobre el include que se puede editar por el usuario.

Customer Exit Un customer exit es una subrutina identificada por 3 caracteres numéricos y que le indica al sistema que ha de acceder una rutina en tiempo de ejecución. Donde se pueden ejecutar estas ampliaciones y que tipo de datos pueden manipular son definidas por los programadores de SAP.



Xioma Consulting - ABAP WORKSHOP

213

Las estructuras y variables que se pueden utilizar son las que se encuentran en las pestañas de import, export, modif. y tablas. El código de la ampliación ha de escribirse dentro del include propuesto. Para crear el include se da doble click sobre él. Dado que el include se encuentra dentro de un FORM … ENDFORM, no es posible crear subrutinas ni módulos. De ser necesario crearlos se deberán definir en el grupo de funciones al que pertenece la ampliación en la zona de usuarios, la cual se encuentra debidamente etiquetado en el programa de control. Ahí se podrán definir las subrutinas, módulos y eventos. Es posible llamar DYNPROs propios utilizando la instrucción CALL SCREEN y dando doble click sobre el número del DYNPRO para que el sistema la cree automáticamente. Para invocar este tipo de ampliaciones desde los programas estándar de SAP se utiliza un CALL CUSTOMER-FUNCTION ‘nnn’, donde ‘nnn’ es un número de 3 dígitos. Este llamado únicamente se ejecuta cuando el proyecto de ampliación se encuentra activado y puede ser invocado todas las veces que se requiera. Para localizar los user exits se puede buscar la ocurrencia CALL CUSTOMER de manera global en el programa principal, o en la transacción CMOD en el menú de Utilidades -> SAP Enhancements y buscar EXIT_*PROGRAMA*.

Al activar un proyecto de ampliación todos los programas afectados por las modificaciones serán regenerados al ser ejecutados por primera vez despues de cada cambio.

Xioma Consulting - ABAP WORKSHOP

214

Menu Exits Las ampliaciones de menú permiten agregar opciones en el menú estándar de SAP. Se pueden utilizar para llamar nuevos DYNPROs o ejecutar otras aplicaciones desde la transacción donde se han implementado. SAP creó las ampliaciones de menú definiendo un tipo especial de menú en el Menu Painter. Estos objetos tienen código especial que inicia con el símbolo “+”, y estos no aparecen visibles sino hasta que el proyecto de ampliación esté activado. El texto para el item en el menú y el icono se especifica cuando se activa el proyecto de ampliación, siempre que SAP lo haya previsto. Existen dos tipos: por customer exit y por BADI. Cuando existe en Menu Exit en una ampliación, al momento de utilizarle se solicita que se indique el texto que lo identificara en el menú, este texto es dependiente del idioma. Para la invocación del subscreen se utiliza la instrucción CALL CUSTOMERSUBSCREEN.

Screen Exit El screen exit es un tipo de customer exit para agregar campos a las pantallas en las aplicaciones de R/3. Son subscreens que existen en el estándar y que se invocan desde la lógica del proceso. También los BADIs pueden contener screen exits. Es importante tomar en cuenta que el OK CODE solo se puede procesar por medio de la pantalla principal, no se puede indicar un número de DYNPRO siguiente y tampoco definir un nuevo menú.

Xioma Consulting - ABAP WORKSHOP

215

Junto al screen exit siempre habrá un user exit que facilite el envío de información bidireccionalmente entre el programa estándar y el subscreen utilizando variables globales. Al igual que otras ampliaciones los screen exits son manipulados a través de proyectos en la transacción CMOD.

Field Exit Los field exit permiten crear una lógica de ampliaciones en el sistema SAP basada en los elementos de datos del diccionario. Se puede utilizar para realizar validaciones, conversiones o procesos relacionados con el negocio. Las funciones asociadas a los field exits son ejecutados en el PAI. Existen 2 tipos de Field exits: •



Globales: No están atadas a ningún dynpro en particular o programa. Por lo que si en la disposición existe el elemento de datos, la función del field exit será ejecutada. Locales: Son aquellos que están ligados a un programa y dynpro específico. No pueden existir mas de 36 field exists para un mismo elemento de datos. Si un field exit es creado como local, ya no puede ser definido global.

Para crear un field exit se puede utilizar el reporte RSMODPRF, o se puede invocar desde la línea de comando de SAP la transacción PRFB, mientras se esta dentro de la transacción CMOD. Las funciones de field exit poseen dos parámetros. De entrada el parámetro INPUT que contiene el valor del elemento de datos en el momento de la invocación y el

Xioma Consulting - ABAP WORKSHOP

216

parámetro OUTPUT que envía el valor al elemento de datos una vez finalizada la función. En los Field Exits no es posible utilizar las siguientes instrucciones: BREAK-POINT, CALL, SUBMIT, COMMIT WORK, ROLLBACK WORK, STOP, REJECT, MESSAGE I, MESSAGE W. Además el debugger ignora los field exits.

Es importa recordar que para activar los field exist se debe acceder la opción del menú FIELD EXIT -> ACTIVAR. De lo contrario el field exit no tendrá efecto alguno. Además debe estar activado el check en el sistema SAP que permite la utilización de los field exits.

User exits Los user exists son mejoras al sistema que originalmente fueron pensadas para el módulo de SD (Sales and Distribution). Los desarrolladores de SAP crearon includes especiales en algunos programas con rutinas que siguen la convención de nombre USEREXIT_. Estos llamados ya están en programas estándar y utilizan variables globales. Las rutinas se encuentras vacías para ser completadas con el código que requiera la ampliación. Un ejemplo es el programa SAPMV45A con el include MV45AFZB. Para localizar los user exits se puede utilizar como referencia el listado en el SAP Reference Implementation Guide. Otro método es buscar la palabra USEREXIT global en el programa principal.

Modificaciones Las modificaciones son cambios sobre los objetos estándar de SAP. Para SAP los objetos originales son aquellos que se encuentran en SAP y al pasarlos a otros sistemas son copias. Cuando un cliente crea sus propios objetos, estos son originales en el sistema en que se crearon y por ende pueden ser modificados tantas veces sea necesario, sin embargo esto no se puede hacer con los objetos de SAP estándar pues estos son copias. Al pasar los objetos creados por el cliente a otro sistema (por ejemplo productivo) estos objetos pasan a ser copias también. Si existiese un motivo realmente bueno para realizar modificaciones sobre un objeto de SAP, es necesario contar con un conocimiento profundo de los objetos que se van a modificar, dado que los cambios pueden crear inconsistencias en el sistema o resultar en problemas durante un proceso de upgrade o durante la aplicación de un support package. Para llevar a acabo cambios en los objetos es necesario utilizar el SSCR (SAP Software Change Registration), el cual es un sistema de registro de modificaciones que esta disponible en el portal de SAP. Este asigna una llave de modificación según el objeto que se desea cambiar. Con dicha llave se permite la modificación, y a su vez permite que el

Xioma Consulting - ABAP WORKSHOP

217

personal de servicio al cliente de SAP pueda localizar y reparar problemas en el sistema del cliente más rápidamente. Una vez que un objeto es modificado ya nunca más pedirá la llave del SSCR, incluso después de un upgrade. Factores de éxito al utilizar modificaciones: 1. Siempre que se realicen modificaciones se debe tratar de utilizar código encapsulado. 2. Utilizar la documentación en línea de SAP 3. No borrar el código estándar (si es necesario solo comentarlo) 4. Mantener un log de modificaciones, SAP recomienda tener en consideración los siguientes datos: Tipo de objeto, nombre del objeto, rutina (si aplica), módulo, número de reparación, fecha de cambio, cambiado por, corrección preliminar, Nota SAP (si aplica), válido para la versión x.y. 5. No modificar objetos básicos del diccionario 6. Liberar siempre todas las ordenes que contienen modificaciones

Xioma Consulting - ABAP WORKSHOP

218