Sunteți pe pagina 1din 114

1. MDULO DE PROGRAMACIN EN ABAP IV 1.1. Introduccin Arquitectura del R/3 SAP Qu es ABAP/4 ?

Propsito de ABAP/4 Conociendo el ambiente de R/3 Interfaz del usuario 1.2. Entorno de Desarrollo en ABAP/4 Creando un programa en ABAP/4 Trabajando con el editor de programas 1.3. Fundamentos de la Programacin de Reports Tipos de instrucciones Estructura de un programa Tipos de eventos 1.4. Declarando y Procesando Datos Tipos de datos Tipos de variables Variables de sistema Variables de programa Declaracin de constantes Declaracin de tipos Asignando valores Conversin de tipos Operaciones aritmticas en ABAP/4 Procesando campos de tipo texto 1.5. Control de Flujo en los Programas ABAP/4 Formulando condiciones Procesos de bucles Sentencias de control 1.6. Formateando un Listado Formato de los datos de salida Formato de pgina Seleccin de parmetros Pantalla de seleccin (SELECTION-SCREEN) Elementos de Texto y Mensajes 1.7. Tablas Internas Como declarar tablas internas Llenado de una tabla interna Ordenar una tabla interna Procesamiento de una tabla interna Tratamiento de niveles de ruptura Lectura de entradas de una tabla Modificando tablas internas 1.8. Diccionario de Datos. SQL DICCIONARIO DE DATOS: tipos locales y globales Elementos de Datos Dominio Introduccin SQL. Modelo relacional.

Consultas. SELECT INSERT UPDATE MODIFY DELETE Diccionario de datos Los datos en el sistema SAP Otros aspectos de la programacin de BDD 1.9. Bases de Datos Lgicas Qu es una Base de Datos Lgica? Utilizacin de las Bases de Datos Lgicas 1.10. Subrutinas y Mdulos de funcin. RFC's. Trabajar con RFC Construir RFC Trabajar con BAPI's Construir BAPI's User-Exit's 1.11. Programacin orientada a objetos. QU ES LA ORIENTACIN A OBJETOS? PASO DE LAS FUNCIONES A LOS OBJETOS CLASES globales CLASES locales Metodos: interface Herencia e Interface Eventos y Excepciones UNIDAD REUTILIZABLE UTILIZACIN DE OBJETOAS BADI's 1.12. BATCH INPUT's. 1.13. FORMULARIOS. 1.14. Programacin de Dilogo Introduccin Pasos en la creacin de transacciones 1.15. Diseo de Mens Introduccin La barra de mens Los Pushbuttons Teclas de funcin Otras utilidades del men printer Activacin de funciones Ttulos de men Pruebas, chequeo y generacin de status 1.16. Diseo de Pantallas Introduccin al diseo de pantallas Diseo de pantallas Utilizando el Screen Painter Creando objetos en pantalla Creando objetos desde el diccionario de datos

Definiendo los atributos individuales de campo Lgica de proceso de una pantalla Introduccin a la lgica de proceso PROCESS BEFORE OUTPUT (PBO) PROCESS AFTER INPUT (PAI) El flujo de la transaccin Actualizando la base de datos en una transaccin El bloqueo de datos en SAP 1.17. ALV's. Introduccin. Programacin con ALV. Navegacin en ALV. Variantes de display. Mtodos de cl_gui_alv_grid. 1.18. Webdynpro. Crear componente WebDynpro. Creacin de View y asignacin a Window. Context_Node_Atributte. Crear aplicacin WebDynpro. Activar-Ejecutar. Crear un Web Dynpro con ALV. Acciones, Eventos, Mtodos. Navegacin. 1.19. BSPs. Introduccin BSP. Estructura de aplicacin BSP. Usos. CLASE DE aplicacin HTLMB Componentes. Creacin de aplicacin BSP. 1.20. ANEXO Debugging Modelo de daTos Modularizacin Tecnicas de modularizacin Estructura con tipos globales Field-Symbol Tratamiento de ficheros Transaccin Field-Groups

MODULO DE PROGRAMACIN EN ABAP IV 1.1 INTRODUCCION La arquitectura SAP

Lo primero que debemos saber es que SAP est basado en un tipo de sistema al que se conoce como arquitectura Cliente / Servidor. En trminos generales en una arquitectura Cliente/Servidor existe una computadora llamada Server en la cual se centraliza la ejecucin de los programas y existe una o varias computadoras ejecutando un programa llamado Cliente que recibir los resultados de esa ejecucin y nos lo presentara. En nuestra implementacin de SAP por lo general nuestra computadora portable personal o nuestra computadora de escritorio en nuestro trabajo ser el cliente. Lo segundo que debemos saber es que existe un repositorio central de informacin, la denominada comnmente Base de Datos, en el cual est concentrada toda la informacin necesaria para el funcionamiento de la empresa y que es el lugar donde SAP deposita o almacena toda la informacin que maneja. Un esquema general de SAP es el siguiente:

Sistema operativos compatibles con el sistema R/3 UNIX Open VMS MPE/iX Windows NT Bases de datos compatibles con el sistema R/3 Informix Oracle Software AG Sybase Compatibilidad entre la presentaciones del tipo front-end SAP-GUI (Interfaz grfica de usuario) es capaz de mostrar los resultados en forma de lista o grfico en la mayora de los sistemas de presentacin front-end, incluidos los siguientes: Windows, OS/2PM, Macintosh Que es en concreto SAP R/3 y para qu sirve? Todas las compaas del mundo tienen al menos una seccin en la empresa encargada de la contabilidad, es decir un conjunto de personas, maquinas, archivadores, computadoras y dems dedicadas a llevar las finanzas de la empresa, realizando tareas como pago de sueldos, pago a los proveedores, cobro de deudas, manejo de los libros diarios contables o manejo del libro mayor. Si la empresa produce algn bien o mercadera que deba almacenarse como relojes, latas de comida o telfonos celulares por ejemplo ha de tener entonces tambin personas y recursos fsicos dedicados a llevar el inventario de las cosas producidas, a llevar el control de como estas mercaderas y materiales son almacenadas o retiradas de sus bodegas o en donde son almacenadas.

Si dicha empresa es relativamente grande entonces tendr asimismo como parte de su patrimonio propiedades tales como edificios, oficinas, muebles, mesas, computadoras, archivadores, escritorios y vehculos, es decir tendr lo que se llama comnmente activos fijos que debern ser gestionados, saber dnde y en qu estado estn, para que se estn usando y por quien. Tambin si la empresa est bien organizada deber tener un control sobre sus recursos humanos, relaciones pblicas, comunicacin y atencin de su personal, control de vacaciones, licencias por enfermedades, etc. La empresa tambin tendr que tener un control sobre sus canales de distribucin de servicios y mercaderas, es decir tendr que tener alguna manera de llevar adelante la venta y distribucin de su produccin. Por lo general (aunque no siempre) las empresas tienen variados programas de computadora, separados y diferentes entre s, que hacen estas y muchas ms tareas. A veces algunos de esos programas son creados por los programadores de la misma empresa, es decir son creados por empleados directos de la empresa, por lo general dependientes de la gerencia de sistemas o de la gerencia de finanzas lo que significa que ms de una unidad dentro una misma empresa puede crear programas. Tambin se da el caso de que la empresa (adems de escribir sus propios programas) compre algunos programas hechos por otras empresas o por terceras personas para realizar alguna de estas tareas. Adems, tambin se da el caso de que la empresa usa programas genricos como Microsoft Excel por ejemplo para llevar adelante algunas tareas de procesamiento de datos que no son cubiertos ni por los programas propios ni por los programas comprados a terceros. En resumidas cuentas: en las empresas puede llegar a generarse un verdadero caos de distintos sistemas, programas y aplicaciones funcionando en paralelo, lo que en determinadas circunstancias puede llegar a representar un serio problema, puede llegar a darse el caso de que sea imposible procesar debidamente la informacin necesaria para permitir a la empresa alcanzar sus logros o simplemente funcionar con normalidad. Por esta razn es que fue creado SAP y este es justamente el problema que SAP resuelve. SAP es un sistema gigante conocido bajo la clasificacin E.R.P. ( Enterprise Resource Planing planificacin de recursos empresariales ) que hace todas estas tareas y muchsimas ms teniendo toda la informacin almacenada en una NICA base de datos centralizada por lo que no existen problemas de repeticin de datos o inconsistencia entre los mismos. Es por decirlo en palabras simples, un sper sistema gigante de gestin empresarial que cubre todas las necesidades de procesamiento de datos de una empresa, corporacin, fabrica u oficina pblica o privada. Es decir es un sistema de gestin de informacin que lo abarca todo dentro del negocio. A estos sistemas, capaces de realizar todas estas tareas simultneamente tambin se los conoce como sistemas Back Officce. Otra de las formas en las que SAP suele ser llamado es Sistema Operativo de la empresa.

MODELO DE ERP

Que son los mdulos de SAP? SAP est dividido en mdulos, es decir est dividido en diferentes partes que se encargan de los distintos aspectos de la gestin de informacin de una empresa. Tiene una seccin dedicada a la contabilidad ( Modulo de Finanzas), otra seccin dedicada al manejo de mercaderas ( Modulo de materiales ) otra dedicada a la venta y distribucin (Modulo SD), otra dedicada a los activos fijos ( Modulo AA ), otra dedicada a los recursos humanos ( Modulo HR ) y as cubriendo no menos de 20 mdulos hoy en da. Toda la informacin de SAP esta almacenada en una nica base de datos centralizada y todos los mdulos tienen acceso a esta informacin por lo cual el sistema se define como Consistente.

Como se ve en el esquema arriba mostrado, todos los mdulos de SAP giran alrededor de una base de datos comn por lo que comparten toda la informacin relevante de la empresa. La integracin en SAP se logra a travs de la puesta en comn de la informacin de cada uno de los mdulos y por la alimentacin de una base de datos comn. El sistema SAP est compuesto de una serie de mdulos funcionales que responden de forma completa a los procesos operativos de las compaas. Por si os sirve de utilidad os adjunto un listado resumen en tablas de los mdulos de SAP R/3 y de sus correspondientes subdivisiones son: FI CONTABILIDAD FINANCIERA MM GESTION DE MATERIALES Planificacin Necesidades Materiales

FI-GL Cuentas de Mayor FI-LC Consolidacin Sociedades FI-AR Cuentas a Cobrar FI-AP Cuentas a Pagar FI-AA Gestin de Activos FI-SL Special Ledger Cierres IM TR INVERSIONES Gestin de Inversiones TESORERIA Programa Conciliacin Provisiones Posicionamientos

MM MRP MMGestin de Compras PUR MM-IM Gestin de Inventarios MM-WM Gestin de Almacenes MM-IV Verificacin de Facturas MM-IS Sistema de Informacin Intercambio Electrnico de MM-EDI Datos Sistema Clasificacin Gestin de Lotes QM QM-PT QM-IM QM-QC CALIDAD Herramientas de planificacin Proceso de Inspeccin Control de Calidad

Control de Fondos CO CONTROLLING COContabilidad por Centros Coste CCA Contabilidad Presupuestaria COControl de Costes del Producto PC COAnalisis de Rentabilidad PA COOrdenes Internas OPA COCostes Basados en Actividades ABC LO LOMD LOVC LOPR LOECH SM GESTION DATOS GENERALES DE LOGISTICA Datos Bsicos Gestin Variantes de Productos Modelos Previsin y Comportamientos Cambios Ingenieria Objetos SAP GESTION DEL MANTENIMIENTO

QM-CA Certificados de Calidad QM-QN Notificaciones de Calidad PP PP-BD PRODUCCION Datos Basicos

PP-SOP Gestin de la Demanda PP-MP Plan Maestro

PP-CRP Plan de Capacidades PP-MRP Plan de Materiales PP-SFC Ordenes de Fabricacin PP-PC PP-IS PP-PI Costes de producto Sistema de Informacin Industria de procesos

PP-CFG Configuracin de Producto

EC

ENTERPRISE CONTROLLING

ECContabilidad Centros Beneficio PCA EC-BPPlanificacin del Negocio ECMC ECEIS SD SD MD SDSLS SDGF Consolidacin a Nivel Directivo Executive Information System

HR HR-PAEMP HR-PAPAY HR-PATRV HR-PDOM HR-PDPD HR-PDSCM HR-PAAPP HR-PATIM IS-R IS-R IS-R

GESTION DEL PERSONAL Datos Maestros de Personal Nmina Gastos de Viaje Organizacin y Planificacin Desarrollo de Personal Gestin de la Formacin Seleccin de Personal Gestin de Tiempos INDUSTRY SOLUTION RETAIL Planificacin de Surtidos Reaprovisionamiento

VENTAS Y DISTRIBUCION Datos maestros Gestin de Ventas GestinTarifas y Condiciones de Precio

SDSHP SDBIL SD-IS SDEDI

Gestin de Expediciones Facturacin Sistemas de Informacin Intercambio Electrnico de Datos

IS-R IS-R CP MM SD RIS PM

Formatos de presentacin Sales Retail Inventario de proveedores Compras Retail Transporte Sistema de Informacin Retail GESTION DEL MANTENIMIENTO

PS GESTION DE PROYECTOS PS-BDDatos Basicos PS-OS Planificacin del proyecto PSPLN PSAPM PSEXE PS-IS Plan de Costes Proceso de Aprobacin Seguimiento y Progreso del Proyecto Sistema de Informacin

PM-EQMIdentificacin Descripcin PM-PRM Mantenimiento Preventivo PMOrdenes de Mantenimiento WOC PM-PRO Proyectos de Mantenimiento PM-SM Gestin del Servicio

Que es una implementacin de SAP? Al proceso de instalar en la empresa al sistema SAP, al proceso de recabar informacin sobre la empresa y al proceso de preparar a las personas que trabajan en la empresa para utilizar SAP se le denomina Implantacin o implementacin del sistema. Habitualmente esta tarea es llevada adelanta por otra empresa conocida como la consultora y los profesionales que llevan adelante esta tarea son conocidos como los consultores SAP o consultores de modulo de SAP, tambin se les llama analistas funcionales o simplemente funcionales. La empresa donde se va a implementar SAP es conocida por parte de los consultores (funcionales) de la consultora como El Cliente. En el proceso de implantacin el cliente aporta el personal que conoce el da a da de los procesos de la empresa, a estas personas seleccionadas para participar en el proyecto se los conoce bajo el nombre genrico de usuarios claves, es decir, son empleados de la empresa que conocen todos los detalles del funcionamiento de la misma, como se hacen las cosas, que documentos deben completarse, cuales son las reglas internas, cuales son los procesos, cual es el organigrama general, etc, etc. Los funcionales de la consultora pasan largas horas, a veces durante semanas, entrevistndose con los usuarios claves y generando documentos que describen el estado actual de las cosas, como pueden mejorarse en caso de ser necesario, entendiendo los procesos de la empresa y generando documentos que describen como sern las operaciones de la empresa una vez implantado SAP, tambin entrenan al usuario en el uso del sistema SAP. Es comn que una vez que se implante SAP todos los dems sistemas que se usaban hasta el momento dejen de existir o de usarse ya que SAP cubre todas las necesidades en el 90 % de las empresas donde se instala. Los procesos de implantacin regularmente cubren la totalidad de las actividades de procesamiento de datos de la empresa.

SAP tambin tiene un lenguaje de programacin propio (llamada ABAP) que permite ampliar la capacidad del sistema original para cubrir reas de trabajo o necesidades sumamente especificas. SAP adems viene con su cdigo fuente original disponible para la empresa por lo que siempre se sabe lo que est pasando adentro de SAP aunque no se desarrolle nada nuevo por lo cual el cliente que compra SAP nunca queda esclavo de la compaa. SAP tiene unas 25,000 implementaciones de empresas grandes en todo el mundo y es el lder de los sistemas ERP. Breve desarrollo histrico El nombre SAP es al mismo tiempo el nombre de la compaa que produce el sistema SAP y el nombre del sistema en s mismo. La corporacin SAP fue fundada en 1972 en Alemania por cinco programadores escindidos de IBM y ha crecido hasta convertirse en una de las mayores empresas productoras de software del mundo con oficinas en todos los continentes y sub regiones del planeta. SAP es el acrnimo de: Systems Aplications and Products in data processing, es decir, la traduccin ms aceptada es: Sistemas, Aplicaciones y Productos en el procesamiento de datos Que significa R1, R2 y R3? Como se dijo anteriormente SAP fue fundada en 1972 por cinco ex empleados de IBM cuyos apellidos son: Hctor, Plattner, Wellenreuther, Hopp y Tschira. Mientras trabajaban para IBM desarrollaron un paquete de contabilidad extremadamente bueno y completo para uno de los clientes de IBM que funcionaba en tiempo real y tenia caractersticas que eran nicas para la poca. SAP compr los derechos de este paquete a la empresa Naturin (el cliente para el cual haba sido desarrollado el paquete) y amplio el diseo original. Asimismo se desarrollo un paquete de manejo de materiales que se convirti en el segundo modulo estndar del sistema, por lo cual SAP quedo compuesto en este entonces por el modulo de finanzas (FI) y el modulo de materiales (MM). A este sistema se le llamo originalmente R y luego se rebautizo como R/1 ya que ms adelante se agregaron mas mdulos al sistema para conformar lo que se conoci como el sistema R/2. Posteriormente al agregar aun ms mdulos y capacidades aun se conformo lo que se conoce como sistema R/3 hoy en da el cual fue originalmente presentado en 1992. Desde entonces SAP no ha dejado de ganar mercados y clientes y de crecer ininterrumpidamente a la vez que va adaptando a R/3 a las cambiantes necesidades del mercando siendo hoy en da SAP Netweaver, SAP CRM y SAP Portales los ltimos componentes agregados que ms crecimiento le han brindando al que ha sido en ser llamado el Sistema Operativo de las empresas. Que es el Front End tambin conocido como SAP Gui? De la misma manera que un navegador como el Internet Explorer permite descargar y ver pginas WEB en nuestra computadora el Front End de SAP es el programa que

servir como cliente para poder ver y utilizar las pantallas y programas del sistema SAP que se estn ejecutando en el servidor central de SAP. Cada computadora que vaya a ser utilizada como Cliente deber tener instalado por lo tanto el Front End de SAP. Que son los mandantes, tambin conocidos en ingles como Clients? Lo primero es no confundirlos con el concepto Cliente / Servidor. Los mandantes (o clients en ingles) no son servidores, son lo que se denominan en trminos tcnicos Instancias. Para entender por qu existe este concepto debemos entender primero como es que se trabaja en una implementacin de SAP. Digamos para empezar que una de las caractersticas ms buscadas en el mundo es la capacidad de realizar cosas, probarlas en un ambiente donde no exista riesgo y a continuacin poder utilizarlas en la vida real. Por ejemplo, si quisiramos saber cmo va a funcionar un nuevo programa que vamos adquirido para nuestra empresa sera fantstico si pudisemos ejecutar una completa simulacin de cmo va a comportarse en la vida real bajo parmetros de la vida real y con datos de la vida real y ver como interacta con el resto de la organizacin como si estuviese en la realidad y sin correr ningn riesgo. Pues bien, para poder llevar adelante esta forma de trabajo SAP est dividido en tres instancias principales: DESARROLLO TEST & TRAINING (BASI?) PRODUCTIVO Cada una de estas instancias contiene al inicio de la implementacin del proyecto las mismas caractersticas, pero todo proyecto de SAP comienza su vida con infinidad de pruebas que se realizan en el mandante de Desarrollo. Cuando se realiza cualquier desarrollo en SAP, este desarrollo no pasa directamente a ser utilizado en la empresa. El desarrollo se hace en un contexto en el cual no existe el riesgo de poner en peligro las aplicaciones que actualmente estn trabajando correctamente. A este ambiente se le denomina ambiente de desarrollo y en el pueden cometerse todos los errores que se quiera, no habr consecuencia alguna para el sistema pues lo que se haga solo se utilizara en la vida real una vez que haya pasado por un gran nmero de pruebas en el denominado mandante de Test. Solo una vez que los directores de sistemas y de proyectos estn seguros que aquello que se ha desarrollado funciona bien y es seguro para la organizacin ser que este objeto lgico recin desarrollado pasara a existir en el mndate de produccin. De hecho, pueden existir multitud de ambientes o mandantes de cada uno de los tres tipos mencionados arriba, tantos como la organizacin necesite, pero por regla general cada organizacin solo tiene un mndate de produccin. A la accin de mover un objeto lgico desde Desarrollo hacia Test y luego de Test hacia produccin se le denomina Transporte. El concepto de Orden de Transporte Cada objeto, programa, configuracin o accin que se crea en SAP est asociada indisolublemente a un nmero de serie nico que le pertenece y la identifica unvocamente.

A este nmero se le denomina Orden de Transporte. La mejor manera de figurrselo es imaginar a la orden de transporte como si se tratara de una caja. Cada vez que por ejemplo se escribe un programa en SAP en el mandante de desarrollo este ser depositado en el interior de una caja virtual la cual estar identificada por su correspondiente nmero de serie. Cuando el programador haya terminado de escribir el programa ser necesario probarlo por lo cual ser necesario depositarlo en el mandante de Test, es decir, ser necesario transportarlo o moverlo al mandante donde se hacen las pruebas. Para ello se ejecutara una accin especial del sistema llamada justamente Transporte que usando este nmero de identificacin nico mover al programa desde el ambiente de desarrollo al ambiente de Test. Esta operacin requiere de la autorizacin de la persona encargada de vigilar la calidad de los desarrollos en la empresa, un rol que habitualmente est representando como QA (Quality Assurance). Si todo funciona correctamente y las pruebas son exitosas entonces ser necesario mover el programa desde el ambiente de test al ambiente de produccin para que el personal de la empresa pueda utilizarlo, por lo tanto se har un nuevo transporte desde Test a produccin. Este ciclo de trabajo es el que siempre se utiliza en SAP y es el que garantiza que ningn programa con defectos pueda llegar a produccin. Que es la Parametrizacion tambin conocida como Configuracin? El concepto bsico involucrado aqu es ADAPTACION, una de las caractersticas ms sobresalientes de SAP es que se trata de un sistema que puede ser adaptado a cualquier empresa y a cualquier entorno de trabajo. Como se logra esto? Para empezar debemos saber que el sistema no se comporta siempre igual ni de la misma manera en todos los lugares donde es instalado, tiene la habilidad de permitir ser configurado o parametrizado para comportarse de diferentes maneras frente a una misma situacin segn sean las necesidades especificas de la empresa. Consideremos este simplsimo ejemplo: la forma de tratar y manejar contablemente los impuestos varan de un pas a otro, por ejemplo el IVA (Impuesto al Valor Agregado) tiene al momento de escribir este tutorial un valor de 18% en Espaa, pero tiene un valor diferente, 23% en el pas vecino Portugal y a su vez tiene diferentes valores en otros pases. Una configuracin bsica es establecer cul es el valor del IVA, pero adems el monto de lo recaudado por IVA debe ser depositado en diferentes cuentas de la empresa y debe ser tratado en diferentes maneras segn sea el pas en el cual se est haciendo al implantacin de SAP, adems existen empresas que tienen diferentes oficinas en varios pases por lo que deben llevar la contabilidad de la empresa segn las leyes de cada pas y a su vez tener una visin global de cul es el comportamiento econmico de compaa a nivel global. Parametrizacion es entonces la capacidad del sistema SAP de ser adaptado a las diferentes necesidades de la empresa, incluso a necesidades cambiantes dentro de una misma empresa en un mismo pas o mercado a lo largo del tiempo.

INTERFAZ DEL USUARIO Inicio del Sistema SAP Conexin por primera vez Condiciones previas Antes de que conecte por primera vez, el responsable del sistema le dar una clave de acceso inicial. Durante el proceso de entrada al sistema, debera crear una nueva clave de acceso, una que slo usted sabr cul es. Posteriormente, utilice su propia clave de acceso para entrar al sistema. (Estos procedimientos pueden diferir algo en su empresa; para ms informacin, pngase en contacto con el responsable del sistema.) Para conectarse, debe abrir primero el men de Logon SAP haciendo doble clic en su icono. Para ms informacin, vase Logon SAP. El icono de Logon SAP aparece ahora en la barra de tareas (junto con el nmero de Release SAP) y en la bandeja de sistema (es decir, en la esquina inferior derecha de su desktop). Despus de iniciar el Sistema SAP (vase Inicio del Sistema SAP), la primera pantalla que se ve es la de acceso (en este caso, con el ttulo SAP R/3).

Al pulsar el tabulador despus de introducir datos en un campo, el cursor se mueve al comienzo del campo siguiente. Sin embargo, si introduce el nmero mximo de caracteres posibles en un campo, no es preciso que pulse el tabulador. Por ejemplo, el nmero mximo de caracteres que puede introducir en el campo Mandante es tres. Si introduce 001 en el campo Mandante, el cursor se mueve automticamente al comienzo del campo siguiente. Para ms informacin sobre la introduccin de datos, vase Introduccin de datos en campos. Procedimiento La pantalla de acceso se muestra anteriormente. Para conectarse al Sistema SAP: ... 1. Introduzca el nmero de mandante en el campo Mandante. Si aparece un nmero de mandante por defecto en el campo, puede aceptarlo o modificarlo escribiendo otro sobre l. Para desplazar el cursor al campo ID de usuario, pulse el tabulador. 2. En el campo ID de usuario, introduzca su ID de usuario. Para desplazar el cursor al campo Clave de acceso, pulse el tabulador. 3. En el campo Clave de acceso, introduzca la clave de acceso inicial proporcionada por el responsable del sistema. Al teclear la clave de acceso inicial, los asteriscos permanecen en el campo y nicamente el cursor se mueve. Como medida de seguridad, el sistema no muestra lo que teclea. En el Sistema SAP, en las claves de acceso no se distingue entre maysculas y minsculas.

4. Para visualizar las pantallas, los mens y los campos en otro idioma, desplace el cursor al campo Idioma pulsando el tabulador. Introduzca la clave del idioma deseado. 5. Seleccione Intro. 6. El sistema muestra automticamente la ventana de dilogo de clave de acceso nueva. Debe modificar su clave de acceso inicial.

Si no se ve la ventana de dilogo de clave de acceso nueva, compruebe el mensaje de sistema mostrado en la barra de status. Puede haber introducido un nmero de mandante, una clave de acceso, un ID de usuario o una clave de idioma errnea. Si este es el caso, repita los pasos 1 a 5. 7. En el campo Nueva clave de acceso, introduzca una clave de acceso nueva. (Si necesita ayuda, vase Claves de acceso.) Memorice su clave de acceso. No puede entrar al Sistema SAP sin ella. Al teclear la nueva clave de acceso, los asteriscos permanecen en el campo y nicamente el cursor se mueve. Como medida de seguridad, el sistema no muestra lo que teclea. Para desplazar el cursor al campo Repetir clave de acceso, pulse el tabulador. 8. En el campo Repetir clave de acceso, vuelva a introducir la nueva clave de acceso, exactamente como la introdujo la primera vez. 9. Seleccione Confirmar (o Intro). Si ha modificado con xito su clave de acceso, aparece la ventana de dilogo Copyright. 10. En la ventana de dilogo Copyright, seleccione Continuar (o Intro). Si hay mensajes de sistema, aparece la ventana de dilogo Mensaje de sistema. Despus de que haya ledo los mensajes, seleccione Continuar (o Intro) para cerrar la ventana de dilogo. Puede visualizar los mensajes de sistema ms tarde seleccionando Herramientas Gestin Gestin Mensajes de sistema. Resultado En el Sistema SAP estndar, aparece la pantalla inicial SAP Easy Access, como se muestra a continuacin.

La ventana SAP La ventana SAP es la interfase de usuario al Sistema SAP. Funcionalidad

A continuacin se muestran los elementos de una ventana SAP normal: La barra de herramientas contiene pulsadores para realizar acciones comunes tales como Grabar e Intro.

A continuacin se enumeran las funciones asignadas a la barra de herramientas:

Segn sus acciones mientras trabaja con el Sistema SAP, se puede ver tambin: Botones de seleccin y casillas de seleccin. Para ms informacin, vase Botones y casillas de seleccin. Ventanas de dilogo. Para ms informacin, vase Ventanas de dilogo. La barra de mens Los mens permiten que busque una transaccin especfica cuando no sabe el cdigo de transaccin. Se organiza el men segn la tarea que est haciendo en el Sistema SAP. Los mens son desplegables, es decir, cuando selecciona una opcin de men, aparecen las otras opciones. A continuacin se muestra una barra de mens tpica en el Sistema SAP:

Funcionalidad Los mens siguientes son estndar en cada pantalla SAP:

Los mens siguientes son estndar en la mayor parte de aplicaciones SAP:

Los mens siguientes pueden aparecer tambin:

A veces no todos los mens disponibles caben en una lnea en la barra de mens. En este caso, se enrollan a la lnea siguiente. El principio desplegable permanece inalterado. La barra de status La barra de status proporciona informacin general sobre el Sistema SAP y la transaccin o la tarea en la que est trabajando. A la izquierda de la barra de status, se visualizan los mensajes de sistema. El final derecho de la barra de status contiene tres campos: uno con informacin de servidor y los otros dos con informacin de status. Funcionalidad Los campos de status, mostrados a continuacin, se describen de izquierda a derecha:

En el extremo izquierdo, identifica mensajes de error.

identifica otros mensajes de sistema. 1. Para suprimir (o visualizar) los campos de status, seleccione derecha, respectivamente). 2. Para visualizar la informacin de sistema siguiente, seleccione a su izquierda (o

en el primer

campo de status: Sistema Cliente Usuario Programa Actividad Tiempo de respuesta 3. El segundo campo de status muestra el servidor al que est conectado. 4. El tercer campo de status especifica su modo de entrada de datos. Haciendo clic en este campo, puede conmutar entre los modos Insertar (INS) y Sobreescribir (OVR). Para ms informacin, vase Modos de insercin y de sobrescritura. Seleccin de tarea con cdigos de transaccin Despus de que haya entrado al Sistema SAP, seleccione la tarea en que quiere trabajar. Puede pasar a tareas diferentes en cualquier momento. Cada funcin del Sistema SAP tiene un cdigo de transaccin asociado con l. Un cdigo de transaccin consta de letras, nmeros o ambos, por ejemplo, FB05 o SUSR. Introduzca cdigos de transaccin en el campo de comandos. Introduciendo un cdigo de transaccin en vez de utilizar el men de puesto de trabajo, puede pasar a una tarea e iniciar la funcin en un solo paso. Aunque la utilizacin de cdigos de transaccin requiera eficientemente alguna memorizacin de cdigos, es una forma ms rpida tambin de desplazarse por el Sistema SAP. Por ejemplo, al introducir el cdigo de transaccin FD01, el sistema le lleva directamente a la pantalla de creacin de un registro maestro de deudor en Deudores. Puede utilizar un cdigo de transaccin para pasar a cualquier tarea en cualquier aplicacin SAP. Por ejemplo, si est trabajando en la aplicacin Deudores, puede pasar a una tarea de la aplicacin Acreedores. Condiciones previas Antes de que pueda utilizar un cdigo de transaccin, tiene que buscar el adecuado para la tarea que quiere iniciar. Bsqueda del cdigo de transaccin para la tarea que quiere comenzar Antes de que pueda utilizar un cdigo de transaccin, debe buscar el cdigo de transaccin para la tarea que quiere iniciar. Procedimiento Para buscar un cdigo de transaccin para una tarea determinada, coloque el cursor en la funcin apropiada (o sea, la opcin de men) en el men de puesto de trabajo SAP Easy Access y realice alguna de las operaciones siguientes: Seleccione Detalles Detalles tcnicos.

Aparece una ventana de dilogo que muestra los detalles relativos a la opcin de men seleccionada. O, seleccione Detalles Opciones Visualizar nombre tcnico. El men se cierra. Cuando lo vuelva a abrir, el sistema muestra el cdigo de transaccin (no nicamente para la posicin seleccionada, sino para todo el men de puesto de trabajo) Resultado

Puede iniciar la tarea ahora haciendo doble clic en ella o seleccionando Intro. Puede utilizar tambin el cdigo de transaccin para empezar esta tarea desde cualquier pantalla del Sistema SAP. Cuando utiliza un cdigo de transaccin para iniciar una tarea, el Sistema SAP termina su tarea actual y, a continuacin, muestra la pantalla inicial de la nueva tarea.

Bsqueda del cdigo de transaccin para la tarea actual Procedimiento Para buscar el cdigo de transaccin para la tarea actual:

Seleccione la flecha situada en el extremo derecho del primer campo de status, como en este ejemplo:

Aparece el cdigo de transaccin, junto con otra informacin de sistema:

O, de la barra de mens, seleccione Sistema Status. Aparece la ventana de dilogo Status de sistema. Puede buscar el cdigo de transaccin para la tarea actual en el marco Datos de repository del rea de pantalla Datos SAP, como en este ejemplo:

Para buscar el cdigo de transaccin para una tarea diferente, puede: Abrir la tarea y seleccionar Sistema Status. O, activar las opciones apropiadas en el men de puesto de trabajo SAP Easy Access Introduccin de un cdigo de transaccin Procedimiento Para introducir un cdigo de transaccin e iniciar una tarea: ... 1. Ponga el cursor en el campo de comandos.

A partir del release 4.6, el campo de comandos est cerrado por defecto. Para visualizarlo, seleccione la flecha a la izquierda del icono Grabar: . Aparece el campo de comandos: Para suprimirlo, seleccione la flecha a la derecha (exterior) del campo. Para visualizar una lista de las transacciones que utiliz por ltimo lugar, seleccione la flechita hacia abajo en el final a la derecha del campo de comandos. 2. Introduzca /n (para terminar la tarea actual) seguido por un cdigo de transaccin. Por ejemplo, para el cdigo de transaccin MB01, introducira /nmb01, como se muestra aqu. 3. Seleccione Intro. Finaliza la tarea actual y aparece la pantalla inicial de la nueva tarea. Si no quiere terminar la tarea actual, pero necesita hacer otra tarea, puede crear un nuevo modo. Por ejemplo, suponga que crea un pedido y necesita consultar una tabla con tipos de cambio. Puede abrir un modo para consultar la tabla de tipos de cambio sin tener que terminar la primera tarea de creacin de un pedido. Vase Creacin de un nuevo modo y de una nueva tarea a la vez. Seleccin de un cdigo de transaccin de la lista de historial Puede mostrar una lista de los cdigos de transaccin tratados desde que entr al sistema (llamado lista de historial), y, a continuacin, seleccionar un cdigo de transaccin de esa lista. Procedimiento 1. En la barra de herramientas, abra el campo de comandos. A partir del release 4.6, el campo de comandos est cerrado por defecto. Para visualizarlo, seleccione la flecha a la izquierda del icono Grabar: . Aparece el campo de comandos: Para suprimirlo, seleccione la flecha a la derecha (exterior) del campo. 2. Seleccione la flechita hacia abajo en el final a la derecha del campo de comandos. Aparece la lista de historial, mostrando los cdigos de transaccin para todas las transacciones a las cuales ha accedido en todos los modos desde que entr al sistema. A continuacin se muestra una lista de historial de ejemplo. 3. Seleccione el cdigo de transaccin deseado. 4. Seleccione Intro. Esto le lleva a la pantalla inicial de la tarea asociada con ese cdigo de transaccin. Con referencia a ABAP/4, las principales transacciones utilizadas, son: SE38 Abre el editor ABAP/4 SE37 Abre el modulo de funciones SE51 Screen Painter SE80 Abre Object Navigator SE24 Generador de Clases SE16 permite la visualizacin del contenido de tablas del SAP

SE11 permite la visualizacin de la arquitectura de una tabla/estructura del SAP (Dictionary ABAP)(Para crear nuevotipo, tabla vistas) SE43 creacin de mens SE93 creacin de transacciones customizadas SI71 creacin y mantenimiento de formularios SAP CMOD creacin de proyectos Exits (Field Exits, User Exits, ...) 1.2. ENTORNO DE DESARROLLO EN ABAP/4 El sistema SAP est enteramente desarrollado en un lenguaje de programacin propietario llamado ABAP 4. Los cdigos fuentes del sistema (es decir las instrucciones de computadora que le dicen a SAP que hacer) estn disponibles en la empresa que compra las licencias de SAP por lo cual este tipo de sistema evita un problema muy comn con el software desarrollado por terceros que es el denominado sndrome de la caja negra, es decir las empresas quedaban prisioneras de un solo proveedor de software ya que este nunca le provea informacin interna sobre el sistema que haban comprado o sobre cmo estaba configurada la base de datos del mismo. Para crear un programa ABAP debemos seguir unos pasos que detallamos a continuacin. El paso previo a trabajar con programas es mantener los atributos de ste. Veamos esto mejor con un ejemplo: Ir al men Herramientas --> Banco de trabajo ABAP --> Desarrollo --> Editor ABAP/4 o bien usar la transaccin se38 para acceder al editor de programas ABAP. Introducir nombre del programa y pulsar Crear. Introducir el ttulo del programa en la ventana que aparece. Indicar Tipo de programa (obligatorio). Generalmente un 1 (Report). Status del programa (opcional). Aplicacin sobre la que hacemos referencia en el programa. Con un * especificamos que puede hacer referencia a cualquier aplicacin. Clase del programa (opcional). Grupo de Autorizaciones con las que se puede ejecutar o editar y modificar un programa (opcional). Base de datos lgica (opcional). Aplicacin de la base de datos lgica (opcional). Imagen de seleccin (opcional). Inicio va variante (opcional). Pulsar GRABAR. Despus de introducir los atributos del programa, SAP solicita la clase de desarrollo, que es una manera de agrupar los programas funcionalmente para facilitar los mtodos decorreccin y transporte. Si an no se conoce la clase de desarrollo a la que se debeasignar el programa, consideraremos provisionalmente el programa como un objeto local-privado. Podemos ejecutar distintas funciones desde la lnea de comandos (F1 para ms informacin), o desde los distintos mens. Tambin existen mltiples comandos de lnea. Con F1 sobre una instruccin obtendremos informacin online acerca de sta.

Podemos grabar o recuperar programas de un dispositivo local Disco duro o disquetera (en men utilidades) 1.3 FUNDAMENTOS DE LA PROGRAMACIN DE REPORTS

Tipos de instrucciones
Un reportconsiste en una serie de instrucciones ABAP que empieza por una palabra clave y termina con un punto. Tipos de palabras claves: Declarativas : Para declarar los datos que vamos a usar a lo largo del programa. Por ejemplo: DATA, TABLES. Eventos: Especifica un evento, es el punto donde ABAP ejecuta un cierto proceso. Por ejemplo: START-OF-SELECTION, TOP-OF-PAGE. Control: Sentencias de control de flujo de programa. Por ejemplo:IF,WHILE. Operativas: Realizan funciones propias segn el tipo de palabra clave. Por ejemplo:WRITE, MOVE. Existen dos formas de utilizar comentarios en un report. 1. Con un asterisco (*) en la primera columna de una lnea. 2. Con comillas () en mitad de una lnea. Podemos combinar sentencias consecutivas de mismo formato. Por ejemplo: WRITE LFA1-LIFNR. WRITE LFA1-NAME1 WRITE LFA1-ORT01. Es equivalente a: WRITE:LFA1-LIFNR, LFA1-NAME1, LFA1-ORT01. Objetos de datos Existen 3 clases de objetos de datos : a.- Campos de bases de datos guardadas en el diccionario de datos. Podemos declarar las tablas que queremos utilizar en un programa con la sentencia TABLES. Ejemplo: TABLES:LFA1. .... WRITE: LFA1-LIFNR, LFA1-NAME1. b.- Literales: literales de texto entre comillas o nmeros. Ejemplo:

WRITE DIRECCIN. COMPUTE SALES = AMOUNT / 100. c.- Variables internas: Campos auxiliares con nombre de menos de 30 caracteres (sin incluir el carcter blanco). Se declaran con la sentencia DATA. Ejemplo: DATA:VENTAS_TOTALES TYPE P. Estructura de un programa Ahora vamos a ver la estructura general de un report ABAP. La estructura sera la siguiente: REPORT DECLARACIN DE TABLAS DICCIONARIO. DECLARACIN DE TABLAS INTERNAS. DECLARACIN DE VARIABLES. PANTALLAS DE SELECCIN. EVENTOS. SUBRUTINAS. Emplearemos gramticaEBNF para la notacin. REPORT <nombre> --> Nombre programa TABLES: --> Tablas que se utilizan DATA: --> Variables internas TOP-OF-PAGE. --> Inicio de pgina. <Sentencias> Ejecuta las instrucciones que se indiquen. END-OF-PAGE. --> Fin de pgina. <Sentencias> Ejecuta las instrucciones que se indiquen. START-OF-SELECTION. --> Inicio de programa <Sentencias> Ejecuta las instrucciones que se indiquen. END-OF-SELECTION. --> Fin de programa. <Sentencias> Ejecuta las instrucciones que se indiquen. La secuencia de eventos no es relevante.

Tipos de eventos
1 INITIALIZATION Se ejecuta antes de mostrarse la pantalla de seleccin. Normalmente se utiliza para inicializar las variables de programa y las opciones de la pantalla de seleccin. 2 START-OF-SELECTION Este evento se lanza cuando se procesa la instruccin REPORT... En ese momento se empieza a ejecutar el cdigo que se encuentra entre REPORT y la palabra START-OFSELECTION. Inmediatamente despus se procesa el bloque contenido dentro de este evento. En este evento se sitan las instrucciones de acceso a bases de datos una vez terminada este cdigo se ejecuta el evento END-OF-SELECTION (Si est definido).

3 END-OF-SELECTION. El cdigo asociado a este evento se procesa cuando se termina la seleccin de datos de tablas o bases de datos lgicas, es decir, cuando termina el evento START-OFSELECTION. 4 TOP-OF-PAGE Se ejecuta al inicio de cada nueva pgina. Se suele utilizar para dar formato a la cabecera de pgina, cuando no se utilizan las definidas en Ttulos y cabeceras. (Se aade la opcin NO STANDARD PAGE HEADING). Se le puede aadir la opcin DURING LINE-SELECTION, este evento se producir al inicio de una nueva pgina de un nivel de lista secundaria. (Reports interactivos). Se pueden tener por tanto dos eventos, TOP-OF-PAGE que acta en el nivel inicial. TOP-OF-PAGE DURING LINE-SELECTION que acta en los de niveles superiores. 5 END-OF-PAGE Se ejecuta cuando una pgina finaliza bien porque no tiene ms lneas bien porque se ejecuta la instruccin RESERVE n LINES. Este evento no se ejecutar si el n de lneas de la pgina no est definido en la sentencia REPORT, tampoco se ejecutar se fuerza una nueva pgina con NEW-PAGE. 6 AT SELECTION-SCREEN Se utiliza para controlar la pantalla de seleccin. Sus opciones permiten mostrar valores de ayuda en los campos de seleccin, mostrar/ocultar campos de seleccin. Los rangos de seleccin tiene implcitos dos valores el mnimo y el mximo, para que aparezca la ayuda en los dos es necesario aadir dos eventos, uno para cada valor. La funcionalidad en ambos casos es la misma por tanto es susceptible de se introducida en un nico procedimiento. Para implementar este procedimiento, nos hemos ayudado con una funcin predefinida en el STANDARD. 'HELP_VALUES_GET_WITH_TABLE. Esta funcin permite mostrar datos en una ventana y seleccionar uno de ellos. Permite mostrar informacin de ms de un campo, para ello en la tabla interna de definicin de campos aadiremos tantas entradas como campos deseemos visualizar. Para indicar los valores lo haremos de forma secuencial es decir, el la entrada uno, el valor para el campo 1 en la entrada 2 el valor para el campo 2 as hasta completar todos los campos, a continuacin otra vez la entrada para el campo 1, campo 2 y as sucesivamente para cada secuencia . 1.4. DECLARANDO Y PROCESANDO DATOS TIPOS DE DATOS

Como la mayora de los lenguajes modernos, ABAP tiene un conjunto de tipos de datos primitivos sobre los cuales se crean los tipos de datos ms complejos. En esta imagen se detallan los tipos de datos predefinidos de ABAP:

ABAP contiene un conjunto de tipos de datos A.-Predefinidos Elementales: Forman parte del sistema. Completos: D: Fecha (AAAAMMDD). F: Numrico en coma flotante. I: Entero. T: Hora (HHMMSS). XSTRING: STRING: Incompletos (necesitan especificacion, en el sentido que se debe proveer ms informacin (largo para el tipo P y el nmero de lugares decimales) cuando se crea el objeto de datos (DATA)): C: Alfanumrico. N: Texto no numrico. P: Nmero empaquetado. X: Hexadecimal B.- Por el Usuario Elementales: Son creados a partir de los predefinidos elementales. Se utilizan con la sentencia TYPE. Ejemplo: TYPE nom_tipo TYPE c LENGHT 8. " creacion de otro tipo TYPE nom_tipo_2 TYPE p LENGTH 3 DECIMALS 2. C.-Tipos globales o tipos ABAP predefinidos o tipos locales declarados en el programa ABAP DATA ... LIKE .(nombre de otra variable). "copia el tipo de la variable CONSTANTS nom_contante TYPT tipo VALUE {literal | IS INITIAL}. TIPOS DE VARIABLE Existen dos tipos de variables: a)Variables numricas: Son variables cuya informacin almacenada (ceros y unos) se interpreta por su valor en sistema binario y se usan para realizar clculos. b) Variables de tipo carcter:

Son variables cuya informacin almacenada (ceros y unos) se interpreta de acuerdo a un cdigo (ASCII o Unicode). Este tipo de variables se usa para mostrar valores (nmeros o letras). Cada carcter (letra o nmero) se representa de forma independiente del resto. La longitud de este tipo de variables puede ser determinada por el programador, aunque se establecen unos valores por defecto. VARIABLES PREDEFINIDAS: Son variables elementales que no es necesario definir en el Diccionario del sistema, ya que existen en todos los programas ABAP. Dentro de este tipo de variables podemos definir dos tipos: 1) Variables con longitud fija: Entre estas variables se incluyen las siguientes: a) Variables numricas: Tipo i (integer): Almacena nmeros enteros en 4 bytes. Se usa sobre todo para ndices o contadores en un loop. Por ejemplo DATA x TYPE i VALUE 5. DO x TIMES ... ENDDO Tipo p (packed): Ocupan 8 bytes y almacena nmeros con un nmero fijo de decimales que se declaran mediante la instruccin DECIMALS. Pordefecto el nmero de decimales es cero. Cada decimal ocupa 1/2 byte yel signo ocupa el ltimo 1/2 byte. Se usan sobre todo para almacenarunidades monetarias, de peso, volumen... Debemos sealar la casilla Fixed Point Arithmetic en los atributos del programa antes de usar este tipo de variables. Por ejemplo DATA x TYPE p DECIMALS 2 VALUE 5.25 Tipo f (float):Almacena nmeros reales en 8 bytes. Utiliza el sistema complemento a dos y la notacin cientfica (signo, mantisa y exponente)para representar los nmeros. Este tipo de variables es adecuado para realizar operaciones matemticas complejas tipo raz cuadrada, por ejemplo DATA x TYPE f VALUE sqrt ( 3 ). b) Variables tipo carcter: Tipo c (character): Almacena en 1 byte una letra o un caracternumrico. Por ejemplo, para indicar una variable llamada car que ocupa 4 caracteres escribimos DATA car(3) TYPE c VALUE 'hola'. El tipo c tambin hace las veces de tipobooleano (inexistente en ABAP): unaX se intepreta como verdadero y un espacio en blanco como falso. Para este ltimo existe un tipo predefinido de variable que se llamaspace y que se utiliza para instrucciones de control del tipo IF variable <> space. Tipo n (numeric): Ocupa 1 byte y almacena caracteres numricos (que no nmeros) y se usa para almacenar datos numricos con los que no se realizan operaciones aritmticas, por ejemplo un nmero de telfono o un cdigo postal.

Tipo d (date):Ocupa 8 bytes y se usa para almacenar fechas. El formato es ao(4 dgitos)/mes(2 dgitos)/da(dos dgitos). Si el valor se introduce desde una pantalla el sistema comprueba que la fecha es vlida. La fecha del sistema se guarda en la variable sy-datum. Se pueden realizar operaciones aritmticas del tipo sumar das, semanas, aos, etc. Para sumar 1 al mes actual hacemos los siguiente: definimos una variable tipo d y la llamamos por ejemplo fecha y le asignamos la fecha del sistema: DATA fecha TIPE d VALUE sy-datum accedemos al cuarto dgito con fecha+4 accedemos a los dos siguientes con fecha+4(2) sumamos 1 al mes y lo guardamos fecha =fecha+4(2) + 1 Tipe t (time): Ocupa 6 bytes y se usa para almacenar la hora. El formato es hora(2 dgitos)/minutos(2 dgitos)/segundos(2 dgitos). Se pueden realizar operaciones aritmticas del tipo sumar horas, o segundos de forma similar a como lo hacemos con la fecha. La hora del sistema se guarda en la variable sy-uzeit. Tipo x (hexadecimal): Ocupa 1 byte. Cada medio byte representa valores del 0 al 15 (o lo que es lo mismo del 0 al F en base hexadecimal). El sistema almacena estos nmeros como si fueran caracteres. Si necesitamos realizar operaciones aritmticas con ellos el sistema puede convertirlos a numricos previamente. 2) Variables con longitud indefinida: El espacio que ocupan en memoria vara de forma dinmica en tiempo de ejecucin. Tipo string: Contiene cadenas de caracteres de una longitud indefinida. El sistema reserva memoria para esta variable de forma dinmica (durante la ejecucin del programa) una vez que le asignamos contenido. Tipo xstring: Es el equivalente hexadecimal del string. El sistemareserva memoria RAM de forma dinmica para esta variable a medida que le asignamos contenido (valores del 0 al F en base hexadecimal). VARIABLES DEFINIDAS POR EL PROGRAMADOR: Adems de los tipos de variables elementales que nos proporciona el lenguaje ABAP el sistema nos permite construir nuestros propios tipos de variables (y darles un nombre) a travs de la instruccin TYPES. Por ejemplo: TYPES texto(4) TYPE c. DATA a TYPE texto VALUE 'hola' Son variables ms complejas definidas a partir de varias variables elementales. Podemos declarar tipos de variables y almacenarlas en una parte de la memoria secundaria del sistema (Diccionario), para poder usarlas en un momento posterior por otro programa.

El Diccionario es accesible por todos los programas ABAP que se estn ejecutando en el mismo sistema. Si queremos pasar varibles externas como parmetos a un determinado programa o funcin, debemos asegurarnos que son del mismo tipo, o tipos compatibles. Las estructuras de las bases de datos almacenadas en el sistema son consideradas como tipos de variables. De ah que podamos procesar informacin almacenada en una base de datos como si fueran variables complejas (por ejemplo asignndoles un puntero para luego acceder a su contenido). TIPOS GENRICOS: Typing significa especificar el tipo de datos que puede aceptar un parmetro o un field symbol. El tipo real de los datos slo se adopta cuando se ejecuta un programa y se asigna un valor a una variable. El efecto deltypi ng es que slo podemos asignar valores de ese tipo definido a esa variable. En ocasionesNO nos interesa definir un tipo para una variable, ya que en tiempo de ejecucin puede tomar diversos tipos de valores. En otrasocasiones slo nos interesa definir un tipo parcial. En ABAP tan slo podemos definir tipos genricos dentro de las subrutinas (FORM), de los mtodos (METHODS) y en los FIELD-SYMBOLS. Las variables locales de un programa ABAP NO se pueden definir como de tipo genrico. VARIABLES DE SISTEMA SAP tiene una serie de tablas de utilizacin diversas. Las variables del sistema o las propiedades de una pantalla estn almacenadas en una tabla. A continuacin explicare las tablas ms usadas en SAP. SCREEN SAP coge cualquier pantalla como si fuera una tabla de diccionario, es decir, que para acceder a cualquier objeto hemos de hacer un loop, lo que quiere decir que cada objeto es un registro y la pantalla una tabla. Los campos de esta tabla ya fueron explicados en el tema de tablas del sistema. Y la tabla donde se guarda todo esta se llama SCREEN que tiene la siguiente estructura: Campo NAME GROUP1 GROUP2 GROUP3 GROUP4 ACTIVE Longitud 30 3 3 3 3 1 Descripcin Nombre del campo o del objeto Grupo 1 al cual pertenece Grupo 2 al cual pertenece Grupo 3 al cual pertenece Grupo 4 al cual pertenece Si esta activado. se puede ver

e introducir datos REQUIRED INPUT OUTPUT INTENSIFIED INVISIBLE LENGTH DISPLAY_3D VALUE_HELP 1 1 1 1 1 1 1 1 Si se ha de introducir obligatoriamente Si se puede introducir datos en l Si se puede visualizar datos en l Los datos se visualizan con un color intensificado o no Si es visible o invisible Para acotar la longitud de salida de un campo Si se visualiza con una frame de 3D Si se visualiza con un valor de ayuda

Todos los campos son tipo carcter o CHAR. Los atributos que se pueden modificar en tiempo de diseo son lo siguientes: SCREEN-REQUIRED. SCREEN-INPUT. SCREEN-OUTPUT. SCREEN-INTENSIFIED. SCREEN-INVISIBLE. SCREEN-ACTIVE. SCREEN-LENGHT. Los valores que pueden coger estos campos son: 0->Desactivado o 1->Activado. SYST Posiblemente sea la tabla ms importante de SAP, en esta tabla se guardan todas las variables del sistema: Campo SUBRC REPID DATUM Descripcin Devuelve un valor cuando se produce un error 0 -> No hay errores 4 y 8 -> Se ha producido algn error. Nombre del programa Fecha de hoy

UZEIT PAGNO TABIX MANDT OPSYS UCOMM LSIND UNAME FDPOS

Hora del sistema N de pgina del listado Indice de tablas Mandante Programa Botn o tecla pulsada Nmero de ventana, creada a travs de la orden WINDOW Nombre del usuario Posicin donde se encuentra el string a buscar de la orden SEARCH

Para poder utilizar estas variables se ha de poner delante de ellas: SY-variable, ejemplo: SY-UCOMM. SY-DATUM VARIABLES DE PROGRAMA DECLARACION DE DATOS Ojetos de datos: DATA (Declaracin de variables, registros (fieldstrings), tablas internas y bloques de memoria comn(. Tipo de datos TYPES (Declaracin de tipos de datos) DECLARAR UNA VARIABLE DEL TIPO QUE QUERAMOS La forma de hacerlo sera la siguiente: DATA: Variable (tamao) TYPE (tipo) [VALUE valor] [SPACE] [DECIMALS n]. Tipo: i,d,t,f,c,n,x,p VALUE es por si le queremos dar un valor a la variable cada vez que se ejecute el programa. El valor ha de ser del mismo tipo que la variable. SPACE -> es un campo predefinido. DECIMALS n -> Solo vlido para variables de tipo I, N y F indica el nmero de decimal que va ha tener el nmero. Si no declara el tipo de variable a un campo SAP asume que es de tipo C. NOTA: Para pasar carcter a paquet. Si el nmero final es 0 no lo tiene en cuenta con lo cual, pasamos el carcter a numrico y de numrico (Como no admite decimales) y si

hemos de pasarlo a P con decimales lo multiplicaremos por el nmero de decimales antes de pasarlo. UNA VARIABLE CON LA ESTRUCTURA DE OTRA Hay una forma ms sencilla de declarar una variable con la estructura de otra variable , la sintaxis sera la siguiente: DATA: variable1 LIKE variable2. Donde variable1 tendra la estructura de variable2. ASIGNANDO VALORES Para asignar valores en ABAP existen dos posibilidades, podemos usar la instruccin MOVE o el operadorde asignacin = MOVE x TO y. y = x. En los dos casos el valor guardado en la variablex se copia en la variable y. Los contenidos de la variable x se copian byte a byte a la variable y. Tambin podemos asignar constantes o literales MOVE 5 TO y. MOVE hola TO y. El contenido de x y de y deben ser compatibles (tipo de variable, longitud del campo, nmero de decimales). No es necesario que el tipo de las dos variables sea igual, tambin pueden ser convertibles, aunque la ejecucin del programa va a tardar ms. CONVERSION DE TIPOS Si intentamos realizar una asignacin de variables de distinto tipo, ABAP/4 intenta realizar una conversin automtica de tipo. Existe una instruccin adicional para la conversin P->C. UNPACK <p_num> TO <string>. Que desempaqueta p_num en la variable string colocando ceros a la izquierda. Existe una instruccin adicional para la conversin C->P. PACK <string> TO <p_num> REGLAS DE CONVERSIN Segn el tipo de variable de destino se va a producir lo siguiente: Tipo c (character): Los caracteres se copian de izquierda a derecha. Cuando llegamos a final del campo se trunca. Los nmeros tambin se copian de izquierda a derecha y se truncan por la derecha cuando se acaba el campo. Tipo string: Se aplican las mismas reglas que para los de tipoc peronunca se trunca el valor asignado. Tipo n (numeric): Pese a su nombre es un campo de tipo carcterque slo puede guardar dgitos. No se pueden copiar letras en este tipo de

variables. Los dgitos se copian de derecha a izquierda hasta el final del campo. Si no hay suficiente espacio se trunca por la izquierda. Tipo d (dates): Si asignamos una cadena de caracteres debemos asegurarnos que es compatible con el formato de este tipo de variables, es decir ao(4 caracteres)/mes(2 caracteres)/da(2 caracteres). En caso contrario nos dar un error de compilacin. Si asignamos un nmero este se interpreta como el nmero de das desde el 01/01/0001 y se pasa a formato fechaAAAA/MM/DD. Tipo t (time): Si asignamos una cadena de caracteres debemos asegurarnos que es compatible con el formato de este tipo de variables, es decir horas(2 caracteres):minutos(2 caracteres):segundos(2 caracteres). En caso contrario nos dar un error de compilacin. Si asignamos un nmero este se interpreta como el nmero de segundos desde las 00:00:00 y se pasa a formato hora HH:MM:SS. Tipos i (integer), p (packed), o f (float): Al ser todas estas variables numricas slo pueden almacenar nmeros. Si asignamos una cadena de caracteres estos deben ser dgitos (12345). En el caso en el que incluya decimales, el tipoi lo redondear al entero ms prximo, y el tipop al ltimo decimal. En el caso de que la variable de destino sea de tipof no se producir redondeo. Tipo x (hexadecimal): Los caracteres se interpretan como nmeros hexadecimales (del 0 al F). Si la cadena de caracteres incluye otro carcter que no sea un dgito hexadecimal se trunca en ese punto. Los nmeros reales se pasan a enteros y despus se pasan a hexadecimal. RESETEANDO EL VALOR DE UNA VARIABLE Se entiende por resetear una variable sustituir el valor que tiene asignado hasta ese momento por el valor que el sistema le asigna por defecto. En SAP el valor inicial de cualquier variable es cero excepto en el caso de las variables de tipo carcter que es un espacio en blanco. Las estructuras se descomponen en sus componentes individuales y estos se inicializan segn el tipo de variable a que correspondan. Las referencias o punteros se inicializan a nulo, es decir que no apuntan a ningn sitio. Las tablas internas se resetean borrando todas sus lneas. Para resetear una variable, una estructura, un puntero o una tabla interna usamos la instruccin CLEAR. ASIGNANDO ESTRUCTURAS EN ABAP

Una estructura puede asignarse a otra estructura siempre que sea compatible. Para ello podemos usar el operador de asignacin estructura2 = estructura1. Segn esta instruccin el contenido de la estructura1 se asigna a la estructura2. Para asignar un componente de una estructura a otra estructura podemos usar la instruccin MOVE MOVE estructura1-componente1 TO estructura2-componente2 Tambin podemos asignar componentes con el mismo nombre deuna estructura a otra. Por supuesto no slo deben tener el mismonombre sino que tambin deben de ser compatibles MOVE-CORRESPONDING estructura1 TO estructura2 Sin embargo debemos distinguir la asignacin entre estructuras planas (flat) y estructuras profundas (deep). Recordemos que estas ltimas son las que incluyen otras estructuras (o incluso tablas) entre sus campos. Las estructuras profundas deben ser compatibles y no se permite ningn tipo de conversin al asignar una a otra. Las estructuras planas s permiten la conversin e incluso podemos asignar una estructura a una sola variable de tipo c. Supongamos que una estructura incluye slo componentes o campos de tipo c. En este caso la estructura se considera como una nica cadena de caracteres en la que unos campos se alinean detrs de otros. En realidad es as como se almacenan en la memoria del sistema. Si asignamos una estructura ms larga a otra ms corta (o a una variable de tipo c ms corta), la primera se trunca al llegar al final de la segunda. En el caso en que la segunda sea ms larga que la primera el sobrante se inicializa de acuerdo al tipo que el sistema le asigna por defecto (en el caso de una variable de tipoc son espacios en blanco). En el caso en que una estructura incorpore componentes numricos (por ejemplo del tipoi) hay que tener en cuenta el concepto de alineamiento. Esto se produce porque, dado que una variable de tipo i ocupa cuatro bytes, la direccin de memoria inicial de dicha variable siempre ser divisible por cuatro (en caso contrario el sistema estara leyendo informacin (bytes) procedente de dos variables distintas y el resultado no tendra sentido. Para alinear este tipo de componentes en la nueva estructura (es decir, para conseguir que la direccin de memoria en la que se inicia el componente numrico sea divisible por cuatro en el caso de los componentes de tipoi, y por ocho en el caso de los componentes del tipof) el sistema puede incluir espacios en blanco (alignment gaps) entre un campo de tipo carcter y otro numrico. Por lo tanto se estara ocupando ms espacio en la memoria del que sera deseable, por lo que en el caso en que una estructura contenga componentes de tipo numrico conviene que estos estn los primeros para evitar esos espacios en blanco. Con el nuevo sistema de codificacin UNICODE cada carcter puede ocupar ms de un byte (depende de la plataforma) por lo que tambin aqu se pueden producir problemas de alineamiento. Por eso

el sistema divide la estructura en fragmentos del mismo tipo (fragment view) y comprueba que sean compatibles. ASIGNANDO TABLAS INTERNAS Las tablas internas slo pueden ser asignadas a otras tablas internas, y esto siempre que los campos de los registros o lneas sean compatibles. Para ello el sistema comprueba la compatibilidad de la estructura de campos de la tabla siguiendo las mismas reglas ya descritas para estructuras y variables El nmero de registros de cada tabla es indiferente. OPERACIONES ARITMETICAS En ABAP/4 las 4 operaciones aritmticas bsicas se pueden implementar: Con la instruccinCOMPUTE y los smbolos +, -, /, *. COMPUTE var1 = <Exp.Aritmtica>. Donde la palabra COMPUTE es opcional. Si utilizamos parntesis dejaremos un espacio en blanco precediendo y siguiendo al parntesis. Con las instrucciones: ADD TO, SUBSTRACT FROM, MULTIPLY BY y DIVIDE BY. Tambin dispondremos de funciones matemticas para los nmeros de coma flotante: EXP, LOG, SIN, COS, SQRT, DIV, MOD, STRLEN OPERADORES Operador + * / DIV MOD ** Descripcion Suma Diferencia Multipicacin Divisin Divisin entera Resto de una divisin entera Exponenciacin Ejemplo Resultado = campo1 + campo2. Resultado = campo1 campo2. Resultado = campo1 * campo2. Resultado = campo1 / campo2. Resultado = campo1 DIV campo2. Resultado = campo1 MOD campo2. Resultado = campo1 ** campo2.

PROCESANDO CAMPOS DE TIPO TEXTO ABAP/4 ofrece algunas instrucciones para el procesamiento de cadenas de texto. Para realizar un desplazamiento del contenido de un campo utilizamosSHI FT. SHIFT <campo> -> Realiza un desplazamiento de un carcter hacia la izquierda. SHIFT <campo> BY <n> PLACES (RIGHT) --> Realiza un desplazamiento de n caracteres hacia la izquierda o si se especifica hacia la derecha, introduciendo blancos por el lado opuesto. SHIFT <campo> BY 2 PLACES CIRCULAR (RIGHT). -->Realiza un desplazamiento cclico hacia la izquierda o si se especifica hacia la derecha. Podemos reemplazar el contenido de ciertos campos con la instruccin REPLACE. REPLACE <cadena1> WITH <cadena2> INTO <campo>. Reemplaza cadena 1 por cadena 2 dentro de la variable campo. Si la variable del sistema SY-SUBRC<>0 es que cadena1 no existe dentro de campo. REPLACE nicamente sustituir la primera aparicin de cadena1. Existe otra instruccin de sustitucin,TRANSLATE. TRANSLATE <campo> TO UPPER CASE --> Pasa a Maysculas TO LOWER CASE --> Pasa a Minsculas. USING <regla> -> Reemplaza campo segn la regla de sustitucin indicada. La instruccin SEARCH busca una cadena dentro de un campo o una tabla. SEARCH <campo>/<tabla> FOR <cadena>. Si el Resultado es positivoSY -SU BR C=0. En caso de que sea una tablaSY -TA BI X contiene la lnea de la tabla donde se ha encontrado. Para borrar los blancos de una cadena utilizaremos CONDENSE. CONDENSE <campo> (NO-GAPS). Esta instruccin borra todos los blancos que se encuentren comenzando la cadena por laizquierda y en caso de encontrar series de blancos intermedios dejar nicamente uno por serie. Ejemplo: CURSO DE ABAP/4 --> CURSO DE ABAP/4" La clusula NO-GAPS borra todos los blancos estn donde estn.

EJEMPLOS DE CLASE:
******************************************************** *Ejercicio de asignacin muy simple con =, MOVE y CLEAR* ******************************************************** DATA NUMERO_UNO TYPE I. DATA NUMERO_DOS TYPE I. NUMERO_UNO = 27. NUMERO_DOS = 35. WRITE: / NUMERO_UNO, / NUMERO_DOS. MOVE NUMERO_UNO TO NUMERO_DOS. WRITE / NUMERO_DOS. CLEAR NUMERO_DOS. WRITE / NUMERO_DOS. WRITE: / 'Fin del ejercicio de asignacion'. WRITE SY-ULINE. ********************************* *Operaciones matemticas simples* ********************************* *Usando COMPUTE, optativa* DATA EL_RESULTADO TYPE I VALUE IS INITIAL. WRITE / EL_RESULTADO. COMPUTE EL_RESULTADO = 5 + 5. WRITE / EL_RESULTADO. WRITE SY-ULINE.

1.5 CONTROL DE FLUJO EN LOS PROGRAMAS Formulando condiciones.


En ABAP, como en todos los lenguajes estructurados, disponemos de una serie de instrucciones para subdividir el programa en bloques lgicos se ejecutarn cuando se cumpla una cierta condicin. Para introducir una condicin utilizaremos la sentencia IF ... ELSE ... ENDIF que podr aparecer en distintas modalidades. IF <Cond.>. ... ENDIF. IF <Cond.>. ... ELSE. ... IF <Cond.>. ... ELSEIF. ...

ENDIF.

ELSEIF. ... ELSE. ... ENDIF.

En las condiciones utilizamos los clsicos operadores. OPERADORES PARA CUALQUIER OBJETO DE DATO AND Y. OR O. EQ Igual a. NE No igual a. (Distinto.) LT Menor que. LE Menor o igual que. GT Mayor que. GE Mayor o igual que. Adems existen operadores adicionales para comparar cadenas de caracteres. <f1> CO <f2> (Contains Only) : f1 slo contiene caracteres de f2. En caso de ser cierta SY-FDPOS contiene la longitud de f1 y si es falsa contiene el offset del 1er. carcter que no cumple la condicin. <f1> CN <f2> (Contains Not Only) : Negacin de la anterior. <f1> CA <f2> (Contains Any) : f1 contiene como mnimo algn carcter de f2. Si es cierta SY-FDPOS contiene el offset del 1er. carcter de f1 que est en f2 y si es falsa contiene la longitud de f1. <f1> NA <f2> (Contains Not Any) : Negacin de la anterior. <f1> CS <f2> (Contains String) : f1 contiene la cadena f2. Si la condicin es cierta SYFDPOS contiene el offset donde empieza f2 en f1 y si es falsa contiene la longitud de f1. <f1> NS <f2> (Contains No String) : Negacin de la anterior. <f1> CP <f2> (Contains Pattern) : f1 corresponde al patrn f2. En el patrn podemos utilizar : + como cualquier carcter, * como cualquier cadena de caracteres, # para utilizar los caracteres +,*,# en la comparacin. Si la condicin es cierta SY-FDPOS contiene el offset de f2 en f1 y si es falsa contiene la longitud de f1. <f1> NP <f2> (Contains No Pattern) : Negacin de la anterior. Tambin podremos utilizar operadores especiales: IF <f1> BETWEEN <f2> AND <f3>. Para chequear rangos IF <f1> IS INITAL. Para chequear valores iniciales. Si queremos ejecutar diferentes instrucciones en funcin del contenido de un campo podemos utilizar la sentencia CASE. CASE <campo>. WHEN <valor1>. ....

WHEN <valor2>. .... : WHEN OTHERS. .... ENDCASE.

Por ltimo existe la instruccin condicional, ON CHANGE OF ... ENDON, que permitir la ejecucin de un bloque de instrucciones, si se ha producido un cambio de valor de un cierto campo durante el acceso a base de datos o una tabla interna. Como procesar una tabla interna o un acceso a base de datos, ya lo veremos ms adelante.

ON CHANGE OF <campo>. .... ENDON.

Proceso de bucles.
Para realizar procesos repetitivos utilizaremos DO y WHILE. La instruccin DO permite ejecutar un bloque de instrucciones tantas veces como se especifique. DO <n> TIMES. ... ENDDO. En la variable del sistema SY-INDEX tendremos un contador del nmero de repeticiones. Es posible anidar DOs. En ese caso el SY-INDEX har referencia al bucle en proceso. La instruccin WHILE permite ejecutar un bloque de instrucciones mientras se cumpla una condicin. WHILE <cond>. ... ENDWHILE. De la misma forma que la instruccin DO, WHILE permite anidar bucles.

DO. Sentencias IF <condicion_abort>. EXIT ENDIF. ENDDO.

DO n TIMES. sentencias ENDDO.

WHILE <condicion>. Sentencias ENDWHILE.

SELECT ... FROM <dbtab> ... Sentencia ENDSELECT

LOOP AT <internel table> ... Sentencia ENDLOOP

SELECT LOOP AT

Sentencias de control.
Las sentencias descritas a continuacin se utilizarn para terminar el procesamiento de un bucle o proceso. La instruccin: CHECK <cond>. Realiza un chequeo de <cond> de forma que si dentro de un bucle la condicin es falsa, saltar todas las instrucciones que siguen al CHECK e iniciar la siguiente pasada al bucle. Fuera de un bucle si la condicin es falsa, saltar todas las instrucciones que siguen al CHECK hasta el final del evento o programa en proceso. La instruccin : EXIT. Dentro de un bucle saldr del bucle y fuera de un bucle saldr del programa. Si la instruccin EXIT est dentro de varios bucles anidados, nicamente saldr del bucle en proceso. La instruccin : STOP. Con STOP finalizaremos el report (programa) en ejecucin, pero antes ejecutaremos el evento END-OF-SELECTION. La instruccin : LEAVE.

Con LEAVE finalizaremos el report (programa) en ejecucin, sin ejecutar el evento END-OF-SELECTION. SENTENCIAS DE CONTROL IF ENDIF ELSE ELSEIF CASE ENDCASE WHEN ON CHANGE ON ENDON DO ENDDO WHILE ENDWHILE CHECK CONTINUE EXIT

Bifurcacin condicional. Bifurcacin mltiple condicional. Bucle incondicional. Bucle condicional. Termina el paso de un bucle de forma condicional. Termina el paso de un bucle de forma incondicional. Termina un bucle incondicional

1.6. FORMATEANDO UN LISTADO


ABAP/4 tiene una serie de instrucciones especialmente diseadas para que la generacin de reports sea ms sencilla. SALIDA ESTANDAR DE DATOS ( Formato de los datos de salida) Sentencias para la generacin de un listado. Sentencia WRITE Descripcin Sentencia bsica de escritura. WRITE /(<offset>)(<long>) <datos a visualizar>. Con la Barra / indicaremos si queremos saltar una lnea o no antes de imprimir (opcional). Con el Offset indicaremos la columna donde empezar la impresin (opcional). Con Long. indicaremos la longitud de los valores a visualizar (opcional). WRITE <campo2> UNDER <campo1>. Para escribir un

campo, variable o literal justamente debajo de otros sin tener que calcular la columna, utilizamos la clusula UNDER del WRITE. WRITE <campo> NO-SIGN. Formateamos la salida de un nmero empaquetado, evitando que aparezca el signo. WRITE <campo_importe> CURRENCY <moneda>. WRITE <campo_importe> CURRENCY LOCAL. Para visualizar importes correctamente dependiendo de la moneda del importe WRITE <campo> USING EDIT MASK <mascara>. Para formatear la salida de un campo segn una cierta mscara Los caracteres de la mscara pueden ser: _ :Un carcter del campo a formatear. : :Un separador. Puede ser cualquier carcter especial menos el _. LL :Justifica por la izquierda (valor por defecto). (Al principio de la mscara). RR :Justifica por la derecha. (Al principio de la mscara). WRITE<campo_Caracter> NO-ZERO. Para suprimir los ceros iniciales de una cadena de caracteres. WRITE <campo_Fecha> DD/MM/YY. WRITE <campo_Fecha> MM/DD/YY. WRITE <campo_Fecha> DD/MM/YYYY. WRITE <campo_Fecha> MM/DD/YYYY. Formatear

fechas

ULINE

Subrayado.

ULINE /(<offset>)(<long>). SKIP <n>. Por defecto el salto ser de una nica lnea. SKIP TO LINE <n>. Si queremos ir a una determinada lnea dentro de la misma pgina.

SKIP

Salto de lneas.

NEW-LINE NEW-PAGE SET BLANK-LINES

Salto de lneas. Salto de pgina. Eliminacin de la lnea en blanco. Si queremos especificar la columna de un texto en forma de variable utilizamos: Para modificar los atributos de pantalla para un campo. Ver la documentacin online del editor ABAP/4 para obtener informacin ms detallada sobre los usos y sintaxis posibles de esta instruccin. POSITION <columna>

POSITION

FORMAT

FORMAT INTENSIFIED ON/OFF. FORMAT INVERSE OFF/ON. FORMAT INPUT OFF/ON. FORMAT COLOR n. FORMAT RESET.

Cuando utilizamos la instruccin WRITE con nmeros empaquetados, el sistema truncapor la izquierda en caso de ser necesario (deja un * como indicador de que ha truncado) y rellena con blancos si sobra espacio. Tenemos que tener en cuenta que si es negativo elsigno ocupar una posicin. Si se especifican los decimales con la clusula DECIMALS del DATA, el punto o coma decimal tambin ocupar una posicin. El signo decimal (punto o coma) estar determinado por los valores del registro de usuario. Ejemplo: DATA NUMERO TYPE P DECIMALS 2 VALUE -123456. WRITE NUMERO. 1.234,56Y si no cabe el nmero: WRITE (6)NUMERO. *4,56-

FORMATO DE PGINA Tambin hay un grupo de instrucciones destinadas a dar formato a la salida del report, ya sea por pantalla o por impresora. Podemos hacer tratamientos por inicio y fin de pgina con los eventos : TOP-OF-PAGE y END-OF-PAGE. END-OF-PAGE no se ejecutar si el salto de pgina se produce con un NEWPAGE. Si no queremos que la cabecera delrepo rt sea la estndar de SAP, ya que la queremos controlar nosotros directamente en el eventoTOP-OF-PAGE, utilizaremos: REPORT <Zxxxxxxx> NO STANDARD PAGE HEADING. El formato de la pgina derep o rt se define tambin desde la instruccinREPORT. REPORT <Zxxxxxxx> LINE-SIZE <n> --> Ancho de lnea. LINE-COUNT <n(m)> --> Lneas por pgina (n). Si se desea se pueden reservarlneas para un pie de pgina (m). PAGE-COUNT <n>. --> N mximo de pginas. Podemos impedir que con un salto de pgina se corten lneas que pertenezcan a una agrupacin de lneas con significado lgico propio. Con la instruccin RESERVE reservamos un nmero de lneas. RESERVE <n> LINES. Esta instrucci n se colocar justo antes del WRITE que se quiere reservar , si no cabe se imprimir en la siguiente pgina. Hay varias formas de imprimir un report : - Una vez ha salido elrep ort por pantalla con la opcin de Imprimir. - Imprimir sin visualizar por pantalla con la opcin Imprimirdesde la pantalla de seleccin o de parmetros. Desde el programa ABAP/4 podemos controlar la impresin con la instruccin: NE WPAGE PRINT ON/OFF --> Pantalla o impresora. NO-DIALOG --> No visualiza la pantalla de opciones de impresin. LINE-COUNT <n> --> Lneas por pgina. LINE-SIZE <n> --> Tamao de lnea. DESTINATION <des> --> Impresora destino. IMMEDIATELY <x> --> Impresin inmediata S/N. Para ms informacin sobre otras opciones, ver la ayuda del editor de ABAP/4. Para determinar formatos especiales de impresin utilizaremos la instruccin

PRINT-CONTROL. PRINT-CONTROL FONT <n> CPI <n> LPI <n> SIZE <n> COLOR <color> LEFT MARGIN <col>. ... Para ms informacin sobre otras opciones, ver la ayuda del editor de ABAP/4 SELECCIN DE PARMETROS Si deseamos introducir una serie de delimitaciones en la ejecucin de un reporta nivel de parmetros, dispondremos de dos posibilidades. -El PARAMETERS que permite utilizar parmetros de cua lquier tipo en la pantalla de seleccin. -El SELECT-OPTIONS que permite determinar un criterio de seleccin de los datos a utilizar en el report. PARAMETERS El uso de PARAMETERS posibilita al usuario introducir valores simples a las variables desde la pantalla de seleccin. La pantalla de seleccin es aquella que se encuentra un usuario al inicializar el programa. PARAMETERS <parmetro> [ (<longitud)>] [ TYPE <tipo> | LIKE <campo>] [DECIMALS <decimales>] [DEFAULT <valor>][MEMORY ID <memoria>] [ MATCHCODE OBJECT <objeto> ] [ NODISPLAY ] [AS CHECKBOX][RADIOBUTTON GROUP <grupo>] La sentencia simple de PARAMETERS declara una variable simple cuyo valor puede asignarse desde la pantalla de seleccin. Nota: El nombre de una variable de tipo PARAMETERS no permite ms de ocho caracteres EJ: PARAMETERS p_nombre TYPE char10.

DEFAULT <valor>: Asignar un valor por defecto al parmetro. EJ: PARAMETERS p_nombre(25) TYPE c DEFAULT Jorge. EJERCICIO 01: Realizar un programa que te permita introducir nombre, primer y segundo apellido, y al ejecutarlo salude al usuario. El valor por defecto del nombre debe ser Juan. (5 min.) Al mostrar los parmetros por pantalla, por defecto, aparece el nombre del parmetro. Para modificar dicho texto deberemos: Paso 1: Acceder al MEN Pasar a/Elementos de texto/Textos de seleccin.

Paso 2: Una vez dentro observaremos una tabla cuyos elementos de la izquierda son los nombres de nuestro parmetros y a la derecha rellenaremos con el texto que deseamos que aparezca por pantalla.

Paso 3: Para finalizar grabamos, activamos y vamos hacia atrs (F3) para regresar al cdigo. EJERCICIO 01 (MOD): Con el ejercicio anterior poner los textos correspondientes para que el usuario sepa qu rellenar en cada casilla. (2 min)

MEMORY ID <memoria>: Obtiene el valor de una variable en memoria cuya ID coincide con <memoria>. MATCHCODE OBJECT <objeto>: Asigna un MATCHCODE al parmetro para facilitar la bsqueda de valores. NODISPLAY: El parmetro no ser visible para el usuario y su valor solo podr ser rellenado con DEFAULT, en el bloque INITIALIZATION bien al realizar una llamada al programa de tipo SUBMIT. OBLIGATORY: Hace que el parmetro sea obligatorio. El programa no se ejecutar si dicho campo no est relleno. AS CHECKBOX: Crea un parmetro de longitud uno de tipo check. Si el valor del parmetro es X, el checkbox est marcado, en caso contrario el valor sera (space). EJ: PARAMETERSp_check AS CHECKBOX. RADIOBUTTON GROUP <grupo>: Crea un parmetro de longitud uno de tipo Radio. Al asignarle un grupo indicaremos que no se pueden seleccionar ms de un RADIOBUTTON por grupo. El nombre del grupo no puede superar los 4 carteres. Debe haber ms de un parmetro por grupo. EJ: PARAMETERS p_radio1 RADIOBUTTON GROUP r1. EJERCICIO 02: Se solicita por pantalla el nombre, apellido 1 y apellido 2, que declar si es o no mayor de edad, y que acepte las condiciones de uso. Debemos responder si dicha persona puede o no comprar alcohol. Para ello utilice todos los elementos vistos hasta ahora. El campo nombre debe ser obligatorio, si las condiciones de uso no son aceptadas, el programa devolver un mensaje de error. (10 min.)

SELECT-OPTIONS Se puede designar un rango de valores para un campo ya sea de tabla interna, externa o una variable. SELECTOPTIONS <criterio> FOR <campo> [DEFAULT <g> [ TO <h> ] [OPTION <opcin> SIGN <signo> ][ MEMORY ID <memoria> [MATCHCODE OBJECT <objeto> ][ NODISPLAY ][ OBLIGATORY ][ NO EXTENSION ] [ NO INTERVALS ]. SELECTOPTIONS sirve para crear parmetros de tipo RANGES. Las variables de tipo RANGES son estructuras de tipo interno con cuatro campos: SIGN: Puede tomar los valores I (Incluir) E (Excluir) OPTION: Valores sin HIGH EQ (=), NE (<>), GT (>), LT(<), LE(<=), GE (>=), CP (contiene patrn) y NP (No contiene). Valores con HIGH BT (entre between) NB (no incluye not between) LOW: Valor del rango por abajo HIGH: Valor de rango por arriba SINTXIS: RANGES <criterio> FOR <campo>. Opciones de SELECTOPTIONS: DEFAULT: Rellena el valor por defecto de LOW y si aadimos TO tambin el de HIGH. OPTIONS: Da un valor al campo SIGN del parmetro. NOEXTENSION: Solo permite introducir una lnea de seleccin. No varias. NOINTERVALS: No deja rellenar el campo HIGH. El resto de opciones son igual que en PARAMETERS. EJERCICIO 03: Realizar un programa que nos solicite un rango de nmeros enteros y calcule el nmero de nmeros pares que hay (5 min). PANTALLA DE SELECCIN (SELECT-SCREEN) La instruccin SELECTIONSCREEN nos permite configurar y disear una pantalla de seleccin ms vistosa al usuario y ms ordenada: SELECTIONSCREEN BEGIN OF LINE: Crea un bloque para una lnea nueva. SELECTIONSCREEN END OF LINE: Cierra el bloque para la nueva linea. SELECTIONSCREEN SKIP[<n>]:Introduce n lneas en blanco, si se omite introduce una lnea. SELECTIONSCREEN ULINE [ [ / ] <posicin> (<longitud>) ] [ / ]: Subraya una lnea nueva si se omite la posicin y la longitud, en caso contrario subrayar la parte de la lnea nueva indicada. SELECTIONSCREEN POSITION <posicin>: Fija el inicio de los prximos elementos en una posicin de la lnea. SELECTIONSCREEN COMMENT [ / ] <posicin> (<longitud>) <campo> ( g ) p [ FOR FIELD <campo2> ]: Para escribir texto sobre la pantalla de seleccin. Con la barra ( / ) saltamos de lnea. <campo1> puede ser un elemento de texto o una variable nueva con una longitud mxima de 8 caracteres. Para asignar un texto a un parmetro o a un criterio de seleccin se utiliza la opcin FOR FIELD, <campo2> identifica el nombre del parmetro o criterio de seleccin.

SELECTIONSCREEN BEGIN OF BLOCK <bloque> [ WITH FRAME [ TITLE <ttulo> ] ]: Crea un bloque de seleccin, WITH FRAME realiza un encuadre del bloque, la opcin TITLE crea un ttulo al encuadre, el texto se debe agregar como Smbolos de texto, que se puden agregar en el men Pasar a/Elementos de Texto. SELECTIONSCREEN END OF BLOCK <bloque>: Cierra el bloque de seleccin. EJERCICIO 04: Copiar y modificar el EJERCICIO 02 para que quede ms visual y entendible (15 min) ELEMENTOS DE TEXTO Y MENSAJES El entorno de desarrollo de programas en ABAP/4 nos permite manejar elementos de texto sin necesidad de codificarlos en el programa. Los elementos de texto pueden ser ttulos dereports, cabeceras de reports, textos de seleccin y textos numerados. Podemos acceder a la pantalla de tratamiento de los elementos de textos desde el editor de programas: Pasar a ->Elementos de texto. Con los Ttulos y Cabeceras podemos tratar el ttulo, cabeceras de report y cabeceras de columna que saldrn por pantalla e impresora.

Con los Textos de seleccin trataremos los comentarios que acompaan a los parmetros del tipo PARAMETERSo SELECT-OPTIONS.

Con los Textos numerados podemos utilizar constantes de tipo texto sin necesidad de declararlas en el cdigo del programa. Los nombres de las constantes sern TEXT- nnn, donde nnn es un nmero de tres dgitos. Adems podemos mantener los textos numerados en varios idiomas.

Otras de las facilidades que nos ofrece ABAP/4 para el formateo y control de reports, es la de los mensajes de dilogo. Los mensajes de dilogo son aquellos mensajes que aparecen en la lnea de mensajes y que son manejables desde un programa. Los mensajes estn agrupados en reas de mensajes. Para indicar que rea de mensajes vamos a utilizar en un report utilizamos MESSAGE-IDen la instruccin REPORT. REPORT <report> MESSAGE-ID <area>. Podemos ver, crear y modificar reas de mensajes desde el editor: Pasar a -> Mensajes. Para visualizar un mensaje utilizamos la sentencia MESSAGE. MESSAGE Tnnn. Donde nnn es el nmero de mensaje dentro de su respectiva rea de mensajes y T es el tipo de mensaje A = Cancelacin o Abend del proceso. E = Error. Es necesaria una correccin de los datos. I = Informacin. Mensaje meramente informativo. El proceso continuar con un ENTER. S = Confirmacin. Informacin en la pantalla siguiente. W = Warning. Nos da un aviso. Podemos cambiar los datos o pulsar intro para continuar. Si se emiten mensajes del tipo W o E en eventos START-OF-SELECTION o ENDOFSELECTION o GET se comportan como si fueran del tipo A.

Podemos acompaar los mensajes de parmetros variables. MESSAGE Tnnn WITH <var1> <var2>... En la posicin del mensaje que se encuentre el smbolo &, podemos utilizar paravisualizar el valor que le pasemos como parmetro a la instruccin MESSAGE. No podemos utilizar ms de 4 parmetros por mensaje. Los datos sobre mensajes estn en la tabla T100. Ejemplo: rea de mensajes ZZ. Mensaje: 005 = Entrada &-& incorrecta. REPORT ZPRUEBA MESSAGE-ID ZZ. .... IF.... MESSAGE A005 WITH SKA1 KTOPL. ENDIF.

El mensaje obtenido ser: A: Entrada SKA1-KTOPL Incorrect.

1.7 TABLAS INTERNAS


Si deseamos guardar una coleccin de registros de datos de la misma estructura en memoria sin necesidad de acceder a la base de datos y poder realizar operaciones diversas con este conjunto de informacin, utilizaremos las tablas internas.

CARACTERISTICAS:

TIPO LINEA (LOS CAMPOS QUE TIENE,estructura de datos,) TIPO CLAVE (QUE CAMPOS SON CLAVE) componentes Singularidad Secuencia TIPO DE TABLA Estndar Ordenada Hash

Como declarar tablas internas.


DATA: BEGIN OF <tabla> OCCURS <n>, <Def.Campo>, ... END OF <tabla>. Definiremos una tabla interna con n lneas en memoria, ms una lnea de cabecera o rea de trabajo. La cantidad de lneas que especifiquemos en el OCCURS no limita el tamao de la tabla, sino la cantidad de registros que se guardan en memoria simultneamente. Esto hace necesario un especial cuidado al proponer el nmero de lneas ya que un OCCURS muy grande supone un gran gasto de recursos del sistema y un OCCURS pequeo un acceso muy lento, ya que necesita de un proceso de paginacin. Otra forma seria a travs de un tipo de estructura: TYPE <nombre_tipo> TYPE [STANDAR|SORTED|HASHED] TABLE OF <tipo_estructura_datos> WITH [NON-UNIQUE KEY|UNIQUE KEY] <campo_estructura_datos> <campo_estructura_datos> <campo_estructura_datos>... . DATA <var> TYPE <nombre_tipo>. Declaracin directa DATA <var> TYPE TABLE OF <nombre_tipo_estructura>.

Llenado de una tabla interna.


APPEND : Aade un registro a una tabla interna con los valores que tengamos en el rea de trabajo. APPEND <intab>. COLLECT : Aade o suma la lnea de cabecera. Sumar los campos de tipo P,F,I, si existe una lnea en la tabla con campos idnticos (tipo C) a los del rea de trabajo. El problema de esta instruccin es que es bastante lenta. Se puede sustituir por las instrucciones READ e INSERT o MODIFY. Podemos llenar una tabla interna con el contenido de una tabla de base de datos. Siempre que la tabla interna tenga la misma estructura que la tabla de base de datos. SELECT * FROM <tab> INTO TABLE <tabint>.

Ordenar una tabla interna.


Para clasificar una tabla interna utilizamos SORT.

SORT <intab>. Esta instruccin realiza una ordenacin por la estructura de la tabla sin tener en cuenta los campos P,I,F. Para ordenar por el campo(s) que necesitemos (sea del tipo que sea ) : SORT <intab> BY <campo1> ....<campo n>. Si no se indica lo contrario la ordenacin por defecto es ascendente. SORT ... ASCENDING. o DESCENDING.

Procesamiento de una tabla interna.


Podemos recorrer una tabla interna con la instruccin LOOP ... ENDLOOP. LOOP AT <intab> ( WHERE <cond> ). ... ENDLOOP. En cada iteracin coloca la lnea de la tabla que se est procesando en la lnea de cabecera. Podemos restringir el proceso de una tabla con una condicin WHERE. Si no existe ningn registro de la tabla que cumpla la condicin especificada en la clusula WHERE, la variable del sistema SY-SUBRC ser distinta que 0. Dentro del LOOP la variable SY-TABIX contiene el ndice de la entrada que est procesando en ese momento. Tambin es posible hacer un : LOOP AT <intab> FROM <inicio> TO <fin>. ... ENDLOOP. Donde <inicio> y <fin> son ndices de la tabla interna. Tratamiento de niveles de ruptura. En el tratamiento de un LOOP podemos utilizar sentencias de control de ruptura. AT FIRST. ... ENDAT AT LAST. ... ENDAT. AT NEW <campo>. ... ENDAT. AT END OF <campo>. ... ENDAT. Realiza las instrucciones que hay a continuacin del AT FIRST para la primera entrada de la tabla. Realiza las instrucciones que hay a continuacin del AT LAST para la ltima entrada de la tabla. Realiza las instrucciones que hay a continuacin del AT NEW para cada inicio de nivel de ruptura. Realiza las instrucciones que hay continuacin del AT END para cada final de nivel de ruptura.

Si utilizamos la instruccin SUM dentro de un AT ... ENDAT realizar la suma de todos los campos P,I,F de ese nivel de ruptura (para el clculo de subtotales). El resultado lo encontraremos en el rea de trabajo de la tabla. Ser necesario que la tabla interna est ordenada en el mismo orden que la utilizacin de los niveles de ruptura. As la utilizacin conjunta de todas estas instrucciones ser:

SORT <intab> BY <c1> <c2>. LOOP AT <intab>. AT FIRST ... (SUM) ... ENDAT. AT NEW <c1>. ... (SUM) ... ENDAT. AT NEW <c2>. ... (SUM) ... ENDAT. .......... Proceso Normal de la tabla AT END OF <c2>. ... (SUM) ... ENDAT. AT END OF <c1>. ... (SUM) ... ENDAT. AT LAST ... (SUM) ... ENDAT. ENDLOOP.

Lectura de entradas de una tabla.


Podemos buscar un registro concreto en una tabla sin necesidad de recorrerla. READ TABLE <intab>. Para ello en primer lugar rellenaremos la lnea de cabecera con la clave de bsqueda y luego haremos el READ. El resultado de la bsqueda lo tendremos en SY-SUBRC. Si SY-SUBRC = 0 la bsqueda ha sido positiva. Si SY-SUBRC <> 0 no ha encontrado el registro solicitado. Existen otras extensiones a la instruccin READ que necesitarn que la tabla est ordenada. Podemos buscar por clave con: READ TABLE <intab> WITH KEY <clave>. No necesita llenar la lnea de cabecera. Buscar desde el inicio de la tabla que carcter a carcter coincida con la clave. Es posible una bsqueda an ms rpida con una bsqueda binaria. READ TABLE <intab> WITH KEY <clave> BINARY SEARCH. Una lectura directa de un registro de la tabla la podemos realizar con:

READ TABLE <intab> INDEX <num>.

Modificando tablas internas.


Una vez llena la tabla interna tenemos la posibilidad de modificar los datos con una serie de sentencias ABAP/4. ACCESO A REGISTRO INDIVIDUALES APPEND <estructura_con_informacion> TO <Tabla>. INSERT <estructura_con_informacion> INTO TABLE <Tabla> <condition>. READ TABLE <Tabla> INTO <estructura_sin_informacion> <condition>. MODIFY TABLE <Tabla> FROM <estructura_sin_informacion> [<condition>]. DELETE <Tabla> <condition>. Podemos sobreescribir el contenido de la entrada <i> con el contenido de la lnea de cabecera. Para borrar una entrada de una tabla. Aade una entrada delante de la entrada <estructura_con_informacion> con el contenido de la lnea de cabecera.

Aadir

Insertar

Leer

Modificar

Borrar

PROCESAMIENTO DE SETS DE REGISTROS LOOP AT <Tabla> INTO <wa> <condicion> DELETE <Tabla> <condicion> INSERT LINES OF <Tabla_1> <condicion_1> INTO <Tabla_2> <Condicion_2> APPEND LINES OF <Tabla_1> <condicion> TO <Tabla_2>

Otras instrucciones de manejo de tablas: Inicializar el rea de trabajo o lnea de cabecera.

CLEAR <intab>. Inicializar (borrar) contenido de una tabla. REFRESH <intab>. Liberar el espacio ocupado por una tabla en memoria. FREE <intab>. Para obtener informacin sobre una tabla interna. DESCRIBE TABLE <tab> LINES <contador_entradas> OCCURS <valor_occurs>. EJEMPLO DE CLASE REPORT Z14TEST13 . * Primero creo una estructura (tabla interna) en principio vaca. Le *digo que variables van a ir en la tabla interna. Le digo que me reserve *un espacio en memoria con la siguiente estructura. *debemos crear una estructura especialmente cuando utilizamos campos de *diferentes tablas. *TYPES: begin OF TY_vuelos, * my_connid TYPE connid-spfli, * my_loquesea TYPE loquesea-sflight, * eND OF TY_VUELOS. * * ** Ya est declarada la tabla interna. tambin tenemos la cabecera "wa". *DATA: it_vuelos TYPE TABLE OF ty_vuelos, * wa_vuelos LIKE LINE OF it_vuelos. *************************************************** * Esta tabla interna es slo una estructura. Est vaca, Hay un *espacio reservado en memoria. TYPES: BEGIN OF TY_ALUMNOS, DNI(9) TYPE C, NOMBRE(20) TYPE C, APELLIDO(10) TYPE C, END OF TY_ALUMNOS. * La cabecera es para obtener informacin de la tabla DATA: IT_ALUMNOS TYPE TABLE OF TY_ALUMNOS, WA_ALUMNOS LIKE LINE OF IT_ALUMNOS. * Campo-tabla (para asignar), para declarar es tabla-campo.

*Recordar que dni es un char y va con comillas. WA_ALUMNOS-DNI = '123456789'. WA_ALUMNOS-NOMBRE = 'jose'. WA_ALUMNOS-APELLIDO = 'perez'. * Si no pongo este APPEND, no me agrega nada. APPEND WA_ALUMNOS TO IT_ALUMNOS.

* Ahora declaramos otro registro. WA_ALUMNOS-DNI = '457652331'. WA_ALUMNOS-NOMBRE = 'juan'. WA_ALUMNOS-APELLIDO = 'sanchez'. * Si pongo esto que sigue borro la cabecera y no imprime nada. *CLEAR wa_alumnos. *Con el APPEND se agregan los fields de la cabecera a la tabla interna. APPEND WA_ALUMNOS TO IT_ALUMNOS. * Imprimimos todo lo que figura en la tabla. *LOOP AT IT_ALUMNOS INTO WA_ALUMNOS. * WRITE:/ WA_ALUMNOS-NOMBRE. *ENDLOOP. LOOP AT IT_ALUMNOS INTO WA_ALUMNOS. * WHERE DNI = '123456789' Si ponemos esto, cambia el output. * El SELECT de abajo no funciona pues no se trata de una tabla de BBDD * sino de una tabla interna. *SELECT * from IT_ALUMNOS where DNI = 123456789. WRITE:/ WA_ALUMNOS-NOMBRE. ENDLOOP.

1.8 DICCIONARIO DE DATOS. SQL


DICCIONARIO DE DATOS ELEMENTOS DE DATOS DOMINIO INTRODUCCION SQL MODELO RELACIONAL CONSULTAS SELECT INSERT UPDATE MODIFY DELETE DICCIONARIO DE DATOS

LOS DATOS EN EL SISTEMA SAP OTROS ASPECTOS DE LA PROGRAMACIN DE BDD

1.9 BASES DE DATOS LOGICAS QUE ES UNA BASE DE DATOS LOGICA? UTILIZACION DE LAS BASES DE DATOS LOGICAS 1.10 SUBRUTINAS Y MODULOS DE FUNCION RFC'S. TRABAJAR CON RFC CONSTRUIR RFC TRABAJAR BAPI'S CONSTRUIR BAPI'S USER-EXIT'S 1.11 PROGRAMACION ORIENTADA A OBJETOS Diapositivas de clase --> Diapositivas QU ES LA ORIENTACION A OBJETOS?
La programacin orientada a objetos es un mtodo de desarrollo de software basado en el comportamiento real de los objetos en el mundo real. Se pretende desarrollar componentes de software que se comporten como los objetos reales a los que representan. La orientacin a objetos es una tcnica usada en muchos lenguajes de programacin los cuales comparten una terminologa usada universalmente. En esta seccin se realizar una primera visin de conjunto de estos trminos para en secciones posteriores adentrarse en la implementacin de estos conceptos en el lenguaje ABAP. Objetos Un objeto es nicamente una porcin de cdigo fuente que contiene datos y proporciona servicios. Los datos constituyen los atributos del objeto. Los servicios que proporciona el objeto se conocen como mtodos y se asemejan en su funcionamiento a las funciones. Normalmente los mtodos operan con los datos privados del objeto, esto es, con datos que son slo visibles para los mtodos del objeto. De esta manera, los atributos de un objeto no pueden ser cambiados directamente por el usuario del objeto, slo pueden ser cambiados por los mtodos de ese objeto. As se garantiza la consistencia interna del objeto. Clases Una clase es una entidad terica que describe el comportamiento de un objeto. Desde un punto de vista meramente tcnico, un objeto es una instancia en tiempo de ejecucin de

una clase. En principio se pueden crear cualquier nmero de objetos basados en una nica clase. Cada instancia de una clase (objeto) tiene su propia identidad y su propio conjunto de valores para sus atributos. Dentro de un programa un objeto es identificado por su referencia, la cual le proporciona un nombre que define inequivocamente al objeto y permite acceder a sus mtodos y atributos. Propiedades de los objetos En la programacin orientada a objetos, los objetos tienen normalmente las siguientes propiedades: Encapsulacin Los objetos restringen la visibilidad de sus recursos (atributos y mtodos) al resto de usuarios. Cada objeto posee una interface que determina la manera de interactuar con l. La implementacin del objeto (su interior) es encapsulada, lo que quiere decir que desde fuera el objeto es invisible, simplemente se usa. Polimorfismo El polimorfismo quiere decir que mtodos que se llaman exactamente igual pueden comportarse de manera distinta en clases diferentes. La orientacin a objetos tiene unas estructuras llamadas interfaces que permiten acceder a mtodos con el mismo nombre en diferentes clases. Dentro de cada clase particular se puede redifinir el mtodo obteniendo distintos mtodos con el mismo nombre. Asi es que un mtodo no se define exactamente con su nombre, si no con su nombre y el nombre de la clase a la que pertenece. Herencia Se pueden utilizar clases existentes para originar nuevas clases. Las nuevas clases originadas heredan los datos y los mtodos de la superclase. De cualquier manera, se pueden sobreescibir los mtodos existentes, incluso aadir mtodos nuevos. Usos de la orientacin a objetos Las principales ventajas de la programacin orientada a objetos son: Sistemas de software muy complejos se vuelven mucho ms simples de comprender debido a que la orientacin a objetos proporciona una representacin mucho ms cercana a la realidad que otras tcnicas de programacin. En un sistema correctamente diseado con orientacin a objetos es posible realizar cambios al nivel de la clases, sin tener que realizar cambios en ningn otro punto del sistema. Esto reduce significativamente el costo total del mantenimiento necesario. A travs del polimorfismo y la herencia es posible la reutilizacin de componentes individuales. La cantidad de trabajo en revisin y mantenimiento del sistema se reduce debido a que muchos problemas pueden ser detectados y corregidos en la fase de diseo. Para conseguir estos objetivos necesitamos: Lenguajes de programacin orientados a objetos Las tcnicas de programacin orientadas a objetos no utilizan necesariamente un lenguaje orientado a objetos, aunque la eficiencia del desarrollo depende directamente de la utilizacin o no de un lenguaje orientado a objetos. Herramientas orientadas a objetos Estas herramientas permiten crear programas orientados a objetos en lenguajes orientados a objetos. Permiten adems disear y almacenar los objetos desarrollados y las relaciones entre ellos.

Diseo orientado a objetos El diseo orientado a objetos de un sistema de software es, de todos los requerimientos para conseguir las ventajas arriba enumeradas, el ms importante, el que ms tiempo consume y el ms dificil de llevar a cabo. QU SON LOS OBJETOS ABAP (ABAP OBJECTS)? Este es un nuevo concepto introducido en el release 4.0 que tiene dos significados, por un lado se refiere al entorno de ejecucin ABAP y por otro a la extensin orientada a objetos del lenguaje ABAP El entorno de ejecucin El nombre de ABAP objects para todo el entorno de ejecucin ABAP quiere indicar el objetivo an no totalmente desarrollado de adaptar SAP completamente a la orientacin a objetos. El ABAP Workbench permite crear objetos del R/3 Repository tales como programas, objetos de autorizacin, objetos de bloqueo, etcetera. El Business Object Repository (BOR) permite crear SAP Business objects. Hasta ahora las tcnicas de orientacin a objetos se haban usado exclusivamente en el diseo, pero desde el release 4.0 el lenguaje ABAP es ya un lenguaje orientado a objetos. Extensin orientada a objetos de ABAP ABAP Objects es asimismo un conjunto de sentencias orientadas a objetos que han sido introducidas dentro del lenguaje ABAP. Esta extensin se cimenta en el lenguaje ya existente, siendo compatible con l. Se pueden usar objetos en programas existentes, de la misma manera que se pueden usar sentencias ABAP convencionales en programas ABAP orientados a objetos. El resto del lenguaje ABAP est creado desde un principio orientado a una programacin estructurada, en la cual los datos se almacenan de manera estructurada en tablas en la base de datos y los programas mediante funciones acceden a estos datos y trabajan con ellos. PASO DE LAS FUNCIONES A LOS OBJETOS Los objetos son el centro de cualquier modelo orientado a objetos. Los objetos contienen atributos (datos) y mtodos (funciones). Uno de sus principales objetivos es el suministar al desarrollador de software una forma de trabajo en la cual poder examinar un problema real y poder proporcionar una solucin individualizada al problema. En el entorno de los negocios podran ser objetos las entidades Cliente, Factura, etcetera. Desde el Release 3.1 en adelante, el Business Object Repository (BOR) contiene ejemplos de tales objetos (transaccin SW02). Lo ms parecido a los objetos que tena ABAP eran los mdulos de funciones y los grupos de funciones. Supongamos que tenemos un grupo de funciones para procesar pedidos. Los atributos de un pedido son los datos globales del grupo de funciones, mientras que los mdulos de funciones son las acciones que manipulan los datos, o sea los mtodos. Esto quiere decir que los datos reales del pedido estn encapsulados en el grupo de funciones y no se puede acceder directamente a ellos, slo mediante los mdulos de funciones. De esta manera se garantiza la consistencia de los datos.

Cuando se ejecuta un programa ABAP, el sistema inicia una nueva sesin interna que tiene una zona de memoria en la cual reside el programa ABAP y sus datos asociados. Cuando el programa llama a un mdulo de funciones, una instancia del grupo de funciones ms sus datos es cargado en el rea de memoria de la sesin interna. Un programa puede cargar distintas instancias llamando a mdulos de funciones de diferentes grupos de funciones. La instancia de un grupo de funciones en el rea de memoria de la sesin interna representa prcticamente el concepto de objeto. Cuando se llama al mdulo de funciones, el programa que llama usa la instancia del grupo de funciones basada en su descripcin en la biblioteca de funciones. El programa no puede acceder a los datos en el grupo de funciones directamente pero si a travs del mdulo de funciones. El mdulo de funciones y sus parmetros son la interface ente el grupo de funciones y el usuario. La principal diferencia ente la verdadera orientacin a objetos y los grupos de funciones es que mientras que un programa puede trabajar simultaneamente con varios grupos de funciones, no puede hacerlo con varias instancias de un mismo grupo. Si un programa quiere procesar varios pedidos a la vez tendra que adaptar el grupo de funciones para incluir una administracin de instancias, usando por ejemplo, nmeros que diferencien las instancias. En la prctica, esto es muy complicado de realizar. Por esto, los datos son almacenados en el programa y los mdulos de funciones son llamados para trabajar con ellos (programacin estructurada). Un problema es por ejemplo que todos los usuarios de un mdulo de funciones deben usar las mismas estructuras de datos as como el propio grupo de funciones. El cambiar la estructura de interna de datos de un grupo de funciones afecta a muchos usuarios, sin poder predecir las posibles implicaciones del cambio. El nico modo de evitar esto es mediante las interfaces, con una tcnica que garantice que las estructuras internas de las instancias permanecern ocultas, permitiendo cambiarlas mas tarde sin causar ningn problema. Esto se consigue con la orientacin a objetos. ABAP Objects permite definir datos y funciones en clases en lugar de en grupos de funciones. Usando clases, un programa ABAP puede trabajar con cualquier nmero de instancias (objetos) basados en la misma plantilla. En lugar de cargar en la memoria una nica instancia de un grupo de un grupo de funciones implcitamente cuando se llama al mdulo de funciones, el programa ABAP ahora puede generar las instancias de la clase explcitamente usando la nueva sentencia ABAP CREATE OBJECT. Cada instancia representa a un nico objeto, y se puede acceder a cada una mediante su referencia. La referencia del objeto es lo que permite a un programa ABAP acceder a la interface de la instancia EJEMPLO En el siguiente ejemplo vemos la orientacin a objetos de un sencillo grupo de funciones como es el caso de un contador: Supongamos que tenemos el grupo de funciones COUNTER. FUNCTION-POOL contador. DATA: cont TYPE i. FUNCTION fijar_contador. * Interface local importing value (fijar_valor) cont = fijar_valor.

ENDFUNCTION. FUNCTION incrementar_contador. ADD 1 TO cont. ENDFUNCTION. FUNCTION obtener_contador. * Interface local exporting value (obtener_valor) obtener_valor = cont. ENDFUNCTION.

El grupo de funciones tiene un campo entero llamado cont y tres mdulos de funciones, fijar_contador, incrementar_contador y obtener_contador que trabajan con este campo. Dos de los mdulos de funciones tienen parmetro input y output. Son los mdulos que conforman la interface del grupo de funciones. Cualquier programa ABAP puede trabajar con este grupo de funciones, por ejemplo: DATA numero TYPE i VALUE 5. CALL FUNCTION FIJAR_CONTADOR EXPORTING fijar_valor = numero. DO 3 TIMES. CALL FUNCTION INCREMENTAR_CONTADOR. ENDDO. CALL FUNCTION OBTENER_CONTADOR IMPORTING obtener_valor = numero.

Despus de que esta seccin del programa haya sido ejecutada, la variable numero tendr el valor 8. El programa no puede acceder por s mismo al campo cont del grupo de funciones. Las operaciones sobre este campo estn encapsuladas en el mdulo de funciones. El programa slo puede comunicarse con el grupo de funciones mediante la llamada a los mdulos de funciones. CLASES Las clases son las plantillas de los objetos. A la inversa, podemos decir que el tipo de un objeto es el mismo que el de su clase. Una clase es la descripcin abstracta de un objeto. Tambin podemos decir que una clase es un conjunto de instrucciones que tienen como objetivo construir un objeto. Los atributos de los objetos estn definidos por los componentes de la clase (atributos, mtodos y eventos), que son los que describen y controlan el comportamiento de los objetos. Clases locales y globales Las clases en ABAP Objects se pueden declarar bien globalmente o bien localmente. Las clases globales se definen en el generador de clases (transaccin SE24) en el ABAP Workbench. Estas clases son almacenadas en class pools en la librera de clases en el R/3 Repository. Todos los programas ABAP en un sistema R/3 pueden acceder a las clases globales. Las clases locales se definen en un programa ABAP.

Las clases locales y sus interfaces slo pueden ser invocadas desde el programa en el que se han definido. Cuando se usa una clase en un programa ABAP el sistema busca primero una clase local con el nombre especificado. Si no encuentra ninguna entonces busca una clase global. A parte de la cuestin de la visibilidad, no hay ninguna diferencia entre usar una clase global o una clase local. Lo que si cambia sensiblemente es la manera en la que una clase local y una clase global son creadas. Si se define una clase que se va a usar en un nico programa, normalmente es suficiente con definir aparentemente los componentes visibles de manera que la clase se ajuste a nuestro programa. Por otro lado, las clases globales deben estar preparadas para ser usadas en cualquier parte. Esto quiere decir que se tienen que aplicar ciertas restricciones cuando se define la interface de una clase global, ya que la clase debe estar preparada para garantizar que cualquier programa que use un objeto de esa clase reconozca el tipo de datos de cada parmetro de la interface. Veremos por un lado como crear clases e interfaces locales en un programa ABAP, para despus ver como utilizar el generador de clases para crear clases e interfaces globales. DEFINICIN DE CLASES LOCALES Las clases locales son el conjunto de sentencias que estn entre las sentencias CLASS y ENDCLASS. Una definicin completa de una clase constar de una parte declarativa en la que se definen los componentes, y si es necesario una parte de implementacin en la que se implementan estos componentes. La parte declarativa de una clase est comprendida entre las sentencias: CLASS <class> DEFINITION. ENDCLASS. La parte declarativa contiene la declaracin de todos los componentes de la clase (atributos, mtodos y eventos). Cuando se definen clases locales, la parte declarativa pertenece a los datos globales del programa, por tanto se habr de situar al principio del programa. Si se declaran mtodos en la parte declarativa de una clase, se deber escribir tambin su parte de implementacin. sta es la que va includa entre las siguientes sentencias: CLASS <class> IMPLEMENTATION. ENDCLASS. La parte de implementacin contiene la implementacin de todos los mtodos de la clase. Esta parte acta como un bloque, esto quiere decir que cualquier seccin de cdigo que no forme parte del bloque no er accesible. ESTRUCTURA DE UNA CLASE La estructura de una clase se define principalmente basndose en: Una clase contiene componentes.

Cada componente se asigna a una seccin de visibilidad (pblico, protegido o privado). Las clases implementan mtodos. Componentes de las clases Los componentes de una clase confeccionan sus contenidos. Todos los componentes son declarados en la parte declarativa de la clase. Los componentes definen los atributos de los objetos en una clase. Cuando se define una clase, cada componente es asignado a una de las tres distintas secciones de visibilidad que definen la interface externa de la clase. Todos los componentes de una clase son visibles dentro de la clase. Adems todos comparten el mismo espacio por lo que sus nombres deben ser nicos dentro de la clase. Hay dos tipos de componentes en una clase, aquellos que existen separadamente para cada objeto de una clase, y aquellos que existen slo una vez para la clase entera, independientemente del nmero de instancias. Estos componentes son conocidos como dependientes de instancia o independientes de instancia (o estticos) respectivamente. En ABAP Obejcts, las clases pueden definir los siguientes componentes (debido a que todos los componentes que se pueden declarar en las clases tambin pueden ser declarados en las interfaces, las siguientes descripciones se aplican de la misma manera a las interfaces): Atributos Los atributos son los campos de datos internos de una clase y pueden tener cualquier tipo de datos ABAP. El estado de un objeto viene determinado por el contenido de sus atributos. Un tipo de atributos son las variables referenciadas. Estas variables permiten crear y acceder a los objetos, de manera que si se definen en una clase permiten acceder a otros objetos desde dentro de la clase. Atributos dependientes de instancia. El contenido de estos atributos es especfico de cada objeto. Se declaran usando la sentencia DATA. Atributos estticos El contenido de los atributos estticos define el estado de la clase y es vlido para todas las instancias la clase. Los atributos estticos existen slo una vez para la clase. Se declaran usando la sentencia CLASS-DATA. Son accesibles desde todo el entorno de ejecucin de la clase. Todos los objetos de una clase pueden acceder a sus atributos estticos. Si se cambia un atributo esttico en un objeto, el cambio es visible en todos los dems objetos de la clase. Mtodos Los mtodos son procedimientos internos de una clase que definen el comportamiento de un objeto. Los mtodos pueden acceder a todos los atributos de una clase. Esto les permite cambiar el contenido de los atributos de un objeto. Los mtodos poseen tambin una interface con parmetros que les permite recibir valores cuando son invocados y devolver valores despus de la llamada. Los atributos privados de una clase slo pueden ser cambiados por mtodos de la misma clase. La definicin y la interface de un mtodo son similares a las de los mdulos de funciones. Un mtodo se define en la parte declarativa de la clase y se implementa en la parte de implementacin usando las sentencias:

METHOD <meth>. ENDMETHOD. Se pueden declarar tipos de datos locales y objetos en los mtodos de la misma manera que en cualquier otro procedimiento ABAP (subrutinas y mdulos de funciones). Los mtodos se pueden llamar mediante la sentencia CALL METHOD. Mtodos dependientes de instancia Estos mtodos se declaran usando la sentencia METHODS. Pueden acceder a todos los atributos de una clase, y pueden desencadenar todos los eventos de una clase. Mtodos estticos o independientes de instancia Estos mtodos se declaran usando la sentencia CLASS-METHODS. Slo pueden acceder a los atributos estticos y desencadenar eventos estticos. Mtodos especiales Adems de los mtodos normales que se pueden llamar con la sentencia CALL-METHOD, hay dos mtodos especiales llamados CONSTRUCTOR y CLASS_CONSTRUCTOR que son automticamente llamados cuando se crea un objeto (CONSTRUCTOR) o cuando se accede por primera vez a los componentes de la clase (CLASS_CONSTRUCTOR). Eventos Los objetos o las clases pueden usar eventos para desencadenar un tipo de mtodos en otros objetos o clases. Estos mtodos se llaman mtodos que manejan eventos (event handler methods) En una llamada normal a un mtodo, el mtodo puede ser llamado por cualquier nmero de usuarios. Cuando un evento es desencadenado, cualquier nmero de estos mtodos puede ser llamado. La unin ente el disparador del evento (trigger) y el manejador del evento (handler) no es establecida de antemano, si no en el entorno de ejecucin. En las llamadas normales a mtodos, el programa que llama determina los mtodos a los que quiere llamar. Estos mtodos tienen que existir. El manejador de eventos determina los eventos a los cuales tiene que reaccionar. No tiene porque existir un mtodo manejador de eventos registrado para cada evento. Los eventos de una clase pueden ser desencadenados en los mtodos de la misma clase usando la sentencia RAISE EVENT. Un mtodo de la misma o de diferente clase, se declara como mtodo manejador de eventos utilizando la adicin FOR EVENT <evt> OF <class>. Los eventos tienen una interface de parmetros similar a la de los mtodos, pero slo tienen parmetros de salida. Los parmetros son pasados por el disparador (sentencia RAISE EVENT) al mtodo manejador de eventos el cual los recibe como parmetros de entrada. El vnculo de unin entre el disparador y el manejador (trigger y handler) es establecido dinmicamente en el programa usando la sentencia SET HANDLER. El disparador y el manejador pueden ser objetos o clases, dependiendo de si tenemos eventos dependientes de instancia o eventos estticos y mtodos manejadores de eventos. Cuando un evento es disparado, el correspondiente mtodo manejador de eventos es ejecutado en todas las clases registradas para ese manejador. Existen dos tipos de eventos:

Eventos dependientes de instancia Se declaran con la sentencia EVENTS. Slo pueden ser desencadenados en un mtodo dependiente de instancia. Eventos estticos o independientes de instancia Se declaran con la sentencia CLASS-EVENTS. Todos los mtodos (dependientes de instancia y estticos) pueden desencadenar eventos estticos. Los eventos estticos son el nico tipo de eventos que puede ser desencadenado por un mtodo esttico. Tipos Se pueden definir tipos de datos ABAP dentro de una clase con la sentencia TYPES. Los tipos de datos no son especficos de cada instancia y existen una sla vez para todos los objetos de la clase. Constantes Las constantes son un tipo especial de atributos estticos. Su valor se fija cuando son declaradas y no puede ser cambiado. Se declaran usando la sentencia CONSTANTS. Las constantes existen slo una vez para todos los objetos de la clase. Visibilidad La parte declarativa de una clase se divide en tres reas de distinta visibilidad: CLASS <class> DEFINITION. PUBLIC SECTION. PROTECTED SECTION. PRIVATE SECTION. ENDCLASS. Estas tres reas definen la visibilidad externa de los componentes de la clase, esto es, la interface entre la clase y el usuario. Cada componente de una clase ha de ser asignado a una de estas tres secciones: Public section Todos los componentes declarados en la seccin pblica son accesibles para todos los usuarios de la clase y para todos los mtodos de la clase y de cualquier clase que herede de ella. Los componentes pblicos conforman la interface entre la clase y el usuario. Protected section Todos los componentes declarados en la seccin protegida son accesibles para todos los mtodos de la clase y de las clases que heredan de ella. Los componentes protegidos conforman la interface entre una clase y todas sus subclases. Debido a que la herencia an no est activa en el release 4.5B la seccin protegida tiene actualmente el mismo efecto que la seccin privada.

Private section Los componentes declarados en la seccin privada son slo visibles en los mtodos de la misma clase. Los componentes privados no forman parte de la interface externa de la clase. Encapsulacin Las tres reas de visibilidad son la base de una de las ms importantes caractersticas de la orientacin a objetos, la encapsulacin. Cuando se define una clase hay que tener mucho cuidado en el diseo de los componentes pblicos, intentando declarar tan pocos como sea posible. Los componentes pblicos de las clases globales no pueden ser cambiados una vez que se ha liberado la clase. Por ejemplo, los atributos pblicos son visibles externamente, y forman parte de la interface entre un objeto y sus usuarios. Si se quiere encapsular el estado de un objeto completamente no se tiene que declarar ningn atributo pblico. Adems de definir la visibilidad de un atributo, se puede proteger tambin de los cambios usando la adicin READ-ONLY. Visin de conjunto CLASS c1 DEFINITION. PUBLIC SECTION. DATA: a1 METHODS: m1 EVENTS: e1 PROTECTED SECTION. DATA: a2 METHODS: m2 EVENTS: e2 PRIVATE SECTION. DATA: a3 METHODS: m3 EVENTS: e3 ENDCLASS. CLASS c1 IMPLEMENTATION. METHOD m1 ENDMETHOD. METHOD m2 ENDMETHOD. METHOD m3 ENDMETHOD. ENDCLASS. Esta sera la estructura de la parte de declaracin y la parte de implementacin de una clase local c1. Componentes pblicos Componentes protegidos Componentes privados Interface entre la clase y sus usuarios Interface con las subclases de la clase c1 No visibles externamente, completamente

encapsulados en la clase Implementacin de los mtodos EJEMPLO DE UNA CLASE LOCAL De la misma manera que vimos el ejemplo del contador para el grupo de funciones se puede realizar lo mismo con una clase: CLASS C_CONTADOR DEFINITION. PUBLIC SECTION. METHODS: FIJAR_CONTADOR IMPORTING VALUE(FIJAR_VALOR) TYPE I, INCREMENTAR_CONTADOR, OBTENER_CONTADOR EXPORTING VALUE(OBTENER_VALOR) TYPE I. PRIVATE SECTION. DATA CONT TYPE I. ENDCLASS. CLASS C_CONTADOR IMPLEMENTATION. METHOD FIJAR_CONTADOR. CONT = FIJAR_VALOR. ENDMETHOD. METHOD INCREMENTAR_CONTADOR. ADD 1 TO CONT. ENDMETHOD. METHOD OBTENER_CONTADOR. OBTENER_VALOR = CONT. ENDMETHOD. ENDCLASS. La clase c_contador contiene tres mtodos pblicos, fijar_contador, incrementar_contador y obtener_contador. Cada uno de ellos trabaja con el atributo privado cont. Dos de estos mtodos tienen parmetros de entrada y de salida. Estos son los que forman la interface de la clase. El atributo cont no es visible directamente. Ms adelante se ver como crear instancias de una clase para poder as utilizar la clase en el programa. UTILIZACIN DE OBJETOS Objetos Los objetos son instancias de las clases. Cada objeto tiene una identidad propia y tiene sus propios atributos. Todos los objetos transitorios residen en el contexto de una sesin interna (rea de memoria de un programa ABAP). Los objetos permanentes en la base Tienen acceso completo a todos los componentes de la clase

de datos an no estn disponibles (documentacin del release 4.6B). Una clase puede tener un nmero indefinido de objetos (instancias). Referencias a objeto Las referencias a objeto se usan para acceder a un objeto desde un programa ABAP. Las referencias a objeto son punteros a los objetos. En ABAP los objetos estn siempre contenidos en variables referenciadas. Las variables referenciadas o bien contienen el valor initial o bien contienen la referencia a un objeto ya existente. La identidad de un objeto depende de su referencia. Una variable referenciada que apunta a un objeto es la que conoce la identidad del objeto. Los usuarios no pueden acceder a la identidad del objeto directamente. Las variables referenciadas en ABAP son tratadas como cualquier otro objeto de datos elemental. Esto quiere decir que una variable referenciada puede contener una tabla interna o una estructura. ABAP contiene un tipo de datos predefinido para las referencias, comparable a los tipos de datos para las estructuras o para las tablas internas. El tipo de datos completo no est definido hasta la declaracin en el programa ABAP. El tipo de datos de la variable referenciada determina como el programa acta con su valor, o sea, con la referencia al objeto. Hay dos tipos principales de referencias, la referencia a clases y la referencia a interfaces (se ver mas adelante). Las referencias a clases se definen usando la siguiente adicin: TYPE REF TO <class>. Esta adicin se usa en las sentencias TYPES o DATA. Una variable referenciada de este tipo se llama variable referenciada a clase o referencia a clase simplemente. Una referencia a clase <cref> permite al usuario crear una instancia, o sea un objeto, de la clase y acceder a un componente visible de la siguiente manera: cref->comp Cmo crear objetos? Antes de crear un objeto de una clase es necesario declarar una variable referenciada con la referencia a la clase. Una vez que se ha declarado la referencia <obj> a la clase <class>, se puede crear el objeto usando la sentencia CREATE OBJECT <cref>. Esta sentencia crea una instancia de la clase <class>, y la variable referenciada <cref> contiene la referencia al objeto. Acceder a los componentes de un objeto Los programas slo pueden acceder a los componentes de las instancias usando las referencias de las variables referenciadas. La sintaxis es la siguiente, siendo ref la variable referenciada: Para acceder al atributo attr: ref->attr. Para llamar al mtodo meth: CALL METHOD ref->meth. Para los componentes estticos (independientes de instancia, slo dependientes de clase) se puede usar tanto el nombre de la clase como la variable referenciada. Tambin es

posible acceder a los componentes estticos de una clase antes de que un objeto de la clase haya sido creado. La sintaxis, siendo class la clase es la siguiente: Para acceder al atributo esttico attr: class->attr. Para llamar al mtodo esttico meth: CALL METHOD class->meth. Dentro de una clase se puede acceder tambin a los componentes individuales mediante la referencia a s mismo ME: Para acceder al atributo attr en la propia clase: me->attr. Para llamar al mtodo meth en la propia clase: CALL METHOD me->meth. CREAR MAS DE UNA INSTANCIA DE UNA CLASE En un programa se pueden crear cualquier nmero de objetos de una misma clase. Estos objetos son completamente independientes unos de otros. Cada uno tiene su propia identidad dentro del programa y sus propios atributos. Cada sentencia CREATE OBJECT genera un nuevo objeto, cuya identidad est completamente definida por su referencia al objeto. Asignar referencias Se pueden asignar referencias a distintas variables referenciadas usando la sentencia MOVE. De esta manera se puede tener las referencias en varias variables referenciadas apuntando al mismo objeto. Cuando se asigna una referencia a una variable referenciada distinta, sus tipos deben ser compatibles. Cuando se usa la sentencia MOVE o el operador de asignacin = para asignar variables referenciadas, el sistema debe ser capaz de reconocer en el chequeo de la sintaxis si la asignacin va a ser posible. Esto mismo se aplica cuando se pasan variables referenciadas como parmetros a procedimientos. Si escribimos la sentencia cref1 = cref2, las dos referencias tienen que tener el mismo tipo, esto es, tienen que referirse a la misma clase, o bien la clase de cref1 tiene que ser la clase predefinida como vaca, OBJECT. La clase OBJECT no tiene componentes y tiene la misma funcin para las variables referenciadas que el tipo de datos ANY para las variables normales. Las variables referenciadas con el tipo OBJECT pueden funcionar como contenedoras para pasar referencias. De cualquier manera, nunca pueden ser usadas para acceder a objetos. Tiempo de vida de un objeto Un objeto existe mientras se est usando en el programa, lo que quiere decir que existe siempre que al menos una referencia apunte hacia l, o al menos un mtodo del objeto est registrado como mtodo manejador de eventos. Desde el momento en que deja de haber referencias a un objeto y ninguno de sus mtodo es un mtodo manejador de eventos, el objeto es borrado de la memoria automticamente. El ID del objeto queda libre para ser usado por un nuevo objeto. OBJETOS COMO INSTANCIAS DE UNA CLASE

Las ilustraciones de arriba muestran una clase y sus instancias dentro de una sesin interna de un programa ABAP. EJEMPLO: CMO CREAR Y USAR UNA CLASE. En este ejemplo veremos cmo crear y usar una instancia de la clase c_counter que creamos en la seccin anterior. DATA cref1 TYPE REF TO c_contador. Creamos una variable cref1 que es referenciada a la clase c_contador. Esta variable puede contener referencias a todas las instancias de la clase c_contador. La clase c_contador debe ser conocida para el programa en el momento en que la sentencia data tiene lugar. Por tanto la clase c_contador debe estar o bien declarada localmente antes de la sentencia data o bien globalmente con el constructor de clases. Despus de esta sentencia el contenido de cref1 es initial, o sea la referencia no apunta a ninguna instancia. DATA cref1 TYPE REF TO c_contador. CREATE OBJECT cref1.

La sentencia CREATE OBJECT crea un objeto (instancia) de la clase c_contador. La referencia en la variable referenciada cref1 apunta a este objeto. La instancia de la clase c_contador se llama c_contador<1> debido a que as es como se visualizan los contenidos de la variable de objeto en el debugger despus de que la sentencia CREATE OBJECT haya sido ejecutada. Este nombre es slo usado internamente por el programa y no aparece nunca en el propio programa ABAP. DATA cref1 TYPE REF TO c_contador. DATA numero TYPE i VALUE 5. CREATE OBJECT cref1. CALL METHOD cref1->fijar_contador EXPORTING fijar_valor = numero. DO 3 TIMES. CALL METHOD cref1->incrementar_contador. ENDDO. CALL METHOD cref1->obtener_contador IMPORTING obtener_valor = numero. EL programa ABAP puede acceder a los componentes pblicos de los objetos usando la variable referenciada cref1, lo cual en este caso se corresponde a llamar a los mtodos pblicos de la clase c_contador. Despus que el programa haya sido ejecutado la variable numero y el atributo privado del objeto cont tienen ambos el valor 8.

Podemos tambin manejar varias instancias de la misma clase. DATA cref1 TYPE REF TO c_contador. DATA cref2 TYPE REF TO c_contador. DATA cref3 LIKE cref1. As creamos tres variables referenciadas a la clase c_contador. Todas ellas contienen el valor initial. DATA cref1 TYPE REF TO c_contador. DATA cref2 TYPE REF TO c_contador. DATA cref3 LIKE cref1. CREATE OBJECT cref1, cref2, cref3. El sistema crea tres objetos de la clase a partir de las tres variables referenciadas a la clase. Las referencias en las tres variables apuntan a cada uno de los objetos. Internamente las instancias se llaman c_contador <1>, c_contador <2>, y c_contador <3>. El nmero se asigna en el orden en que son creadas. DATA cref1 TYPE REF TO c_contador. DATA cref2 TYPE REF TO c_contador. DATA cref3 LIKE cref1. DATA numero1 TYPE i VALUE 5. DATA numero2 TYPE i VALUE 0. DATA numero3 TYPE i VALUE 2. CREATE OBJECT cref1, cref2, cref3. CALL METHOD: cref1->fijar_contador EXPORTING fijar_valor = numero1, cref2->fijar_contador EXPORTING fijar_valor = numero2, CALL METHOD cref2->incrementar_contador. CALL METHOD cref1->incrementar_contador. CALL METHOD: cref1->obtener_contador IMPORTING obtener_valor = numero1, cref2->obtener_contador IMPORTING obtener_valor = numero2, El programa ABAP usa las variables referenciadas para acceder a los objetos, en este caso a los mtodos publicos de la clase c_contador. Cada objeto tiene su propia identidad y su propio estado, ya que el atributo privado dependiende de instancia cont tiene distintos valores en cada objeto. El programa administra varios contadores.

DATA cref1 TYPE REF TO c_contador. DATA cref2 TYPE REF TO c_contador. DATA cref3 LIKE cref1. CREATE OBJECT cref1, cref2. Ahora declaramos tres variables referenciadas para la clase c_contador y se crean dos objetos para la clase. Las referencias en las variables referenciadas cref1 y cref2 apuntan a cada uno de los objetos. La referencia cref3 se mantiene initial. DATA cref1 TYPE REF TO c_contador. DATA cref2 TYPE REF TO c_contador. DATA cref3 LIKE cref1. CREATE OBJECT cref1, cref2. MOVE cref2 TO cref3. Despus de la sentencia MOVE, cref3 contiene la misma referencia que cref2 y ambas referencias apuntan al objeto c_contador<2>. Un usuario puede usar cualquiera de ellas para acceder al objeto. DATA cref1 TYPE REF TO c_contador. DATA cref2 TYPE REF TO c_contador. DATA cref3 LIKE cref1. CREATE OBJECT cref1, cref2. MOVE cref2 TO cref3. CLEAR cref2. La sentencia CLEAR reinicializa la referencia de cref2 al valor initial. En este momento la variable referenciada cref2 contiene el mismo valor que inmediatamente despus de su declaracin y ya no apunta a ningn objeto. DATA cref1 TYPE REF TO c_contador. DATA cref2 TYPE REF TO c_contador. DATA cref3 LIKE cref1. CREATE OBJECT cref1, cref2. MOVE cref2 TO cref3. CLEAR cref2. cref3 = cref1. La referencia en cref3 ahora apunta al objeto c_contador<1>. Ya no hay referencias apuntando al objeto c_contador<2> el cual es automticamente borrado, con lo cual el nombre interno c_contador<2> est libre de nuevo. DECLARACIN Y LLAMADA DE MTODOS

En esta seccin se ensear como declarar, implementar y llamar mtodos en el lenguaje ABAP. Declaracin de mtodos Los mtodos se pueden declarar bien en la parte declarativa de una clase o bien en una interface. Para declarar mtodos dependientes de instancia se usa la siguiente sentencia: METHODS <meth> IMPORTING.. [VALUE(]<ii>[)] TYPE type [OPTIONAL].. EXPORTING.. [VALUE(]<ei>[)] TYPE type [OPTIONAL].. CHANGING.. [VALUE(]<ci>[)] TYPE type [OPTIONAL].. RETURNING VALUE(<r>) EXCEPTIONS.. <ei>.. Para declarar mtodos estticos se usa se usa la siguiente sentencia: CLASS-METHODS <meth>.. Ambas sentencias tienen la misma sintaxis. Cuando se declara un mtodo se puede definir su interface de parmetros usando las adiciones IMPORTING, EXPORTING, CHANGING, y RETURNING. Estas adiciones definen los parmetros de entrada, de salida, de entrada/salida y el cdigo que devuelve el mtodo. Tambin definen si los parmetros se pasan por referencia o por valor (VALUE), su tipo (TYPE), o si es opcional o por defecto (OPTIONAL, DEFAULT). Al contrario que en los mdulos de funciones, el modo por defecto de pasar parmetros a un mtodo es por referencia. Para pasar un parmetro por valor es necesario especificar explcitamente la adicin VALUE. El valor de retorno (RETURNING)debe pasarse siempre explcitamente como por valor (RETURNING VALUE). Es apropiado para mtodos que devuelven un solo valor. Si se usa esta adicin no se pueden usar los parmetros EXPORTING o CHANGING. Al igual que en los mdulos de funciones, se pueden usar las excepciones (EXCEPTIONS) para permitir al usuario reaccionar ante las situaciones de error cuando el mtodo se est ejecutando. Implementacin de mtodos Los mtodos se implementan en la parte de implementacin de la clase con las sentencias: METHOD <meth>. ... ENDMETHOD. Al implementar un mtodo no hay que especificar los parmetros de la interface del mtodo, ya que estn definidos en la declaracin del mtodo. La interface de parmetros

de un mtodo se comporta dentro de la implementacin del mtodo como variables locales. Se pueden definir variables locales adicionales dentro del mtodo usando la sentencia DATA. Al igual que en los mdulos de funciones, se puede usar las sentencias RAISE <exception> y MESSAGE RAISING para controlar los errores. Cuando se implementa un mtodo esttico hay que tener en cuenta que slo puede trabajar con los atributos estticos de la clase. Los mtodos dependientes de instancia pueden trabajar tanto con atributos estticos como con atributos dependientes de instancia. Llamada a mtodos Para llamar a un mtodo se usa la siguiente sentencia: CALL METHOD <meth> EXPORTING... <ii> =.<f i>... IMPORTING... <ei> =.<g i>... CHANGING ... <ci> =.<f i>... RECEIVING r = h EXCEPTIONS... <ei> = rc i... La manera en que se llama al mtodo depende del mtodo del que se trate y de desde donde se llame. En la parte de implementacin de una clase se pueden llamar directamente mtodos de la misma clase simplemente usando su nombre. CALL METHOD <meth>... Desde fuera de la clase, podremos llamar slo a los mtodos cuya visibilidad nos permite hacerlo. Los mtodos visibles dependientes de instancia pueden ser llamados desde fuera de la clase usando la sentencia: CALL METHOD <ref>-><meth>... donde <ref> es una variable referenciada cuyo valor apunta a una instancia de la clase. Los mtodos visibles estticos pueden ser llamados desde fuera de la clase con la sentencia: CALL METHOD <class>=><meth>... donde class es el nombre de la clase. Cuando se llama a un mtodo se deben pasar todos los parmetros de entrada no opcionales en las adiciones EXPORTING o CHANGING en la sentencia CALL METHOD. En cambio con los parmetros de salida es optativo pasarselos al mtodo usando las adiciones IMPORTING o RECEIVING. De la misma manera no es obligatorio controlar las excepciones desencadenadas con la adicin EXCEPTIONS, an as se recomienda controlar los errores. La manera de pasar y recibir valores con los mtodos es la misma que con las funciones.

..<parmetro formal> = <parmetro real> despus de la correspondiente adicin. Los parmetros de la interface (formales) van siempre a la izquierda del signo igual. El signo igual sirve para asignar las variables del programa a los parmetros de la interface del mtodo. Si la interface de un mtodo tiene slo un parmetro IMPORTING, se puede usar la siguiente llamada abreviada: CALL METHOD <method>( f). El parmetro real <f> es pasado al parmetro de entrada del mtodo. Si la interface de un mtodo tiene slo parmetros IMPORTING, se puede usar la siguiente llamada abreviada: CALL METHOD <method>(....<ii> =.<f i>...). Cada parmetro real <f i > es pasado al correspondiente parmetro de entrada del mtodo. Mtodos manejadores de eventos Los mtodos manejadores de eventos son una clase especial de mtodos que no pueden ser llamados usando la sentencia CALL METHOD. En su lugar estos mtodos son desencadenados mediante eventos. Un mtodo se define como manejador de eventos mediante la adicin: ... FOR EVENT <evt> OF <cif>... en la sentencia METHODS o CLASS-METHODS. Las interfaces de los mtodos manejadores de eventos tienen que cumplir una serie de reglas: La interface slo puede tener parametros de entrada (IMPORTING). Cada parmetro de entrada al mtodo (IMPORTING) debe tener su correspondiente parmetro de salida (EXPORTING) en el evento. Los atributos de los parmetros estn definidos en la declaracin del evento (sentencia EVENTS) y son tomados por el mtodo manejador de eventos. Constructores Los constructores son un tipo especial de mtodos que no pueden ser llamados con la sentencia CALL METHOD. Estos mtodos son llamados automticamente por el sistema para fijar el estado inicial de un nuevo objeto o clase. Hay dos tipos de constructores, los dependientes de instancia y los estticos o independientes de instancia. Los constructores son mtodos con un nombre predifinido. Para usarlos deben ser declarados explcitamente en la clase. El constructor dependiente de instancia de una clase es un mtodo que se llama CONSTRUCTOR. Se declara en la seccin pblica de la siguiente manera: METHODS CONSTRUCTOR IMPORTING.. [VALUE(]<ii>[)] TYPE type [OPTIONAL]..

EXCEPTIONS.. <ei>. Se implementa en la parte de implementacin de la misma manera que cualquier otro mtodo. El sistema llama al constructor dependiente de instancia una vez para cada instancia de la clase, justo despus de que el objeto haya sido creado mediante la sentencia CREATE OBJECT. Se le pueden pasar parmetros de entrada y controlar sus errores usando las adiciones EXPORTING y EXCEPTIONS en la sentencia CREATE OBJECT. El constructor esttico de una clase es el mtodo esttico predefinido CLASS_CONSTRUCTOR. Se declara en la seccin pblica de la siguiente manera: CLASS-METHODS CLASS_CONSTRUCTOR. Se implementa como cualquier otro mtodo. El constructor esttico no tiene parmetros. El sistema llama al constructor esttico una vez para cada clase, justo antes de la clase se utiliza por primera vez. Debido a esto el constructor esttico no puede acceder a los componentes de la propia clase. EJEMPLO DEL USO DE MTODOS El siguiente ejemplo muestra como declarar, implementar y usar mtodos en ABAP Objects. Introduccin Este ejemplo usa tres clases llamadas c_team, c_biker y c_bicycle. Un usario (un programa) puede crear objetos de la clase c_team. En la pantalla de seleccin la clase c_team pide el nmero de miembros de cada equipo. Cada objeto en la clase c_team puede crear tantas instancias de la clase c_biker como miembros haya en el equipo. Cada instancia de la clase c_biker crea ua instancia de la clase c_bicycle. Cada instancia de la clase c_team puede comunicarse con el programa a travs de una lista interactiva. El programa puede elegir miembros de los equipos para trabajar con ellos. Las instancias de la clase c_biker permiten al programa elegir la accin a realizar en una pantalla posterior. Restricciones Hay sentencias ABAP usadas en el proceso de listas que an no estn completamente disponibles en ABAP Objects. Para producir un output de test se pueden usar las siguientes sentencias: WRITE [AT] /<offset>(<length>) <f> ULINE SKIP NEW-LINE Declaracin

Este ejemplo usa clases locales debido a que las pantallas de seleccin pertenecen a un programa ABAP y no pueden ser definidas o llamadas en clases globales. Se definen dos pantallas de seleccin y tres clases. ******************************************************************* * Global Selection Screens ******************************************************************* SELECTION-SCREEN BEGIN OF: SCREEN 100 TITLE TIT1, LINE. PARAMETERS MEMBERS TYPE I DEFAULT 10. SELECTION-SCREEN END OF: LINE, SCREEN 100. *-----------------------------------------------------------------SELECTION-SCREEN BEGIN OF SCREEN 200 TITLE TIT2. PARAMETERS: DRIVE RADIOBUTTON GROUP ACTN, STOP RADIOBUTTON GROUP ACTN, GEARUP RADIOBUTTON GROUP ACTN, GEARDOWN RADIOBUTTON GROUP ACTN. SELECTION-SCREEN END OF SCREEN 200. ******************************************************************* * Class Definitions ******************************************************************* CLASS: C_BIKER DEFINITION DEFERRED, C_BICYCLE DEFINITION DEFERRED. *-----------------------------------------------------------------CLASS C_TEAM DEFINITION. PUBLIC SECTION. TYPES: BIKER_REF TYPE REF TO C_BIKER, BIKER_REF_TAB TYPE STANDARD TABLE OF BIKER_REF WITH DEFAULT KEY, BEGIN OF STATUS_LINE_TYPE, FLAG(1) TYPE C, TEXT1(5) TYPE C, ID TYPE I, TEXT2(7) TYPE C, TEXT3(6) TYPE C, GEAR TYPE I, TEXT4(7) TYPE C, SPEED TYPE I, END OF STATUS_LINE_TYPE. CLASS-METHODS: CLASS_CONSTRUCTOR. METHODS: CONSTRUCTOR, CREATE_TEAM, SELECTION, EXECUTION. PRIVATE SECTION. CLASS-DATA: TEAM_MEMBERS TYPE I, COUNTER TYPE I. DATA: ID TYPE I, STATUS_LINE TYPE STATUS_LINE_TYPE, STATUS_LIST TYPE SORTED TABLE OF STATUS_LINE_TYPE

WITH UNIQUE KEY ID, BIKER_TAB TYPE BIKER_REF_TAB, BIKER_SELECTION LIKE BIKER_TAB, BIKER LIKE LINE OF BIKER_TAB. METHODS: WRITE_LIST. ENDCLASS. *-----------------------------------------------------------------CLASS C_BIKER DEFINITION. PUBLIC SECTION. METHODS: CONSTRUCTOR IMPORTING TEAM_ID TYPE I MEMBERS TYPE I, SELECT_ACTION, STATUS_LINE EXPORTING LINE TYPE C_TEAM=>STATUS_LINE_TYPE. PRIVATE SECTION. CLASS-DATA COUNTER TYPE I. DATA: ID TYPE I, BIKE TYPE REF TO C_BICYCLE, GEAR_STATUS TYPE I VALUE 1, SPEED_STATUS TYPE I VALUE 0. METHODS BIKER_ACTION IMPORTING ACTION TYPE I. ENDCLASS. *-----------------------------------------------------------------CLASS C_BICYCLE DEFINITION. PUBLIC SECTION. METHODS: DRIVE EXPORTING VELOCITY TYPE I, STOP EXPORTING VELOCITY TYPE I, CHANGE_GEAR IMPORTING CHANGE TYPE I RETURNING VALUE(GEAR) TYPE I EXCEPTIONS GEAR_MIN GEAR_MAX. PRIVATE SECTION. DATA: SPEED TYPE I, GEAR TYPE I VALUE 1. CONSTANTS: MAX_GEAR TYPE I VALUE 18, MIN_GEAR TYPE I VALUE 1. ENDCLASS. *******************************************************************

Ninguna de las clases tiene atributos pblicos. El estado de las clases slo puede ser cambiado por sus mtodos. La clase c_team tiene un constructor esttico. Las clases c_team y c_biker tienen constructores dependientes de instancia. Implementacin La parte de implementacin de las clases contiene la implementacin de los mtodos declarados en la parte de declaracin. Las interfaces de los mtodos ya han sido definidas en la declaracin. En la implementacin los parmetros de las interfaces se comportan como variables locales. Los siguientes mtodos estn implementados en el bloque:

CLASS C_TEAM IMPLEMENTATION. ******************************************************************* METHOD CLASS_CONSTRUCTOR. TIT1 = 'Team members ?'. CALL SELECTION-SCREEN 100 STARTING AT 5 3. IF SY-SUBRC NE 0. LEAVE PROGRAM. ELSE. TEAM_MEMBERS = MEMBERS. ENDIF. ENDMETHOD. ******************************************************************* METHOD CONSTRUCTOR. COUNTER = COUNTER + 1. ID = COUNTER. ENDMETHOD. ******************************************************************* METHOD CREATE_TEAM. DO TEAM_MEMBERS TIMES. CREATE OBJECT BIKER EXPORTING TEAM_ID = ID MEMBERS = TEAM_MEMBERS. APPEND BIKER TO BIKER_TAB. CALL METHOD BIKER->STATUS_LINE IMPORTING LINE = STATUS_LINE. APPEND STATUS_LINE TO STATUS_LIST. ENDDO. ENDMETHOD. ******************************************************************* METHOD SELECTION. CLEAR BIKER_SELECTION. DO. READ LINE SY-INDEX. IF SY-SUBRC <> 0. EXIT. ENDIF. IF SY-LISEL+0(1) = 'X'. READ TABLE BIKER_TAB INTO BIKER INDEX SY-INDEX. APPEND BIKER TO BIKER_SELECTION. ENDIF. ENDDO. CALL METHOD WRITE_LIST. ENDMETHOD. ******************************************************************* METHOD EXECUTION. CHECK NOT BIKER_SELECTION IS INITIAL. LOOP AT BIKER_SELECTION INTO BIKER. CALL METHOD BIKER->SELECT_ACTION. CALL METHOD BIKER->STATUS_LINE IMPORTING LINE = STATUS_LINE. MODIFY TABLE STATUS_LIST FROM STATUS_LINE.

ENDLOOP. CALL METHOD WRITE_LIST. ENDMETHOD. ******************************************************************* METHOD WRITE_LIST. SET TITLEBAR 'TIT'. SY-LSIND = 0. SKIP TO LINE 1. POSITION 1. LOOP AT STATUS_LIST INTO STATUS_LINE. WRITE: / STATUS_LINE-FLAG AS CHECKBOX, STATUS_LINE-TEXT1, STATUS_LINE-ID, STATUS_LINE-TEXT2, STATUS_LINE-TEXT3, STATUS_LINE-GEAR, STATUS_LINE-TEXT4, STATUS_LINE-SPEED. ENDLOOP. ENDMETHOD. ******************************************************************* ENDCLASS.

El constructor esttico es ejecutado antes de que la clase c_team se use por primera vez en el programa. El constructor esttico llama a la dynpro 100 y fija el atributo esttico team_members al valor metido por el usuario en el programa. Este atributo tiene el mismo valor para todas las instancias de la clase c_team. El constructor dependiente de instancia es ejecutado justo despus de que cada instancia de la clase c_team es creada. Para contar el nmero de instancias creadas de c_team se usa el atributo esttico counter. El atributo dependiente de instancia ID guarda el nmero de la instancia de la clase. El mtodo pblico dependiente de instancia create_team puede ser llamado por cualquier usuario de la clase con una variable referenciada a una instancia de la clase. Este mtodo se usa para crear instancias de la clase c_biker usando la variable referenciada privada biker en la clase c_team. Se tienen que pasar los dos parmetros de entrada team_id y members al constructor dependiente de instancia de la clase c_biker en la sentencia CREATE OBJECT. Las referencias a las instancias recin creadas son insertadas en la tabla interna privada biker_tab. Despus de que el mtodo haya sido ejecutado cada lnea de la tabla interna contiene una referencia a una instancia de la clase c_biker. Estas referencias son slo visibles dentro de la clase c_team. Los usuarios externos no pueden acceder a los objetos de la clase c_biker. El mtodo create_team tambin llama al mtodo status_line de cada nuevo objeto creado y usa el rea de trabajo status_line para rellenar la tabla interna privada status_list con el parmetro de salida line. El mtodo pblico dependiente de instancia selection puede ser llamado por cualquier usuario de la clase que tenga una variable referenciada con una referencia a ua instancia de la clase. El mtodo selecciona todas las lineas en la lista actual en las cuales el checkbox en la primera columna est seleccionado. Para esas lineas se copian las correspondientes variables referenciadas desde la tabla biker_tab en una tabla interna

privada adicional llamada biker_selection. Selection llama entonces al mtodo privado write_list el cual despliega la lista. El mtodo pblico dependiente de instancia execution puede ser llamado por cualquiera de los usuarios de la clase que tenga una variable referenciada con una referencia a una instancia de la clase. El mtodo llama a los dos mtodos select_action y status_line para cada instancia de la clase c_biker para la cual hay una referencia en la tabla biker_selection. La linea de la tabla status_list con la misma clave que el componente id en el rea de trabajo status_line es sobreescrita y desplegada por el mtodo privado write_list. El mtodo privado dependiente de instancia write_list slo puede ser llamado desde los mtodos de la clase c_team. Este mtodo se usa para desplegar la tabla interna privada status_list en la lista bsica (sy-lsind = 0, tratamiento listas, indice lista bifurcacin) del programa. Los mtodos de la clase c_biker van en otro bloque:

CLASS C_BIKER IMPLEMENTATION. ******************************************************************* METHOD CONSTRUCTOR. COUNTER = COUNTER + 1. ID = COUNTER - MEMBERS * ( TEAM_ID - 1). CREATE OBJECT BIKE. ENDMETHOD. ******************************************************************* METHOD SELECT_ACTION. DATA ACTIVITY TYPE I. TIT2 = 'Select action for BIKE'. TIT2+24(3) = ID. CALL SELECTION-SCREEN 200 STARTING AT 5 15. CHECK NOT SY-SUBRC GT 0. IF GEARUP = 'X' OR GEARDOWN = 'X'. IF GEARUP = 'X'. ACTIVITY = 1. ELSEIF GEARDOWN = 'X'. ACTIVITY = -1. ENDIF. ELSEIF DRIVE = 'X'. ACTIVITY = 2. ELSEIF STOP = 'X'. ACTIVITY = 3. ENDIF. CALL METHOD BIKER_ACTION( ACTIVITY). ENDMETHOD. ******************************************************************* METHOD BIKER_ACTION. CASE ACTION. WHEN -1 OR 1. CALL METHOD BIKE->CHANGE_GEAR EXPORTING CHANGE = ACTION

RECEIVING GEAR = GEAR_STATUS EXCEPTIONS GEAR_MAX = 1 GEAR_MIN = 2. CASE SY-SUBRC. WHEN 1. MESSAGE I315(AT) WITH 'BIKE' ID ' is already at maximal gear!'. WHEN 2. MESSAGE I315(AT) WITH 'BIKE' ID ' is already at minimal gear!'. ENDCASE. WHEN 2. CALL METHOD BIKE->DRIVE IMPORTING VELOCITY = SPEED_STATUS. WHEN 3. CALL METHOD BIKE->STOP IMPORTING VELOCITY = SPEED_STATUS. ENDCASE. ENDMETHOD. ******************************************************************* METHOD STATUS_LINE. LINE-FLAG = SPACE. LINE-TEXT1 = 'Biker'. LINE-ID = ID. LINE-TEXT2 = 'Status:'. LINE-TEXT3 = 'Gear = '. LINE-GEAR = GEAR_STATUS. LINE-TEXT4 = 'Speed = '. LINE-SPEED = SPEED_STATUS. ENDMETHOD. ******************************************************************* ENDCLASS.

El constructor dependiente de instancia es ejecutado justo despus de que se cree cada instancia de la clase c_biker. Se usa para contar el nmero de instancias de la clase c_biker en el contador counter y para asignar el correspondiente nmero al atributo dependiente de instancia id de cada instancia de la clase. El constructor tiene dos parmetros de entrada, team_id y members los cuales tienen que pasarse en la sentencia create object cuando se crea una instancia de la clase c_biker. La referencia en la variable referenciada privada bike de cada instancia c_biker apunta a la correspondiente instancia de la clase c_bicycle. El mtodo pblico dependiente de instancia select_action puede ser llamado por cualquier usuario de la clase que tenga una variable referenciada con una referencia que apunte a una instancia de la clase. El mtodo llama a la pantalla de seleccin 200 y analiza la entrada del usuario. Despus de esto llama al mtodo privado de la misma clase biker_action. La llamada al mtodo usa la forma abreviada para pasar el parmetro real activity al parmetro formal action. El mtodo privado dependiente de instancia biker_action slo puede ser llamado desde los mtodos de la clase c_biker. El mtodo llama a otros mtodos en la instancia de la clase c_bicycle a la cual la referencia en la variable referenciada bike est apuntando, dependiendo del valor en el parmetro de entrada action.

El mtodo pblico dependiente de instancia status_line puede ser llamado por cualquier usuario de la clase que tenga una variable referenciada con una referencia a una instancia de la clase. El mtodo rellena la estructura de salida line con los actuales valores de los atributos de la correspondiente instancia. Los mtodos de la clase c_bicycle van en otro bloque: CLASS C_BICYCLE IMPLEMENTATION. ******************************************************************* METHOD DRIVE. SPEED = SPEED + GEAR * 10. VELOCITY = SPEED. ENDMETHOD. ******************************************************************* METHOD STOP. SPEED = 0. VELOCITY = SPEED. ENDMETHOD. ******************************************************************* METHOD CHANGE_GEAR. GEAR = ME->GEAR. GEAR = GEAR + CHANGE. IF GEAR GT MAX_GEAR. GEAR = MAX_GEAR. RAISE GEAR_MAX. ELSEIF GEAR LT MIN_GEAR. GEAR = MIN_GEAR. RAISE GEAR_MIN. ENDIF. ME->GEAR = GEAR. ENDMETHOD. ******************************************************************* ENDCLASS. El mtodo pblico dependiente de instancia drive puede ser llamado por cualquier usuario que tenga una variable referenciada con una referencia a una instancia de la clase. El mtodo cambia el valor del atributo privado speed y lo devuelve en el parmetro de salida velocity. El mtodo pblico dependiente de instancia stop puede ser llamado por cualquier usuario que tenga una variable referenciada con una referencia a una instancia de la clase. El mtodo cambia el valor del atributo privado speed y lo devuelve en el parmetro de salida velocity. El mtodo pblico dependiente de instancia change_gear puede ser llamado por cualquier usuario que tenga una variable referenciada con una referencia a una instancia de la clase. El mtodo cambia el valor del atributo privado gear. Debido a que el parmetro formal con el mismo nombre oculta el atributo en el mtodo, el atributo tiene que ser direccionado con la referencia a s mismo me->gear. Utilizacin en programas

Ahora veremos cmo se pueden usar en un programa las clases que hamos declarado e implementado. Las declaraciones de las pantallas de seleccin, de las clases locales y la implementacin de los mtodos deben ser tambin parte del programa. REPORT OO_METHODS_DEMO NO STANDARD PAGE HEADING. ******************************************************************* * Declarations and Implementations ******************************************************************* ... ******************************************************************* * Global Program Data ******************************************************************* TYPES TEAM TYPE REF TO C_TEAM. DATA: TEAM_BLUE TYPE TEAM, TEAM_GREEN TYPE TEAM, TEAM_RED TYPE TEAM. DATA COLOR(5). ******************************************************************* * Program events ******************************************************************* START-OF-SELECTION. CREATE OBJECT: TEAM_BLUE, TEAM_GREEN, TEAM_RED. CALL METHOD: TEAM_BLUE->CREATE_TEAM, TEAM_GREEN->CREATE_TEAM, TEAM_RED->CREATE_TEAM. SET PF-STATUS 'TEAMLIST'. WRITE ' Select a team! ' COLOR = 2. *-----------------------------------------------------------------AT USER-COMMAND. CASE SY-UCOMM. WHEN 'TEAM_BLUE'. COLOR = 'BLUE '. FORMAT COLOR = 1 INTENSIFIED ON INVERSE ON. CALL METHOD TEAM_BLUE->SELECTION. WHEN 'TEAM_GREEN'. COLOR = 'GREEN'. FORMAT COLOR = 5 INTENSIFIED ON INVERSE ON. CALL METHOD TEAM_GREEN->SELECTION. WHEN 'TEAM_RED'. COLOR = 'RED '. FORMAT COLOR = 6 INTENSIFIED ON INVERSE ON. CALL METHOD TEAM_RED->SELECTION. WHEN 'EXECUTION'. CASE COLOR. WHEN 'BLUE '. FORMAT COLOR = 1 INTENSIFIED ON INVERSE ON.

CALL METHOD TEAM_BLUE->SELECTION. CALL METHOD TEAM_BLUE->EXECUTION. WHEN 'GREEN'. FORMAT COLOR = 5 INTENSIFIED ON INVERSE ON. CALL METHOD TEAM_GREEN->SELECTION. CALL METHOD TEAM_GREEN->EXECUTION. WHEN 'RED '. FORMAT COLOR = 6 INTENSIFIED ON INVERSE ON. CALL METHOD TEAM_RED->SELECTION.
CALL METHOD TEAM_RED->EXECUTION. ENDCASE. ENDCASE. *******************************************************************

El programa tiene tres variables referenciadas a la clase c_team. Se crean tres objetos de la clase a los cuales apuntan las tres variables referenciadas. En cada objeto se llama al mtodo create_team. El mtodo class_constructor de la clase c_team es ejecutado antes de que el primero de los objetos sea creado. El estatus teamlist para la lista bsica permite al usuario elegir una de las cuatro funciones. Cuando el usuario escoge una de las funciones, el evento AT USER-COMMAND es disparado y los mtodos pblicos son llamados en una de las tres instancias de c_team, dependiendo de la eleccin del usuario. El usuario puede cambiar el estado de un objeto seleccionando la correspondiente linea en la lista. HERENCIA La herencia permite crear una nueva clase a partir de una nueva existente heredando la nueva clase sus propiedades. Esto se realiza aadiendo la adicin INHERITING FROM a la sentencia de definicin de la clase: CLASS <subclass> DEFINITION INHERITING FROM <superclass>. La nueva clase <subclass> hereda todos los componentes de la clase ya existente <superclase>. La nueva clase se conoce como la subclase de la clase de la que procede. La clase original se conoce como la superclase de la nueva clase. Si no se aade ninguna declaracin a la subclase, esta contiene los mismos componentes que la superclase. De cualquier manera, slo los componentes pblicos y privados de la superclase son visibles en la subclase. Aunque los componentes privados de la superclase existen en la subclase, no son visibles. Se pueden declarar componentes privados en una subclase que tengan los mismos nombres que componentes privados de la superclase. Cada clase trabaja con sus propios componentes privados. Los mtodos que una subclase hereda de una superclase usan los atributos privados de la superclase y no ningn componente privado de la subclase con el mismo nombre. Si la superclase no tiene una seccin privada, la subclase es una rplica exacta de la superclase. De todos modos podemos aadir nuevos componentes a la subclase. Esto permite convertir a la subclase en una versin especializada de la superclase. Si una subclase es ella misma una superclase de otras clases, se est introduciendo un nuevo nivel de especializacin. Una clase puede tener ms de una subclase de las cuales es superclase, pero slo puede tener una superclase de la cual es subclase. Esto se conoce como herencia simple, en contraposicin con la herencia mltiple donde una clase hereda de varias superclases. Cuando una subclase hereda de una superclase que a su vez hereda de otra superclase de la cual es subclase, se forma

una estructura de rbol en la cual el grado de especializacin aumenta con cada nivel jerrquico que se aada. A la inversa, las clases se hacen ms generales hasta que se alcanza el nodo raiz del rbol de herencia. El nodo raiz de todos los rboles de herencia en ABAP Objects es la clase predefinida vaca OBJECT. Esta es la ms general de todas las clases posibles ya que no contiene ni atributos ni mtodos. Cuando se define una nueva clase no se tiene que especificar explcitamente esta clase como superclase, esta relacin est definida implcitamente. Dentro de un rbol de herencia, dos nodos adyacentes son la superclase y la subclase directamente uno de otro. Las declaraciones de componentes en una subclase estn distribuidas a travs de todos los niveles superiores en el rbol de herencia. Redefinicin de mtodos Todas las subclases contienen los componentes de todas las clases existentes entre ellas mismas y el nodo raiz del rbol de herencia. La visibilidad de un componente no puede ser cambiada nunca. En cambio se puede usar la adicin REDEFINITION en la sentencia METHODS para redefinir un mtodo pblico o protegido dependiente de instancia en una subclase y hacer que realice una funcin ms especializada. Cuando se redefine un mtodo no se puede cambiar su interface, el mtodo mantiene el mismo nombre y la misma interface de parmetros, pero tiene una nueva implementacin. La declaracin y la implementacin de un mtodo en una superclase no se ve afectada cuando se redefine un mtodo en una subclase. La implementacin de la redefinicin en la subclase oculta la implementacin original en la superclase. Cualquier referencia que apunte a un objeto de la subclase usa el mtodo redefinido, incluso si la referencia fue definida con referencia a la superclase. Esto se aplica particularmente a la referencia a s mismo me->. Si por ejemplo un mtodo M1 de una superclase contiene una llamada CALL METHOD [ME->]M2 y M2 est redefinido en una subclase, la llamada a M1 desde una instancia de la superclase har que el mtodo original M2 sea llamado, mientras que la llamada a M1 desde una instancia de la subclase har que el mtodo redefinido M2 sea llamado (llaman a distintos mtodos auquen tengan el mismo nombre). Dentro de un mtodo redefinido se puede usar la referencia SUPER-> para acceder al mtodo oculto. Esto permite usar la funcionalidad existente en el mtodo de la superclase sin tener que codificarla de nuevo en la subclase. Clases y mtodos abstractos y finales Las adiciones ABSTRACT y FINAL en las sentencias METHODS y CLASS permiten definir mtodos o clases abstractos y finales. Un mtodo abstracto se define en una clase abstracta y no puede ser implementado en esa clase, tiene que ser implementado en una subclase de la clase. Las clases abstractas no pueden ser instanciadas. Un mtodo final no puede ser redefinido en una subclase. Las clases finales no pueden tener subclases, son las que finalizan el rbol de herencia. Referencias a subclases y polimorfismo Las variables referenciadas con referencia a una superclase o a una interface tambin pueden contener referencias a algunas de sus subclases. Debido a que las subclases contienen todos los componentes de todas sus superclases y dado que las interfaces de

los mtodos no pueden ser cambiadas, una variable referenciada definida con referencia a una superclase o a una interface implementada por una superclase, puede contener referencias a instancias de cualquiera de las subclases. En particular, se pueden definir variables con referencia a la clase genrica OBJECT para as poder almacenar cualquier referencia a objetos en ellas. Cuando se crea un objeto con la sentencia CREATE OBJECT y una variable referenciada con referencia a una subclase, se puede usar la adicin TYPE para crear una instancia de la subclase a la cual apuntar la referencia en la variable referenciada Un usuario esttico puede usar una variable referenciada para acceder a los componentes visibles de la superclase a la cual la variable referenciada apunta. Si se redefine un mtodo dependiente de instancia en una o ms subclases, se puede usar una nica variable referenciada para llamar a las diferentes implementaciones de los mtodos, dependiendo de la posicin en el rbol de herencia del objeto referenciado. Este concepto de que diferentes clases pueden tener la misma interface y por lo tanto se puede acceder a ellas usando variables referenciadas con un nico tipo se llama polimorfismo. Nombres de los componentes Las subclases contienen todos los componentes de todas sus superclases dentro del rbol de herencia. De esos componentes, slo los componentes pblicos y protegidos son visibles. Todos los componentes pblicos y protegidos dentro de un rbol de herencia tienen que tener nombres nicos. Por otro lado, los nombres de los componentes privados deben ser nicos slo dentro de su clase. Cuando se redefinen los mtodos, la nueva implementacin oculta al mtodo de la superclase con el mismo nombre, pero la nueva definicin sustituye a la anterior de manera que el nombre del mtodo sigue siendo nico. Se puede usar la pseudoreferencia SUPER-> para acceder a la definicin de un mtodo en una superclase que ha sido oscurecida por la redefinicin en la subclase. Herencia y atributos estticos Al igual que todos los componentes, los atributos estticos slo existen una vez en cada rbol de herencia. Una subclase puede acceder a los atributos estticos pblicos y protegidos de todas sus superclases. A la inversa, una superclase comparte sus atributos pblicos y protegidos con todas sus subclases. En trminos de herencia, los atributos estticos no estn asignados a una nica clase, si no que forman parte de todo el rbol de herencia. Se pueden cambiar desde fuera de la clase usando el componente elegido con algn nombre de alguna de las clases del rbol de herencia, o desde dentro de cualquier clase en la que los atributos sean compartidos, o sea, dentro de cualquier clase del rbol de herencia. Son visibles en todas las clases del rbol de herencia. Cuando se direcciona un atributo esttico que pertenece a una parte del rbol de herencia, siempre se direcciona a la clase en la que el atributo es declarado, independientemente de la clase especificada en la seleccin de la clase. Esto es importante cuando se llama al constructor esttico de clases dentro de la herencia. Los constructores estticos son ejecutados la primera vez que se accede a una clase. Si se accede a un atributo esttico declarado en una superclase usando el nombre de la subclase, nicamente el constructor esttico de la superclase es ejecutado. Herencia y constructores

Hay una serie de reglas especiales que se aplican a los constructores dentro de la herencia. Constructores dependientes de instancia Cada clase tiene un constructor dependiente de instancia llamado CONSTRUCTOR. Esta es una excepcin a la regla de que los nombres de los componentes dentro de un rbol de herencia deben ser nicos. Los constructores dependientes de instancia de varias clases en un rbol de herencia son completamente independientes uno de otro. No se puede redefinir el constructor dependiente de instancia de una superclase en una subclase, ni llamar especficamente al mtodo con CALL METHOD CONSTRUCTOR, de manera que no pueden tener lugar conflictos con los nombres. El constructor dependiente de instancia de una clase es llamado por el sistema cuando se instancia la clase usando la sentencia CREATE OBJECT. Debido a que una subclase contiene todos los atributos visibles de sus superclases, los cuales pueden ser fijados por constructores dependientes de instancia, el constructor dependiente de instancia de una subclase tiene que asegurarse de que todos los constructores dependientes de instancia de todas las superclases tambin son llamados. Para que esto ocurra, el constructor dependiente de instancia de cada clase tiene que contener la sentencia CALL METHOD SUPER->CONSTRUCTOR. La nica excepcin a esta regla son las subclases directas del nodo raz OBJECT. En las superclases sin un constructor dependiente de instancia definido explcitamente, es llamado el constructor dependiente de instancia implcito. Cuando se llama a un constructor dependiente de instancia se deben proporcionar valores para todos los parmetros de la interface que no sean opcionales. Hay varias maneras de hacer esto: Usando la sentencia CREATE OBJECT Si la clase que se est instanciando tiene un constructor dependiente de instancia con una interface entonces se tienen que pasar los valores usando EXPORTING. Si la clase que se est instanciando no tiene explcitamente un constructor dependiente de instancia, se tiene que mirar en el rbol de herencia en el siguiente nivel por encima con un constructor dependiente de instancia explcitamente declarado. Si ste tiene una interface entonces se tienen que pasar los valores con EXPORTING. De otra manera no habra que pasarle valores. Usando la sentencia CALL METHOD SUPER->CONSTRUCTOR Si la superclase directa tiene un constructor dependiente de instancia con una interface entonces se tienen que pasar los valores usando EXPORTING. Si la superclase directa tiene un constructor dependiente de instancia sin interface entonces no se tienen que pasar parmetros. Si la superclase directa no tiene explcitamente un constructor dependiente de instancia se tiene que mirar en el rbol de herencia en el siguiente nivel por encima con un constructor dependiente de instancia explcitamente declarado. Si ste tiene una interface entonces se tienen que pasar los valores con EXPORTING. De otra manera no habra que pasarle valores. En ambos casos se tiene que mirar en el siguiente constructor dependiente de instancia explcitamente disponible y si tiene una interface pasarle los valores. Lo mismo se aplica al control de excepciones para los constructores dependientes de instancia. Cuando se trabaja con herencia se necesita un conocimiento preciso de todo el rbol de herencia. Cuando se instancia una clase en la parte de abajo del rbol de herencia se tienen que pasar los parmetros del constructor de clase ms cercano al nodo raiz.

El constructor dependiente de instancia de una subclase est dividido en dos partes por la sentencia CALL METHOD SUPER->CONSTRUCTOR. En las sentencias anteriores a la llamada el constructor se comporta como un mtodo esttico, esto es, no puede acceder a los atributos dependientes de instancia de su clase. No se puede acceder a los atributos dependientes de instancia hasta despus de la llamada. Por esto, las sentencias anteriores a la llamada se usan para determinar los parmetros reales para la interface del constructor dependiente de instancia de la superclase. Slo se pueden usar atributos estticos o datos locales para hacer esto. Cuando se instancia una subclase, los constructores dependientes de instancia son llamados jerrquicamente, el primer nivel anidado en el cual se direccionan atributos dependientes de instancia es el nivel ms alto de la superclase. Cuando se llega a los constructores de las clases de los niveles ms bajos, se pueden direccionar sucesivamente sus atributos dependientes de instancia. En un mtodo constructor, los mtodos de las subclases de la clase no son visibles. Si un constructor dependiente de instancia llama a un mtodo dependiente de instancia de la misma clase usando la referencia implcita a s mismo ME->, el mtodo es llamado como implementado en la clase del constructor dependiente de instancia y no en ninguna forma redefinida que pueda haber en la subclase que se quiere instanciar. Esto es una excepcin a la regla de que cuando se llaman mtodos dependientes de instancia el sistema siempre llama al mtodo implementado en la clase a cuya instancia la referencia est apuntando. Constructores estticos Cada clase tiene un constructor esttico llamado CLASS_CONSTRUCTOR. Lo referente a la nomenclatura de los componentes en el rbol de herencia se aplica igualmente a los constructores estticos como a los constructores dependientes de instancia. La primera vez que se accede a una subclase en un programa, su constructor esttico es ejecutado. De cualquier manera, antes de que pueda ser ejecutado, el constructor esttico de todas sus superclases debe haber sido ejecutado antes. Un constructor esttico slo puede ser llamado una vez por programa. Por lo tanto cuando se accede por primera vez a una subclase el sistema busca la superclase del siguiente nivel por encima cuyo constructor esttico an no haya sido ejecutado. Se ejecuta el constructor esttico de esa clase, seguido de todos los de las clases entre esa clase y la clase a la que accedemos. HERENCIA: VISIN DE CONJUNTO

La subclase c2 deriva de la superclase c1. En lo ms alto del rbol de herencia est la clase OBJECT.

La herencia simple consiste en que cada clase slo deriva directamente de una superclase, pero puede tener varias subclases directas. La clase vaca OBJECT es el nodo raz de cada rbol de herencia en ABAP Objects.

Este grfico muestra cmo variables referenciadas con referencia a una superclase pueden apuntar a objetos de sus subclases. Tenemos una instancia de la clase 3. Las variables referenciadas a clases cref1, cref2 y cref3 tienen el tipo de las clases 1, 2 y 3 respectivamente. Las tres variables referenciadas pueden apuntar a la clase 3, pero la variable cref1 slo puede acceder a los componentes pblicos de la clase 1, cref2 puede acceder a los componentes pblicos de las clases 1 y 2, y cref3 puede acceder a los componentes pblicos de todas las clases. Si se redefine un mtodo de una superclase en una subclase, se pueden usar variables referenciadas definidas con referencia a la superclase para direccionar objetos con diferente implementacin de mtodos. Cuando se direcciona la superclase, el mtodo tiene su implementacin original, pero cuando se direcciona la subclase, el mtodo tiene la nueva implementacin. El usar una misma variable referenciada para llamar a mtodos con el mismo nombre pero que se comportan distinto se conoce como polimorfismo. EJEMPLO DE HERENCIA
El siguiente ejemplo muestra el concepto de herencia en ABAP Objects. Una nueva clase counter_ten hereda de la clase ya existente counter. REPORT demo_inheritance. ******************************************************************* CLASS counter DEFINITION. PUBLIC SECTION. METHODS: set IMPORTING value(set_value) TYPE i, increment, get EXPORTING value(get_value) TYPE i. PROTECTED SECTION . DATA count TYPE i. ENDCLASS. CLASS counter IMPLEMENTATION. METHOD set. count = set_value. ENDMETHOD. METHOD increment. ADD 1 TO count. ENDMETHOD. METHOD get. get_value = count. ENDMETHOD. ENDCLASS. ******************************************************************* CLASS counter_ten DEFINITION INHERITING FROM counter. PUBLIC SECTION. METHODS increment REDEFINITION . DATA count_ten. ENDCLASS. CLASS counter_ten IMPLEMENTATION. METHOD increment. DATA modulo TYPE I. CALL METHOD super->increment . WRITE / count.

modulo = count mod 10. IF modulo = 0. count_ten = count_ten + 1. write count_ten. ENDIF. ENDMETHOD. ENDCLASS. ******************************************************************* DATA: count TYPE REF TO counter, number TYPE i VALUE 5. START-OF-SELECTION. CREATE OBJECT count TYPE counter_ten . CALL METHOD count->set EXPORTING set_value = number. DO 20 TIMES. CALL METHOD count->increment. ENDDO.

La clase counter_ten se deriva de la clase counter. Se redefine el mtodo increment. Para hacer esto se tiene que cambiar la visibilidad del atributo count de privado a protegido. El mtodo redefinido llama al mtodo oscurecido de la superclase usando la pseudoreferencia SUPER->. El mtodo redefinido es una especializacin del mtodo heredado. El ejemplo instancia la subclase. La variable referenciada que apunta a la subclase tiene el tipo de la superclase. Cuando el mtodo increment es llamado usando la referencia de la superclase, el sistema ejecuta el mtodo redefinido de la subclase. INTERFACES Las clases, sus instancias (los objetos) y el acceso a los objetos usando variables referenciadas son la base de la programacin orientada a objetos en ABAP. Adems, hay veces en las que es necesario para clases similares proporcionar funcionalidades similares pero que estn codificadas diferentes en cada clase, las cuales dan un punto de contacto comn con el usuario. Por ejemplo, podramos tener dos clases similares, cuenta corriente y cuenta de ahorro, las cuales tienen un mtodo para calcular las comisiones del ao. Las interfaces y nombres de los mtodos son los mismos pero la implementacin es diferente. El usuario de las clases y las instancias tiene que ser capaz de ejecutar el mtodo para todas las cuentas sin preocuparse del tipo de cada cuenta individual. ABAP Objects hace posible esto mediante el uso de las interfaces. Las interfaces son estructuras independientes que se pueden implementar en una clase para extender el mbito de esa clase. El mbitoespecfico de una clase viene definido por sus componentes y sus secciones de visibilidad. Por ejemplo, los componentes pblicos de una clase definen su mbito pblico, ya que todos sus atributos y los parmetros de los mtodos pueden ser utilizados por todos los usuarios. Los componentes protegidos de una clase definen su mbito en lo que se refiere a sus subclases. Las interfaces extienden el mbito de una clase aadiendo sus propios componentes a la seccin pblica. Esto permite a los usuarios acceder a diferentes clases por medio de un punto de contacto comn. Las interfaces junto con la herencia proporcionan uno de los pilares bsicos del polimorfismo, ya que permiten que un slo mtodo con una interface se comporte distinto en diferentes clases.

Definicin de interfaces Al igual que las clases, las interfaces se pueden definir o bien globalmente en el R/3 Repository o localmente en un programa ABAP. La definicin de una interface local es el cdigo existente entre las sentencias: INTERFACE <intf>. ENDINTERFACE. La definicin contiene la declaracin de todos los componentes (atributos, mtodos, eventos) de la interface. Se pueden definir los mismos componentes en una interface que en una clase. Los componentes de las interfaces no tienen que ser asiganados a ninguna seccin de visibilidad ya que automticamente pertenecen a la seccin pblica de la clase en la que la interface es implementada. Las interfaces no tienen una parte de implementacin ya que sus mtodos son implementados en la clase que implementa la interface. Implementacin de interfaces A diferencia de las clases, las interfaces no tienen instancias, en vez de eso, las interfaces son implementadas por las clases. Para implementar una interface en una clase se usa la sentencia INTERFACES <intf>. en la parte declarativa de la clase. Esta sentencia slo puede aparecer en la seccin pblica de la clase. Cuando se implementa una interface en una clase, los componentes de la interface se aaden al resto de componentes de la seccin pblica. Un componente <icomp> de una interface <intf> puede ser direccionado como si fuese un miembro de la clase bajo el nombre <intf~icomp>. La clase tiene que implementar los mtodos de todas las interfaces implementadas en ella. La parte de implementacin de la clase debe contener la implementacin de cada mtodo de la interface <imeth>: METHOD <intf~imeth>. ENDMETHOD. Las interfaces pueden ser implementadas por diferentes clases. Cada una de las clases es ampliada con el mismo conjunto de componentes, aunque los mtodos de la interface pueden ser implementados de manera distinta en cada clase. Las interfaces permiten usar diferentes clases de una manera uniforme aprovechando las referencias a las interfaces (polimorfismo). Por ejemplo, las interfaces implementadas en diferentes clases amplan el mbito pblico de cada clase en el mismo conjunto de componentes. Si la clase no tiene ningn componente pblico especfico de ella misma entonces la interface describe completamente el mbito pblico de la clase. Referencias a interfaces Las variables referenciadas permitan acceder a los objetos. En lugar de crear variables referenciadas con referencia a una clase, se pueden crear con referencia a una interface. Este tipo de variables referenciadas puede contener referencias a los objetos de las clases que implementen esa interface.

Para definir una referencia a una interface se usa la adicin TYPE REF TO <intf> en las sentencias DATA o TYPES. <intf> tiene que ser una interface que haya sido declarada en el programa antes de que esta declaracin tenga lugar. Una variable referenciada con el tipo referenciado a una interface se llama variable referenciada a una interface, o referencia a interface simplemente. Una referencia a interface <iref> permite al usuario usar <iref>-><icomp> para acceder a todos los componentes visibles de la interface <icomp> del objeto al cual la referencia est apuntando. Esto permite al usuario acceder a todos los componentes del objeto que fueron aadidos a su definicin al implementar la interface. Direccionar objetos usando referencias a interfaces Para crear un objeto de la clase <class> primero se tiene que haber declarado una variable referenciada <cref> con referencia a la clase. Si la clase <class> implementa una interface <intf>, se puede usar la siguiente asignacin entre la variable referenciada a la clase <cref> y una referencia a interface <iref> para hacer que la referencia a interface <iref> apunte al mismo objeto que la referencia a clase en <cref>: <iref> = <cref>. Si la interface <intf> contiene un atributo dependiente de instancia <attr> y un mtodo dependiente de instancia <meth> se puede direccionar los componentes de la interface como sigue: Usando la variable referenciada a una clase <cref>: Para acceder a un atributo <attr>: <cref>-><intf~attr> Para acceder al mtodo <meth>: CALL METHOD <cref>-><intf~meth> Usando la variable referenciada a una interface <iref>: Para acceder a un atributo <attr>: <iref>-><attr> Para acceder al mtodo <meth>: CALL METHOD <iref>-><meth> Siempre que los componentes estticos de las interfaces estn implicados slo se puede usar el nombre de la interface para acceder a las constantes: Para acceder a una constante <const>: < intf>=><const> Para todos los dems componentes estticos de una interface, slo se pueden usar referencias a objetos o la clase que implementa la interface: Para acceder a un atributo esttico <attr>: <class>=><intf~attr> Para llamar a un mtodo esttico <meth>: CALL METHOD <class>=><intf~meth> Asignacin usando referencias a interfaces Al igual que las referencias a clases, se pueden asignar referencias a interfaces a diferentes variables referenciadas. Tambin se pueden realizar las asignaciones entre variables referenciadas a clases y a interfaces. Cuando se usa la sentencia MOVE o el operador de asignacin (=) para asignar variables referenciadas, el sistema debe ser capaz de reconocer en la comprobacin de la sintaxis si la asignacin es posible. Supongamos que tenemos una referencia a clase <cref> y tres referencias a interfaces <iref>, <iref1> y <iref2>. Las siguientes asignaciones con referencias a interfaces pueden ser comprobadas estticamente: <iref1> = <iref2>. Ambas referencias a interfaces deben referirse a la misma interface o la interface de <iref1> tiene que tener a la interface <cref2> como componente.

<iref> = <cref>. La clase de la referencia a clase <cref> tiene que implementar la interface de la referencia a interface <iref> <cref> = <iref>. La clase de <cref> tiene que ser la clase predefinida vaca OBJECT. En todos lo dems casos se tiene que trabajar con la sentencia MOVE ?TO o con el operador de asignacin ?= en lugar de los usados antes. Cuando se usan estos dos operadores no se realiza el chequeo esttico. En su lugar el sistema comprueba en tiempo de ejecucin si la referencia al objeto apunta a un objeto al cual puede apuntar. Si la asignacin es posible el sistema la realiza y si no lo es genera el error en tiempo de ejecucin MOVE_CAST_ERROR . Siempre que se asigne una referencia a una interface a una referencia a una clase y esta referencia no refiere a la clase OBJECT se tiene que usar este tipo de asignacin: <cref> ?= <iref>. Para que esta asignacin ocurra correctamente el objeto al cual apunta <iref> tiene que ser un objeto de la misma clase que el tipo de la variable referenciada a clase <cref>. HERENCIA: VISIN DE CONJUNTO.

INTERFACE I1. DATA: A1 METHODS: M1 EVENTS : E1 ENDINTERFACE. CLASS c1 DEFINITION. PUBLIC SECTION. INTERFACES I1. DATA: A1 PROTECTED SECTION. PRIVATE SECTION. ENDCLASS. CLASS c1 IMPLEMENTATION. METHOD I1~M1. ENDMETHOD. ENDCLASS

El diagrama muestra la definicin de la interface local I1 y la declaracin y la implementacin de una clase local c1 que implementa la interface I1 en su seccin pblica. El mtodo de la interface I1~M1 se implementa en la clase. No se pueden implementar interface en ninguna otra seccin de visibilidad. Los componentes de la interface amplan el mbito pblico de la clase. EJEMPLO DE INTERFACES

El siguiente ejemplo muestra cmo se puede usar una interface para implementar dos contadores diferentes pero que se pueden llamar de la misma manera. ******************************************************************* INTERFACE I_COUNTER. METHODS: SET_COUNTER IMPORTING VALUE(SET_VALUE) TYPE I, INCREMENT_COUNTER, GET_COUNTER EXPORTING VALUE(GET_VALUE) TYPE I. ENDINTERFACE. ******************************************************************* CLASS C_COUNTER1 DEFINITION. PUBLIC SECTION. INTERFACES I_COUNTER. PRIVATE SECTION. DATA COUNT TYPE I. ENDCLASS. ******************************************************************* CLASS C_COUNTER1 IMPLEMENTATION. METHOD I_COUNTER~SET_COUNTER. COUNT = SET_VALUE. ENDMETHOD. METHOD I_COUNTER~INCREMENT_COUNTER. ADD 1 TO COUNT. ENDMETHOD. METHOD I_COUNTER~GET_COUNTER. GET_VALUE = COUNT. ENDMETHOD. ENDCLASS. ******************************************************************* CLASS C_COUNTER2 DEFINITION. PUBLIC SECTION. INTERFACES I_COUNTER. PRIVATE SECTION. DATA COUNT TYPE I. ENDCLASS. ******************************************************************* CLASS C_COUNTER2 IMPLEMENTATION. METHOD I_COUNTER~SET_COUNTER. COUNT = ( SET_VALUE / 10) * 10. ENDMETHOD. METHOD I_COUNTER~INCREMENT_COUNTER. IF COUNT GE 100. MESSAGE I042(00). COUNT = 0. ELSE. ADD 10 TO COUNT. ENDIF. ENDMETHOD. METHOD I_COUNTER~GET_COUNTER.

GET_VALUE = COUNT. ENDMETHOD. ENDCLASS. ******************************************************************* La interface i_counter tiene tres mtodos, set_counter, increment_counter y get_counter. Las clases c_counter1 y c_counter2 implementan la interface en sus secciones pblicas. Ambas clases tienen que implementar los tres mtodos de la interface en su parte de implementacin. c_counter1 es una clase para contadores que pueden tener un valor inicial y son incrementados de uno en uno. c_counter2 es una clase para contadores que slo pueden ser incrementados de diez en diez. Ambas clases tienen el mismo aspecto visto desde el exterior. Su interface con el exterior est completamente definida por la interface ya que no hay componentes adicionales en ninguno de los mtodos. DATA cref1 TYPE REF TO c_counter1. DATA cref2 TYPE REF TO c_counter2. DATA iref TYPE REF TO i_counter. Se declaran dos variables referenciadas cref1 y cref2,a las clases c_counter1 y c_counter2 respectivamente. Tambin se declara una variable referenciada iref a la interface i_counter. Los valores de todas las referencias son initial. DATA cref1 TYPE REF TO c_counter1. DATA cref2 TYPE REF TO c_counter2. DATA iref TYPE REF TO i_counter. CREATE OBJECT: cref1, cref2. La sentencia CREATE OBJECT crea un objeto de cada clase a los cuales apuntan las referencias en cref1 y cref2. DATA cref1 TYPE REF TO c_counter1. DATA cref2 TYPE REF TO c_counter2. DATA iref TYPE REF TO i_counter. CREATE OBJECT: cref1, cref2. iref = cref1. Cuando la referencia de cref1 se asigna a iref, la referencia en iref apunta tambin al objeto con nombre interno c_counter<1>. DISPARAR Y MANEJAR EVENTOS En ABAP Objects hay ciertos mtodos que se conocen como disparadores (triggers) y otros que se conocen como manejadores (handlers). Los triggers son los mtodos que disparan un evento, mientras que los handlers son los mtodos que se ejecutan cuando ocurre un evento. Eventos disparadores Para disparar un evento una clase tiene que: declarar el evento en la parte declarativa

disparar el evento en uno de sus mtodos. Declaracion de eventos Los eventos se declaran en la parte declarativa de una clase o en una interface. Para declarar eventos dependientes de instancia se usa la sentencia: EVENTS <evt> EXPORTING... VALUE(<ei>) TYPE type [OPTIONAL].. Para declarar eventos estticos se usa la sentencia: CLASS-EVENTS <evt>... Ambas sentencias tienen la misma sintaxis. Cuando se declara un evento se puede usar la adicin EXPORTING para especificar parmetros que se pasan al manejador del evento. Los parmetros se pasan siempre por valor. Los eventos dependientes de instancia siempre contienen el parmetro implcito SENDER, el cual tiene el tipo de una referencia al tipo o a la interface en la cual el evento es declarado. Disparar eventos Un evento dependiente de instancia en una clase puede ser disparado por cualquier mtodo en la clase. Los eventos estticos son disparados por mtodos estticos. Para disparar un evento en un mtodo se usa la siguiente sentencia: RAISE EVENT <evt> EXPORTING... <ei> = <f i>... Por cada parmetro formal <ei> que no est definido como opcional se tiene que pasar el correspondiente parmetro real <f i> en la adicin EXPORTING. La referencia a s mismo ME is pasada automticamente al parmetro implcito SENDER. Eventos manejadores Los eventos se usan para ejecutar una serie de mtodos. Estos mtodos tienen que: estar definidos como eventos manejadores (handler) de ese evento estar registrados en tiempo de ejecucin para el evento. Declaracin de mtodos manejadores de eventos Una clase puede contener mtodos manejadores de eventos para eventos tanto de su propia clase como de otras clases. Para declarar un mtodo manejador de eventos dependiente de instancia se usa la siguiente sentencia: METHODS <meth> FOR EVENT <evt> OF <cif> IMPORTING.. <ei>.. Para mtodos estticos se usa la misma sentencia con CLASS-METHODS en vez de METHODS. <evt> es un evento declarado en la clase o en la interface <cif>. La interface de un mtodo manejador de eventos slo puede contener parmetros formales definidos en la declaracin del evento. Los atributos de los parmetros tambin

son adoptados por el evento. El mtodo manejador de eventos no tiene por que usar todos los parmetros pasados en la sentencia RAISE EVENT. Si se quiere usar tambin el parmetro implcito SENDER, se tiene que listar en la interface. Este parmetro permite al manejador dependiente de instancia acceder al disparador para por ejemplo permitir devolver resultados. Si se declara un mtodo manejador de eventos en una clase quiere decir que las instancias de la clase o la misma clase va a ser en principio capaz de manejar un evento disparado en un mtodo. Registro de mtodos manejadores de eventos Para permitir a un mtodo manejador de eventos reaccionar a un evento, se tiene que determianr en tiempo de ejecucin el disparador al cual va a reaccionar. Esto se hace con la siguiente sentencia: SET HANDLER... <hi>... [FOR]... Esta sentencia relaciona los mtodos manejadores de eventos con sus correspondientes mtodos. Hay cuatro tipos diferentes de eventos: Eventos dependientes de instancia declarados en una clase. Eventos dependientes de instancia declarados en una interface. Eventos estticos declarados en una clase. Eventos estticos declarados en una interface. La sintaxis y el efecto de la sentencia SET HANDLER depende de cual de los cuatro casos de arriba tenga lugar. Para un evento dependiente de instancia se tiene que usar la adicin FOR para especificar la instancia para la cual se quiere registrar el manejador. Se puede especificar una sla instancia como disparador usando una variable referenciada <ref>: SET HANDLER... <hi>...FOR <ref>. o se puede registrar el manejador para todas las instancias que puedan disparar el evento: SET HANDLER... <hi>...FOR ALL INSTANCES. En este caso el registro se aplica incluso a las instancias que an no han sido creadas cuando se registra el manejador. No se puede usar la adicin FOR para los eventos estticos: SET HANDLER... <hi>... El registro se aplica automticamente a la clase entera o a todas las clases que implementan la interface que contiene el evento esttico. En el caso de las interfaces, el registro tambin se aplica a las clases que an no han sido cargadas cuando el manejador se registra. Coordinacin en el manejo de eventos Despus de la sentencia RAISE EVENT, todos los mtodos manejadores registrados son ejecutados antes de que la siguiente sentencia sea procesada (manejo de eventos sincrnico). Si un mtodo manejador de eventos desencadena eventos, los correspondientes mtodos manejadores de eventos son ejecutados antes de que el

mtodo manejador original continue. Para evitar la posibilidad de un bucle infinito, actualmente los eventos slo se pueden anidar 64 niveles. Los mtodos manejadores de eventos son ejecutados en el orden en el que son registrados. Debido a que los manejadores de eventos son registrados dinmicamente, no se puede saber el orden en el que sern procesados. Por esto se deben programar todos los manejadores de eventos como si se fuesen a ejecutar todos simultneamente. EVENTOS: VISIN DE CONJUNTO Tenemos dos clases c1 y c2: La clase c1 contiene un evento e1, el cual es desencadenado por el mtodo m1. La clase c2 contiene un mtodo m2 el cual responde al evento e1 de la clase c1. CLASE DISPARADORA DEL EVENTO CLASS C1 DEFINITION. PUBLIC SECTION. EVENTS E1 EXPORTING VALUE(P1) TYPE I. METHODS M1. PRIVATE SECTION. DATA A1 TYPE I. ENDCLASS. CLASS C1 IMPLEMENTATION. METHOD M1. A1 = RAISE EVENT E1 EXPORTING P1 = A1. ENDMETHOD. ENDCLASS. CLASE MANEJADORA DEL EVENTO CLASS C2 DEFINITION. PUBLIC SECTION. METHODS M2 FOR EVENT E1 OF C1 IMPORTING P1. PRIVATE SECTION. DATA A2 TYPE I. ENDCLASS. CLASS C2 IMPLEMENTATION. METHOD M2. A2 = P1. ENDMETHOD. ENDCLASS.

El registro del manejador se hara como sigue: DATA r1 TYPE REF TO c_1.

DATA h1 TYPE REF TO c_2. DATA h2 TYPE REF TO c_2. CREATE OBJECT: r1, h1, h2. SET HANDLER h1->m2 h2->m2 FOR r1. CALL METHOD r1->m1.

El programa crea una instancia de la clase c1 y dos de la clase c2. Los valores de las variables referenciadas r1, h1 y h2 apuntan a estas instancias. La sentencia SET HANDLER crea una tabla de manejadores invisible al usuario para cada evento para el cual un mtodo manejador ha sido registrado. Esta tabla contiene los nombres de los mtodos manejadores de eventos y de las referencias de las instancias registradas. Las entradas de esta tabla son administradas dinmicamente por la sentencia SET HANDLER. Una referencia a una instancia en esta tabla es como una referencia en una variable referenciada. En otras palabras, cuentan como utilizaciones de la instancia, lo cual afecta directamente al tiempo de vida de la instancia. Por ejemplo, las instancias C2<1> y C2<2> no son borradas totalmente aunque las variables h1 y h2 sean inicializadas debido a que continuan registradas en la tabla de manejadores. Para los eventos estticos, el sistema crea una tabla de manejadores independiente de instancia para la clase dada. Cuando un evento es desencadenado, el sistema busca en la tabla correspondiente y ejecuta el mtodo en las instancias adecuadas (o en la clase correspondiente si se trata de un mtodo manejador esttico. EVENTOS: EJEMPLO El siguiente ejemplo muestra cmo se trabaja con eventos en ABAP Objects:

REPORT demo_class_counter_event. ******************************************************************* CLASS counter DEFINITION. PUBLIC SECTION. METHODS increment_counter. EVENTS critical_value EXPORTING value(excess) TYPE i. PRIVATE SECTION. DATA: count TYPE i, threshold TYPE i VALUE 10. ENDCLASS. ******************************************************************* CLASS counter IMPLEMENTATION. METHOD increment_counter. DATA diff TYPE i. ADD 1 TO count. IF count > threshold. diff = count - threshold. RAISE EVENT critical_value EXPORTING excess = diff. ENDIF. ENDMETHOD. ENDCLASS.

******************************************************************* CLASS handler DEFINITION. PUBLIC SECTION. METHODS handle_excess FOR EVENT critical_value OF counter IMPORTING excess. ENDCLASS. ******************************************************************* CLASS handler IMPLEMENTATION. METHOD handle_excess. WRITE: / 'Excess is', excess. ENDMETHOD. ENDCLASS. ******************************************************************* DATA: r1 TYPE REF TO counter, h1 TYPE REF TO handler. START-OF-SELECTION. CREATE OBJECT: r1, h1. SET HANDLER h1->handle_excess FOR ALL INSTANCES. DO 20 TIMES. CALL METHOD r1->increment_counter. ENDDO.

La clase counter implementa un contador. Se desencadena el evento critical_value cuando el valor umbral (threshold) es excedido, y se visualiza la diferencia. La clase handler puede manejar las excepciones en la clase counter. El manejador es registrado en tiempo de ejecucin para todas las variables referenciadas que apunten al objeto. El siguiente ejemplo muestra cmo declarar, llamar y manejar eventos en ABAP Objects. Este objeto trabaja con la lista interactiva desplegada debajo. Cada interaccin del usuario desencadena un evento en ABAP Objects. La lista y sus datos son creados en la clase c_list. Hay una clase status para procesar las acciones del usuario. Se desencadena el evento button_clicked en el evento at usercommand. El evento es manejado en la clase c_list. Hay un objeto de la clase c_ship o c_truck para cada linea de la lista. Ambas clases implementan la interface i_vehicle. Cuando la velocidad de cualquiera de los objetos cambia, el evento speed_change es desencadenado. La clase c_list reacciona a esto actualiza la lista. Restricciones Las sentencias ABAP usadas para procesar listas an no estn completamente disponibles en ABAP Objects, aunque s algunas de ellas. Lo mismo ocurre con el resto de sentencias ABAP, no todas estn disponibles en ABAP Objects. Declaracin Se declaran los siguientes eventos en el ejemplo: El evento dependiente de instancia speed_change en la interface i_vehicle.

El evento esttico button_clicked en la clase status. La clase c_list tiene los mtodos manejadores de eventos de ambos eventos. La clase status no tiene ningn atributo y por lo tanto slo trabaja con mtodos y eventos estticos. ***************************************************************** * Interface and Class declarations ***************************************************************** INTERFACE I_VEHICLE. DATA MAX_SPEED TYPE I. EVENTS SPEED_CHANGE EXPORTING VALUE(NEW_SPEED) TYPE I. METHODS: DRIVE, STOP. ENDINTERFACE. ***************************************************************** CLASS C_SHIP DEFINITION. PUBLIC SECTION. METHODS CONSTRUCTOR. INTERFACES I_VEHICLE. PRIVATE SECTION. ALIASES MAX FOR I_VEHICLE~MAX_SPEED. DATA SHIP_SPEED TYPE I. ENDCLASS. ***************************************************************** CLASS C_TRUCK DEFINITION. PUBLIC SECTION. METHODS CONSTRUCTOR. INTERFACES I_VEHICLE. PRIVATE SECTION. ALIASES MAX FOR I_VEHICLE~MAX_SPEED. DATA TRUCK_SPEED TYPE I. ENDCLASS. ***************************************************************** CLASS STATUS DEFINITION. PUBLIC SECTION. CLASS-EVENTS BUTTON_CLICKED EXPORTING VALUE(FCODE) LIKE SY-UCOMM. CLASS-METHODS: CLASS_CONSTRUCTOR, USER_ACTION. ENDCLASS. ***************************************************************** CLASS C_LIST DEFINITION. PUBLIC SECTION. METHODS: FCODE_HANDLER FOR EVENT BUTTON_CLICKED OF STATUS IMPORTING FCODE, LIST_CHANGE FOR EVENT SPEED_CHANGE OF I_VEHICLE IMPORTING NEW_SPEED, LIST_OUTPUT.

PRIVATE SECTION. DATA: ID TYPE I, REF_SHIP TYPE REF TO C_SHIP, REF_TRUCK TYPE REF TO C_TRUCK, BEGIN OF LINE, ID TYPE I, FLAG, IREF TYPE REF TO I_VEHICLE, SPEED TYPE I, END OF LINE, LIST LIKE SORTED TABLE OF LINE WITH UNIQUE KEY ID. ENDCLASS. *****************************************************************

Implementacin El mtodo esttico user_action de la clase status desencadena el evento esttico button_clicked. Los mtodos dependientes de instancia i_vehicle~drive y i_vehicle~stop desencadenan el evento dependiente de instancia i_vehicle~speed_change en las clases c_ship y c_truck. *************************************************************** * Implementations ***************************************************************** CLASS C_SHIP IMPLEMENTATION. METHOD CONSTRUCTOR. MAX = 30. ENDMETHOD. METHOD I_VEHICLE~DRIVE. CHECK SHIP_SPEED < MAX. SHIP_SPEED = SHIP_SPEED + 10. RAISE EVENT I_VEHICLE~SPEED_CHANGE EXPORTING NEW_SPEED = SHIP_SPEED. ENDMETHOD. METHOD I_VEHICLE~STOP. CHECK SHIP_SPEED > 0. SHIP_SPEED = 0. RAISE EVENT I_VEHICLE~SPEED_CHANGE EXPORTING NEW_SPEED = SHIP_SPEED. ENDMETHOD. ENDCLASS. ***************************************************************** CLASS C_TRUCK IMPLEMENTATION. METHOD CONSTRUCTOR. MAX = 150. ENDMETHOD. ABAP orientado a objetos

ABAP orientado a objetos - Manuel Fernndez Fernndez-Argelles 36 METHOD I_VEHICLE~DRIVE. CHECK TRUCK_SPEED < MAX. TRUCK_SPEED = TRUCK_SPEED + 50. RAISE EVENT I_VEHICLE~SPEED_CHANGE EXPORTING NEW_SPEED = TRUCK_SPEED. ENDMETHOD. METHOD I_VEHICLE~STOP. CHECK TRUCK_SPEED > 0. TRUCK_SPEED = 0. RAISE EVENT I_VEHICLE~SPEED_CHANGE EXPORTING NEW_SPEED = TRUCK_SPEED. ENDMETHOD. ENDCLASS. ***************************************************************** CLASS STATUS IMPLEMENTATION. METHOD CLASS_CONSTRUCTOR. SET PF-STATUS 'VEHICLE'. WRITE 'Click a button!'. ENDMETHOD. METHOD USER_ACTION. RAISE EVENT BUTTON_CLICKED EXPORTING FCODE = SY-UCOMM. ENDMETHOD. ENDCLASS. ***************************************************************** CLASS C_LIST IMPLEMENTATION. METHOD FCODE_HANDLER . CLEAR LINE. CASE FCODE. WHEN 'CREA_SHIP'. ID = ID + 1. CREATE OBJECT REF_SHIP. LINE-ID = ID. LINE-FLAG = 'C'. LINE-IREF = REF_SHIP. APPEND LINE TO LIST. WHEN 'CREA_TRUCK'. ID = ID + 1. CREATE OBJECT REF_TRUCK. LINE-ID = ID. LINE-FLAG = 'T'. LINE-IREF = REF_TRUCK. APPEND LINE TO LIST. WHEN 'DRIVE'. CHECK SY-LILLI > 0. READ TABLE LIST INDEX SY-LILLI INTO LINE. CALL METHOD LINE-IREF->DRIVE. WHEN 'STOP'. LOOP AT LIST INTO LINE. CALL METHOD LINE-IREF->STOP.

ENDLOOP. WHEN 'CANCEL'. LEAVE PROGRAM. ENDCASE. CALL METHOD LIST_OUTPUT. ENDMETHOD. METHOD LIST_CHANGE . LINE-SPEED = NEW_SPEED. MODIFY TABLE LIST FROM LINE. ENDMETHOD. METHOD LIST_OUTPUT. SY-LSIND = 0. SET TITLEBAR 'TIT'. LOOP AT LIST INTO LINE. IF LINE-FLAG = 'C'. WRITE / ICON_WS_SHIP AS ICON. ELSEIF LINE-FLAG = 'T'. WRITE / ICON_WS_TRUCK AS ICON. ENDIF. WRITE: 'Speed = ', LINE-SPEED. ENDLOOP. ENDMETHOD. ENDCLASS. *****************************************************************

Utilizacin de las clases en un programa El programa crea un objeto de la clase c_list y registra el mtodo manejador de eventos fcode_handler del objeto para el evento esttico button_clicked. Tambin registra el mtodo manejador de eventos list_change para el evento speed_change de todas las instancias que implementan la interface i_vehicle. REPORT OO_EVENTS_DEMO NO STANDARD PAGE HEADING. ***************************************************************** * Global data of program ***************************************************************** DATA LIST TYPE REF TO C_LIST. ***************************************************************** * Program events ***************************************************************** START-OF-SELECTION. CREATE OBJECT LIST. SET HANDLER: LIST->FCODE_HANDLER, LIST->LIST_CHANGE FOR ALL INSTANCES. ***************************************************************** AT USER-COMMAND. CALL METHOD STATUS=>USER_ACTION. *****************************************************************

POOLS DE CLASES Clases globales y interfaces Las clases y las interfaces son tipos de objetos. Se pueden definir o bien globalmente en R/3 Repository o bien localmente en un programa ABAP. Si se definen clases e interfaces globalmente, entonces son almacenadas en un tipo especial de programas ABAP llamados class pools (tipo K) o interface pools (tipo J) los cuales sirven como contenedores de los respectivos tipos de objetos. Cada pool de clases o interfaces contiene la definicin de una sla clase o interface. El programa es automticamente generado por el constructor de clases cuando se crea la clase o la interface. Un pool de clases es comparable a un modul pool o a un grupo de funciones. Contiene sentencias ABAP, tanto declarativas como ejecutables, pero no puede ser ejecutado por si mismo. El sistema slo puede ejecutar las sentencias en el pool de clases a peticin, esto es, cuando la sentencia CREATE OBJECT crea una instancia de la clase. Los pools de interfaces no contienen ninguna sentencia ejecutable. Son usados como contenedores de las definiciones de la interface. Cuando se implementa una interface en una clase, la definicin de la interface queda implcitamente incluida en la definicin de la clase. Estructura de un pool de clases Los pools de clases se estructuran de la siguiente manera:

Los pools de clases contienen una parte de definiciones para las declaraciones de los tipos, otra parte para la declaracin de la clase y otra para la implementacin de la clase. Diferencias con otros programas ABAP Los pools de clases son diferentes de otros programas ABAP por las siguientes razones: Los programas ABAP como los ejecutables, los modul pool o los mdulos de funciones normalmente tienen una parte declarativa en la que se definen los datos globales del programa. Estos datos son visibles en todos los bloques de proceso del programa. Los pool de clases en cambio tienen una parte de definicin en la cual se definen datos y tipos de objetos, pero no datos de objetos o field-symbols. Los tipos que se definen en un pool de clases son slo visibles en la parte de implementacin de la clase global. Los nicos bloques de proceso que se pueden usar son la parte declarativa y la parte de implementacin de la clase global. La parte de implementacin slo puede implementar los mtodos declarados en la clase global. No se pueden usar ninguno de los dems bloques de proceso de ABAP (mdulos de dilogo, bloques de eventos, subrutinas, mdulos de funciones).

Los bloques de procesamiento de los pools de clases no estn controlados por el entorno de ejecucin ABAP. No tiene lugar ningn evento, ni se puede llamar a ningn mdulo de datos ni a ningn procedimiento. Los pools de clases sirven exclusivamente para programar clases. Slo se puede acceder a los datos y a las funciones de una clase usando su interface. Debido a que los eventos y los mdulos de dilogo no estn permitidos en las clases no se pueden procesar pantallas en las clases. Actualmente no se pueden programar listas ni pantallas de seleccin en las clases ya que no pueden reaccionar a los eventos apropiados. Clases locales y pools de clases Las clases y las interfaces que se definen en la parte de definiciones de un pool de clases no son visibles externamente. Dentro del pool de clases tienen la misma funcin que las clases y las interfaces locales en cualquier programa ABAP. Las clases locales slo sern instanciadas en los mtodos de la clase global. Debido a que las subrutinas no estn permitidas en los pool de clases, las clases locales son la nica manera posible de modularizacin en las clases globales. Las clases locales respecto de las clases globales tienen ms o menos la misma funcin que las subrutinas en los mdulos de funciones, con la excepcin de que no son visibles externamente. CONSTRUCTOR DE CLASES El constructor de clases es una herramienta que permite crear, definir y probar las clases e interfaces globales. INTRODUCCIN AL CONSTRUCTOR DE CLASES Propsito El constructor de clases permite crear y mantener clases e interfaces globales. Ambos tipos de objetos, al igual que los tipos de datos globales son definidos en el R/3 Repository. Forman una librera de clases central y son visibles en todo el sistema. Se pueden visualizar las clases e interfaces existentes en la librera de clases usando el class browser. Se pueden definir tanto clases locales como clases globales. Las clases locales se definen en programas, grupos de funciones o en un pool de clases de clases auxiliares dentro de una clase global. Son slo visibles en el mdulo en el que son definidas. Integracin El constructor de clases es una herramienta completamente integrada en el ABAP Workbench que permite crear, visualizar y mantener tipos de objetos globales de la librera de clases. El siguiente diagrama ilustra la arquitectura del constructor de clases y las relaciones entre sus componentes.

Para acceder a la pantalla inicial del constructor de clases se utiliza la taransaccin SE24 o bien se accede desde la pantalla inicial del ABAP Workbench en Desarrollo --> Constructor de clases. Desde la pantalla inicial del constructor de clases se puede o bien visualizar los contenidos de la librera de clases o bien crear una clase usando el editor. Una vez que se haya definido el tipo de objeto se pueden implementar sus mtodos. Desde la pantalla inicial del constructor de clases se puede acceder tambin la entorno de test del constructor de clases. Tipos de objetos ya existentes Para visualizar los tipos de objetos existentes en la librera de clases se usa el class browser. Se puede usar tambin el sistema de informacin del repository. Desde la pantalla inicial del ABAP Workbench se escoge: Resumen Sistema de informacin. Desde dentro se escoge ABAP Objects y se puede abrir todo o parte de la librera de clases. El class browser est integrado en el constructor de clases, se puede iniciar desde el constructor o bien desde la transaccin CLABAP. Existe un rango preconfigurado de vistas que se pueden usar para visualizar tipos de objetos. Se puede seleccionar por una serie de filtros: Todas las clases. Se visualizan todas las clases e interfaces de la librera de clases. Objetos de negocio (business objects). Se visualizan los tipos de objetos de negocio de la librera de clases Otras selecciones. Se pueden usar otros tres filtros: Tipos de objetos Relaciones entre objetos Otros No se pueden crear nuevos tipos de objetos desde el class browser. Crear tipos de objetos Cuando se crean clases o interfaces slo se especifican sus datos bsicos. Esta definicin crea una entrada en la tabla del diccionario para el tipo de objeto dado. Una vez que se han definido los datos bsicos se puede continuar trabajando en los componentes en ms detalle. Una vez creados los datos bsicos, el sistema abre automticamente el editor de clases. CREAR NUEVAS CLASES Para crear una nueva clase desde la pantalla inicial del ABAP Workbench: 1) En tipo de objeto se escribe el nombre de la nueva clase. 2) Se selecciona el tipo de objeto clase. IMAGEN CAPTURA 3) Se elige crear. Aparece el siguiente cuadro de dilogo:

IMAGEN CAPTURA 4) Se definen los datos bsicos, que son la siguiente informacin: Clase nombre de la nueva clase. Descripcin descripcin de la nueva clase. Crear instancia el valor por defecto es pblico. Esto quiere decir que cualquier usuario puede instanciar la clase usando la sentencia CREATE OBJECT. Si se selecciona protegido, slo la propia clase y sus subclases pueden instanciar la clase. Si se elige privado slo la propia clase puede instanciarse (desde uno de sus mtodos). Si se selecciona abstracto se crea una clase que no puede ser instanciada. Las clases abstractas sirven como plantillas para las subclases y slo se puede acceder a ellas usando sus atributos estticos o los de sus subclases. Final si se selecciona final, se define una clase final. Una clase final es la ltima del rbol de herencia y no puede tener subclases. Si se crea una clase abstracta final slo se puede acceder a sus componentes estticos. Modelado si se selecciona el sistema no definir la subclase en el pool de clases Icono de herencia Si se selecciona esta funcin (botn al lado de la clase) aparece un cuadro de dilogo. Desde aqu se puede introducir el nombre de una superclase. La superclase puede ser cualquier clase de la librera de clases que no est definida como final. IMAGEN CAPTURA 5) Se elige grabar y aparece el cuadro de dilogo en el que se indica la clase de desarrollo. 6) Se graba y aparece el editor de clases. Desde aqu se pueden definir los componentes de la clase e incluir interfaces. Ya se ha definido una nueva clase. Cuando se introducen los datos bsicos el sistema crea un pool de clases para la nueva clase (siempre que no se haya definido como slo modelado). Un pool de clases contiene la definicin de una sla clase global. Son similares a los grupos de funciones en el sentido de que se pueden definir clases locales auxiliares y tipos locales. CREAR NUEVAS INTERFACES Para crear una nueva interface desde la pantalla inicial del ABAP Workbench 1) Se escribe el nombre de la interface. 2) Se selecciona el tipo de objeto interface. 3) Se escoge crear. Aparece el cuadro de dilogo siguiente: IMAGEN CAPTURA 4) Se introduce la siguiente informacin: Descripcin breve descripcin de la interface.

Slo modelado Si se selecciona esta opcin no se genera un pool de interfaces para la interface y no se puede acceder a ella en tiempo de ejecucin. En el futuro esta opcin permitir disear interfaces basndose en un modelo grfico. 5) Se elige grabar y aparece el cuadro de dilogo en el que se indica la clase de desarrollo. 6) Se graba y aparece el editor de clases. Desde aqu se pueden definir los componentes de la interface. Una vez definida la interface se puede incluir en la definicin de las clases. Se crea una nueva interface con sus datos bsicos en el diccionario. El sistema genera un pool de interfaces para la interface siempre que no se haya creado con la opcin slo modelado. DEFINICIN DE COMPONENTES Una vez creada una clase o una interface como se acaba de describir accedemos a la pantalla desde la cual podemos definir los componentes de nuestra clase o interface. Desde esta pantalla podemos: Definir las clases o las interfaces asignndoles sus componentes. Implementar los mtodos de las clases. Aadir interfaces a las clases e implementar sus mtodos en las clases. Cambiar las definiciones ya existentes y la implementacin de las clases. Definir tipos de datos locales dentro de las clases. Caractersticas Asignamos componentes definiendo: Atributos. Mtodos. Eventos. Tipos locales en las clases. Interfaces. En la pestaa mtodos podemos: Definir los parmetros de los mtodos. Definir las excepciones de los mtodos. Implementar los mtodos. En la pestaa interfaces podemos: Asignar interfaces a las clases. Implementar los mtodos de las interfaces en las clases. EDITOR DE CLASES El editor de clases es una parte del constructor de clases en la que se definen los atributos, mtodos, eventos, y tipos de datos que conforman los componentes de uan clase. Las clases o interfaces definidas en el editor de clases son guardadas en la librera de clases. Se puede acceder al editor ABAP al escribir la implementacin de un mtodo.

IMAGEN CAPTURA Caractersticas Las funciones bsicas son las siguientes: Creacin de atributos. Creacin de mtodos. Creacin de eventos. Implementacin de mtodos. Creacin de interfaces en clases. Creacin de tipos internos en una clase. Otras funciones que se realizan desde aqu son: La funcin Clases Locales (definicin de tipos locales, ctrl + F5) permite crear clases locales auxiliares en el pool de clases de la clase global. La funcin Alias permite definir alias para los componentes. La funcin Documentacin permite documentar las clases o las interfaces y sus componentes. La funcin Pasar a permite acceder al cdigo (parte pblica, protegida o privada) CREACIN DE ATRIBUTOS Los atributos contienen datos. Son los que definen el estado de un objeto. Si se quieren crear atributos con tipos internos. Estos debern estar creados antes de crear los atributos. Procedimiento Se va al editor de clases en modo modificar y se escoge la pestaa de atributos. IMAGEN CAPTURA Para crear un atributo hay que rellenar los siguientes campos: Atributo nombre que identifica al atributo. Clase tipo de atributo, ya sea constante, dependiente de instancia o esttico (compartido por todas las instancias de la clase) Visibilidad Define la visibilidad de los atributos para los usuarios de la clase. Si un atributo es pblico, se asigna a la seccin pblica de la clase y puede acceder a l cualquier usuario de la clase. Los atributos pblicos forman el punto de contacto externo de la clase. Los atributos protegidos son visibles unicamente desde las subclases de la clase.. Los atributos privados son slo visibles desde la propia clase, y no son visibles ni siquiera para las propias subclases. Slo modelado Si se elige esta opcin el sistema no guarda el componente en el pool de clases y el componente no puede ser llamado en tiempo de ejecucin. Slo lectura mediante esta opcin podemos impedir que el usuario cambie el valor del atributo. Clase tipif. Para especificar la referencia al tipo ABAP. Puede ser TYPE, LIKE o TYPE REF TO para las referencias a clases. Tipo ref. puede ser un tipo ABAP elemental o un tipo de objeto (clase o interface).

Descripcin Descripcin breve del componente. Valor inicial Si el atributo es una constante es necesario especificar este campo. El sistema genera el correspondiente cdigo ABAP en la definicin de la clase o de la interface en el pool de clases para todos los atributos excepto para aquellos marcados como Slo modelado. CREACIN DE MTODOS Los mtodos describen el comportamiento de los objetos. Se implementan usando funciones definidas dentro de las clases. Los mtodos son operaciones que cambian los atributos de una clase o una interface. Hay dos tipos de mtodos, los mtodos dependientes de instancia, que son aquellos que se refieren a cada instancia particular y los mtodos estticos, que son aquellos compartidos por todas las instancias de una clase. Los mtodos estticos slo pueden usar atributos estticos. Para crear los mtodos es conveniente haber creado antes los atributos de la clase para as poder implementarlos directamente. Procedimento IMAGEN CAPTURA Se va al editor de clases en modo modificar y se escoge la pestaa de mtodos. Para crear un mtodo hay que rellenar los siguientes campos: Mtodos nombre que identifica al mtodo. Clase tipo de mtodo, dependiente de instancia o esttico. Visibilidad tipo de mtodo, visible, protegido o privado. Un mtodo privado slo puede llamarse desde dentro de la clase, o sea desde otro mtodo de la clase, mientras que un mtodo protegido slo puede llamarse desde otro mtodo de la misma clase o bien de una subclase. Slo modelado Si se selecciona esta opcin el sistema no guarda el mtodo en el pool de clases. Descripcin Descripcin breve del mtodo. Si se crea un mtodo constructor, el sistema asigna el nombre CONSTRUCTOR o CLASS_CONSTRUCTOR automticamente. El constructor de clases tambin define otros atributos en este caso. Antes de implementar el mtodo es conveniente crear sus parmetros y sus excepciones. CREACIN DE PARMETROS Y EXCEPCIONES Los mtodos se definen de manera similar a los mdulos de funciones. Primero, se crea la interface de parmetros y las excepciones, despus se implementa el mtodo. Los mtodos pueden tener parmetros de entrada (importing o changing) y parmetros de salida (exporting, changing y returning). Para crear los parmetros y las excepciones se tienen que haber creado antes los mtodos, los atributos y los eventos de la clase o la interface. Cuando se redefinen mtodos heredados, no se puede cambiar la interface de parmetros o aadir nuevos parmetros.

Procedimiento Se posiciona en el nombre del mtodo o del evento y se escoge parmetros. IMAGEN CAPTURA Se necesita completar la siguiente informacin: Parmetro Nombre que identifica al parmetro. Clase Puede tener el tipo importing, exporting, changing o returning. Si se usan parmetros returning no se pueden usar ni parmetros exporting ni parmetros changing. Si se usan parmetros changing no se pueden usar parmetros returning. Los mtodos constructores slo pueden tener parmetros importing. Traspasar valores al contrario que los mdulos de funciones, el modo por defecto de pasar valores a un mtodo es por referencia. Se puede forzar al sistema a pasar un parmetro por valor seleccionando esta opcin. Esto es slo posible para parmetros importing, exporting y changing. Los parmetros returning slo pueden ser pasados por valor. El constructor de clases chequea esta regla para que se cumpla siempre. Opcional Si se selecciona esta opcin el parmetro no tiene que ser especificado necesariamente cuando se llama al mtodo. Clase tipif. - Para especificar la referencia al tipo ABAP. Puede ser TYPE, LIKE o TYPE REF TO para las referencias a clases. Tipo ref. - puede ser un tipo ABAP elemental o un tipo de objeto (clase o interface). Se puede especificar el tipo de un parmetro de un mtodo privado o protegido usando un tipo de datos interno definido en la clase. Valor propuesta valor por defecto del parmetro. Descripcin descripcin breve del parmetro. Para crear excepciones se realiza un proceso similar, se posiciona sobre el nombre del mtodo y se elecciona excepciones. Se necesitan rellenar los siguientes campos: Excepcin nombre nico que identifica a la excepcin. Descripcin descripcin breve de la excepcin. IMPLEMENTACIN DE MTODOS Para implementar un mtodo hay que crear previamente el mtodo y los atributos de la clase. Si se quieren implementar mtodos de las interfaces, estas tienen que haber sido incluidas en la definicin de la clase. Se tienen que haber creado igualmente todos los parmetros y excepciones necesarias. Procedimiento En el editor de clases se escoge la pestaa mtodos. Se posiciona sobre el mtodo elegido y se hace doble click o se elige cdigo fuente con lo que se accede al editor ABAP. Ah se escribe el cdigo del mtodo. CREACIN DE EVENTOS

Los objetos pueden indicar que su estado ha cambiado disparando un evento. Los eventos se pueden definir tanto en clases como en interfaces. Los eventos se desencadenan desde un mtodo mediante la sentencia RAISE EVENT. Cada clase o interface que va a manejar el correspondiente evento debe implementar el mtodo manejador de eventos apropiado y registrarlo usando la sentencia SET HANDLER. Cuando un evento tiene lugar, el sistema llama al mtodo manejador registrado para ese evento. Al igual que las definiciones de los mtodos, los eventos tienen una interface de parmetros. La nica diferencia es que los eventos slo pueden tener parmetros EXPORTING. Procedimiento En el editor de clases se escoge la pestaa Eventos. Se tiene que introducir la siguiente informacin: Evento Nombre que identifica al evento. Clase Especifica el tipo de evento, esttico o dependiente de instancia. Visibilidad Especifica el tipo de evento, pblico, protegido o privado. Slo modelado Si se selecciona esta opocin, el sistema no crea el evento en el pool de clases. No se podra entonces acceder al componente en tiempo de ejecucin. Descripcin descripcin breve del evento. Los eventos se listan en la parte declarativa de la clase o la interface despus de la sentencia EVENTS. CREACIN DE TIPOS INTERNOS EN LAS CLASES No se deben crear tipos de datos pblicos dentro de las clases globales. Procedimiento Desde el editor de clases se elige la pestaa Tipos internos. Para crear un tipo interno dentro de una clase se tiene que rellenar la siguiente informacin: Tipo Nombre que identifica al tipo. Visibilidad - tipo de mtodo, visible, protegido o privado. Slo modelado - Si se selecciona esta opocin, el sistema no crea el tipo en el pool de clases. No se podra entonces acceder al componente en tiempo de ejecucin. Clase tipif. - Para especificar la referencia al tipo ABAP. Puede ser TYPE, LIKE o TYPE REF TO para las referencias a clases. Tipo ref. - puede ser un tipo ABAP elemental o un tipo de objeto (clase o interface). Descripcin descripcin breve del tipo. Con esto no se crean tipos de datos internos en la clase. Se pueden usar estos tipos en la clase y son protegidos tambin en las subclases (no pueden ser pblicos). Se pueden definir atributos protegidos y privados y parmetros de interface usando la adicin TYPE. DEFINICIN DE RELACIONES ENTRE TIPOS DE OBJETOS Se pueden definir las siguientes relaciones entre dos tipos de objetos: Herencia entre dos clases.

Extensin de la funcionalidad de una clase mediante la implementacin de interfaces. Esta se una relacin entre clases e interfaces. Interfaces compuestas. Esta es una relacin entre dos interfaces. La herencia es una relacin entre clases. Permite derivar una nueva clase a partir de la definicin de una clase ya existente. La nueva clase se conoce como subclase mientras que la clase ya existente es la superclase. La herencia se utiliza para crear subclases ms especializadas que la superclase. Se pueden aadir nuevos componentes a la subclase, incluso se pueden redefinir los mtodos que hereda la subclase. El resultado de la herencia es una jerarqua de clases. El constructor de clases permite crear una jerarqua de clases de una manera muy simple. Se puede crear una subclase de todas las clases que no estn definidas como finales. Tambin se puede definir una superclase directa de una clase si esta clase no fue a su vez derivada de otra. Las interfaces permiten extender la definicin de una clase. Cuando una clase implementa una interface, todos los componentes de la interface aparecen como componentes de la clase. Se puede aceder a estos componentes usando una referencia a la clase o una referencia a la interface. Las interfaces permiten trabajar con diferentes clases de manera uniforme. La implementacin real de los componentes de la interface tiene lugar en las clases. Por esto, las interfaces proporcionan un mtodo de separar la definicin de la implementacin de los componentes. Las interfaces pueden contener atributos, mtodos y eventos pero tambin otras interfaces. Las clases que implementan una interface compuesta tienen tambin que implementar todos sus componentes. IMPLEMENTACIN DE INTERFACES EN LAS CLASES Las interfaces son extensiones a las definiciones de las clases y proporcionan un punto de contacto uniforme entre distintas clases. Al contrario que las clases, las interfaces no pueden ser inicializadas. En su lugar, las clases implementan las interfaces implementando todos sus mtodos. Se puede acceder a los mtodos de la interface bien mediante referencias a clases o referencias a interfaces. Cada clase puede implementar interfaces de manera distinta a las dems. Debido a esto, las interfaces son la base del polimorfismo en ABAP Objects. Procedimiento Es necesario haber creado antes la interface y la clase en el constructor de clases. En la pestaa Interfaces del editor de clases se aade la interface a la clase especificando: Interface Nombre que identifica a la interface. Al pulsar enter, el sistema chequea que la interface exista en la librera de clases. Slo modelado - Si se selecciona esta opocin, el sistema no crea la interface en el pool de clases. No se podra entonces acceder al componente en tiempo de ejecucin. Las interfaces estn en la parte declarativa de la clase en el pool de clases bajo la sentencia INTERFACES. Ahora se tienen que implementar los mtodos de la interface de la manera que ya hemos visto. Los componentes de la interface, atribuos, mtodos y eventos aparecen en la claseen la forma <nombre de la interface>~<nombre del

componente>. Esto asegura que no existan conflictos con los nombres de los componentes de la clase. CREACIN DE SUBCLASES La herencia permite derivar clases de clases ya existentes. La nueva clase contiene un mayor rango de funciones especficas que su superclase. Esto se puede hacer aadiendo nuevos componentes a la subclase y redefiniendo mtodos heredados de la superclase. Procedimiento Para crear una subclase directa de una clase desde el editor de clases se escoge la pestaa Atributos (datos bsicos) y dentro de ella subclase (siempre que la clase no sea final). Aparece el siguiente cuadro de dilogo. IMAGEN CAPTURA La clase se crea ahora como una clase normal. La subclase hereda todos los componentes de la superclase excepto los mtodos constructores. Las interfaces implementadas en la superclase tambin lo son en la subclase. AMPLIACIONES EN SUBCLASES Los cambios en las subclases son aditivos, esto es, no se puede borrar un componente de una clase si ha sido heredado de una superclase. Una clase se puede ampliar de varias maneras: Aadiendo nuevos componentes. Redefiniendo mtodos heredados. Slo se pueden redefinir mtodos dependientes de instancia. Los atributos, los mtodos estticos y otros componentes heredados no se pueden redefinir. Adems, los mtodos que se quieren redefinir no pueden haber sido definidos como finales en la superclase. Los mtodos constructores no pueden ser redefinidos ya que son declarados finales implcitamente. Una redefinicin de un mtodo afecta nicamente a la implementacin del mtodo, los nombres y los tipos de los parmetros del mtodo no pueden cambiarse. La interface de parmetros del mtodo redefinido debe permanecer igual que en el mtodo original de la superclase. Procedimiento Se pueden definir nuevos componentes en las tres zonas de visibilidad (pblico, protegido o privado) de una subclase teniendo en cuenta que los nombres han de ser distintos entre los componentes heredados y creados en la subclase ya que si no existirn conflictos entre ellos. Para redefinir un mtodo heredado en una subclase: Se visualizan todos los mtodos de la subclase. En principio no aparecen los mtodos heredados, para que aparezcan tenemos que ir a Utilidades Opciones y seleccionar Visualizar tambin

componentes heredados. Si se siguen los pasos indicados en la ayuda de la versin 4.6B lo que se hace es modificar el mtodo de la superclase. Para redefinir el mtodo hay que realizar lo siguiente. Se selecciona el mtodo elegido y se pulsa el botn de redefinir: IMAGEN CAPTURA (segundo por la derecha de la subscreen). Se entra directamente a la redifinicin del mtodo. Si se quiere anular la redifinicin y volver al mtodo original el botn situado a la derecha lo permite. IMAGEN CAPTURA Los mtodos refefinidos aparecen en diferente color en el editor de clases. Si se redefine un mtodo en una subclase, el mtodo correspondiente en la superclase permanece sin cambios. Para acceder a los componentes de la superclase ( por ejemplo al mtodo sin redefinir se puede usar la pseudoreferencia SUPER. INTERFACES ANIDADAS ABAP Objects soporta anidamiento de interfaces. Una interface compuesta tiene una o ms interfaces como componentes. Cada una de ellas puede tener a su vez ms interfaces como componentes, permitiendo un mayor anidamiento. Las interfaces que no contienen interfaces se conocen como interfaces simples. Todos los componentes de las interfaces que se aaden a una clase estn en el mismo nivel de anidamiento visto desde la clase. Cuando una clase usa una interface debe implementar todos los mtodos de todos los componentes de la interface independientemente de su nivel de anidamiento. Se accede a sus componentes usando sus nombres originales, esto es, <nombre de la interface>~<componente> ACTIVACIN DE CLASES E INTERFACES Todos los componentes de una clase global que se quiera instanciar en un programa tienen que ser activados explcitamente. Todas las clases globales tienen una entrada en la tabla TADIR. El correspondiente objeto de transporte tiene el nombre R3TR CLAS <nombre de la clase> y contiene un rango de componentes, cada uno de los cuales es una unidad separada de cara al transporte. Hay que atender a una serie de normas: Los datos bsicos y los componentes pblicos de una clase no pueden ser activados por separado. Slo los datos bsicos y las secciones pblica, protegida y privada de una clase afecta al estatus en el editor de clases. Si se activa el objeto entero y luego se cambia la implementacin de un mtodo, el estatus permanece activo. El objeto para el transporte de una interface tiene el nombre R3TR INTF <nombre de la interface>.

Contiene un solo objeto con el nombre INTF. Cuando se activa una clase que implementa una interface hay que asegurarse de que la interface haya sido previamente activada o si no la seccin pblica contendr un error de sintaxis. El estatus de una clase o una interface aparece siempre en el editor de clases y est determinado por: Relevancia en tiempo de ejecucin (Implementado / Slo modelado) Estado en la base de datos (Revisado / Grabado) Activacin (Inactivo / activo) Pueden aparecer ocho posibles estatus. PRUEBAS Se puede usar el entorno de pruebas (test environment) para probar componentes en el constructor de clases y objetos de negocio en el Business Object Builder. El sistema genera dinamicamente un programa de test que simula la ejecucin de varias sentencias ABAP. Slo se pueden probar los componentes pblicos de los objetos. Antes de probar una clase hay que chequear la sintaxis y si hay algn error solucionarlo ya que no se puede usa el entorno de test con errores de sintaxis. El entorno de test se encuentra desde el editor de clases en Clase --> Verif (F8). El sistema abre el entorno de test y se vualiza la clase en forma de rbol. En el entorno de test se pueden crear instancias, probar atributos, probar mtodos, eventos e interfaces.

1.12. BATCH INPUT's. 1.13. FORMULARIOS. 1.14. Programacin de Dilogo Introduccin Pasos en la creacin de transacciones 1.15. Diseo de Mens Introduccin La barra de mens Los Pushbuttons Teclas de funcin Otras utilidades del men printer Activacin de funciones Ttulos de men Pruebas, chequeo y generacin de status 1.16. Diseo de Pantallas Introduccin al diseo de pantallas Diseo de pantallas Utilizando el Screen Painter Creando objetos en pantalla Creando objetos desde el diccionario de datos Definiendo los atributos individuales de campo Lgica de proceso de una pantalla

Introduccin a la lgica de proceso PROCESS BEFORE OUTPUT (PBO) PROCESS AFTER INPUT (PAI) El flujo de la transaccin Actualizando la base de datos en una transaccin El bloqueo de datos en SAP 1.17. ALV's. Introduccin. Programacin con ALV. Navegacin en ALV. Variantes de display. Mtodos de cl_gui_alv_grid. 1.18. Webdynpro. Crear componente WebDynpro. Creacin de View y asignacin a Window. Context_Node_Atributte. Crear aplicacin WebDynpro. Activar-Ejecutar. Crear un Web Dynpro con ALV. Acciones, Eventos, Mtodos. Navegacin. 1.19. BSPs. Introduccin BSP. Estructura de aplicacin BSP. Usos. CLASE DE aplicacin HTLMB Componentes. Creacin de aplicacin BSP.

S-ar putea să vă placă și