TAW10_1_ES_Col10_ILT_FV_Inst_A4.pdf
April 8, 2017 | Author: ch_acuario_30 | Category: N/A
Short Description
Download TAW10_1_ES_Col10_ILT_FV_Inst_A4.pdf...
Description
TAW10 Programación ABAP - Introducción - Parte 1
.
.
MANUAL DEL INSTRUCTOR FORMACIÓN CON INSTRUCTOR
. Versión del curso: 10 Duración del curso: 5 Días Número de material: 50117659
Copyright y marcas registradas de SAP
© 2014 SAP AG. Reservados todos los derechos.
Queda prohibida la reproducción o difusión de parte o la totalidad de este programa sin el permiso expreso de SAP AG. La información aquí contenida puede modificarse sin previo aviso. Algunos productos de software comercializados por SAP AG y sus distribuidores contienen componentes de software propiedad de otros proveedores de software. ●
Microsoft, Windows, Excel, Outlook y PowerPoint son marcas registradas de Microsoft Corporation.
●
IBM, DB2, DB2 Universal Database, System i, System i5, System p, System p5, System x, System z, System z10, System z9, z10, z9, iSeries, pSeries, xSeries, zSeries, eServer, z/VM, z/OS, i5/OS, S/390, OS/390, OS/400, AS/400, S/390 Parallel Enterprise Server, PowerVM, Power Architecture, POWER6+, POWER6, POWER5+, POWER5, POWER, OpenPower, PowerPC, BatchPipes, BladeCenter, System Storage, GPFS, HACMP, RETAIN, DB2 Connect, RACF, Redbooks, OS/2, Parallel Sysplex, MVS/ESA, AIX, Intelligent Miner, WebSphere, Netfinity, Tivoli y Informix son marcas comerciales o marcas registradas de IBM Corporation.
●
Linux es la marca registrada de Linus Torvalds en EE. UU. y en otros países.
●
Adobe, el logotipo de Adobe, Acrobat, PostScript y Reader son marcas comerciales o marcas registradas de Adobe Systems Incorporated en EE. UU. y/o en otros países.
●
Oracle es una marca registrada de Oracle Corporation.
●
UNIX, X/Open, OSF/1 y Motif son marcas registradas de Open Group.
●
Citrix, ICA, Program Neighborhood, MetaFrame, WinFrame, VideoFrame, y MultiWin son marcas o marcas registradas de Citrix Systems, Inc.
●
HTML, XML, XHTML y W3C son marcas o marcas registradas de W3C®, World Wide Web Consortium, Massachusetts Institute of Technology.
●
Java es una marca registrada de Sun Microsystems, Inc.
●
JavaScript es una marca registrada de Sun Microsystems, Inc., utilizada bajo licencia para la tecnología inventada e implementada por Netscape.
●
SAP, R/3, SAP NetWeaver, Duet, PartnerEdge, ByDesign, SAP BusinessObjects Explorer, StreamWork y otros productos y servicios de SAP aquí mencionados, así como sus respectivos logotipos, son marcas comerciales o marcas registradas de SAP AG en Alemania y en otros países.
●
Business Objects y el logotipo de Business Objects, BusinessObjects, Crystal Reports, Crystal Decisions, Web Intelligence, Xcelsius y otros productos y servicios de Business Objects aquí mencionados, así como sus respectivos logotipos, son marcas comerciales o marcas registradas de Business Objects Software Ltd. Business Objects es una empresa de SAP.
●
Sybase y Adaptive Server, iAnywhere, Sybase 365, SQL Anywhere, y otros productos y servicios Sybase aquí mencionados, así como sus respectivos logotipos son marcas comerciales o marcas registradas de Sybase Inc. Sybase es una empresa de SAP.
El resto de nombres de productos y servicios mencionados son marcas de sus respectivas empresas. Los datos contenidos en este documento son únicamente informativos. Las especificaciones nacionales del producto pueden variar. Este material está sujeto a cambios sin previo aviso. Este material está provisto por SAP AG y sus empresas afiliadas ("Grupo SAP") únicamente para fines informativos, sin representar garantía alguna; el Grupo SAP no será responsable de los errores u omisiones referentes a los materiales. Las únicas garantías para los productos y servicios del Grupo SAP son las especificadas explícitamente en las declaraciones de garantías que acompañan a los productos y servicios, si los hubiera. Nada de lo escrito en la presente debe tomarse como una constitución de garantía adicional.
© Copyright . Reservados todos los derechos.
iii
iv
© Copyright . Reservados todos los derechos.
Convenciones Tipográficas En este manual se usa el español de España como estándar. También se usan las siguientes convenciones tipográficas.
Esta información se visualiza en la presentación del instructor.
Demostración
Procedimiento
Advertencia o aviso
Consejo
Información relacionada o adicional
Discusión con moderador
Control de interfaz de usuario
Texto ejemplo
Título de ventana
Texto ejemplo
© Copyright . Reservados todos los derechos.
v
vi
© Copyright . Reservados todos los derechos.
Contenido xi
Resumen del curso
1
Capítulo 1: Resumen del portafolio SAP
2 13 21
Lección: Identificación de las piezas del portafolio SAP Lección: Listado de las capacidades clave de SAP NetWeaver Lección: Consideración de la estrategia de versiones de SAP
29
Ejercicio 1: Acceso al documento de estrategia de release de SAP
37 38 53 56 63 71 72 78 93 96 105 108 121 127 131 143 144 151 154 158 162 171 172
60 Minutos 20 Minutos 35 Minutos 5 Minutos
Capítulo 2: Navegación Lección: Navegación por sistemas SAP Ejercicio 2: Entrar al sistema y navegar en la pantalla Lección: Rendimiento de navegación avanzada en SAP GUI Ejercicio 3: Funciones de llamada
40 Minutos 10 Minutos 60 Minutos 20 Minutos
Capítulo 3: El núcleo del sistema Lección: Explotando el servidor de aplicación SAP NetWeaver Lección: Diferenciación de procesos SAP NetWeaver AS Java y ABAP Ejercicio 4: Determine la estructura de una instancia Lección: Procesamiento de solicitudes AS ABAP Ejercicio 5: Enumerar los procesos de trabajo configurados en una instancia de AS ABAP Lección: Explicación de procesos AS ABAP Ejercicio 6: Configuración y supervisión de las entradas de tabla de bloqueo Ejercicio 7: Imprimir un duplicado de pantalla en AS ABAP Ejercicio 8: Planificación de un informe simple en el fondo
25 Minutos 45 Minutos 15 Minutos 45 Minutos 5 Minutos 60 Minutos 10 Minutos 10 Minutos 10 Minutos
Capítulo 4: Tecnologías de la comunicación y la integración Lección: Integración de aplicaciones existentes a aplicaciones SAP Ejercicio 9: Utilizar una Business Application Programming Interface Lección: Procesos empresariales de vinculación de todo el sistema Lección: Trabajo con servicios web en el servidor de aplicación de SAP NetWeaver Lección: Explicación de arquitectura orientada al servicio
45 Minutos 10 Minutos 20 Minutos 20 Minutos 20 Minutos
Capítulo 5: Flujo de un programa ABAP Lección: Describir el procesamiento de los programas ABAP
© Copyright . Reservados todos los derechos.
20 Minutos
vii
187 188 198 205
Lección: Introducción del entorno de desarrollo de ABAP Lección: Organizar desarrollos ABAP Ejercicio 10: Crear un paquete
45 Minutos 20 Minutos 5 Minutos
208 217 221 225
Lección: Desarrollar programas Ejercicio 11: Desarrollar un programa ABAP sencillo Lección: Finalizar desarrollo Ejercicio 12: Crear una transacción
55 Minutos 10 Minutos 20 Minutos 10 Minutos
237 238 249 257 264 271 281 283 290 303 309 319 326 329 335 342 347 359 365 369 371 376 387 388 395 401 419
viii
Capítulo 6: Introducción al Workbench ABAP
Capítulo 7: Elementos básicos del lenguaje ABAP Lección: Definir los objetos de datos elementales Lección: Uso de sentencias ABAP básicas Ejercicio 13: Usar sentencias ABAP básicas Lección: Trabajar con el ABAP Debugger Ejercicio 14: Depurar sentencias en objetos de datos elementales
30 Minutos 60 Minutos 30 Minutos 40 Minutos 25 Minutos
Capítulo 8: Modularización Lección: Introducir la modularización Lección: Modularización con subrutinas Ejercicio 15: Implementar subrutinas Lección: Modularizar con módulos de función Ejercicio 16: Uso de un módulo de funciones Lección: Implementar módulos de funciones Ejercicio 17: Crear un grupo de funciones Ejercicio 18: Crear un módulo de funciones Lección: Modularización con BAPI Lección: Modularizar con clases globales Ejercicio 19: Utilizar un método global estático Lección: Implementación de clases globales simples y métodos estáticos Ejercicio 20: Crear una clase global simple Ejercicio 21: Crear un método estático simple Lección: Modularizar con clases locales
10 Minutos 90 Minutos 30 Minutos 50 Minutos 20 Minutos 75 Minutos 10 Minutos 30 Minutos 15 Minutos 50 Minutos 20 Minutos 50 Minutos 10 Minutos 30 Minutos 15 Minutos
Capítulo 9: Objetos de datos complejos Lección: Trabajo con estructuras Ejercicio 22: Trabajar con estructuras Lección: Trabajar con tablas internas Ejercicio 23: Trabajar con tablas internas
65 Minutos 35 Minutos 115 Minutos 25 Minutos
© Copyright . Reservados todos los derechos.
429
Capítulo 10:
Modelado y obtención de datos
431 441
Lección: Modelar datos Ejercicio 24: Analizar tablas transparentes en el Diccionario de datos
50 Minutos 20 Minutos
447 455 461 463 471 477 488 495
Lección: Lectura de registros de base de datos individuales Ejercicio 25: Implemente acceso a registro individual Lección: Leer varios registros de base de datos Ejercicio 26: Implementar un loop SELECT Ejercicio 27: Implementar un Array Fetch Lección: Tratar otros aspectos del acceso a base de datos Lección: Trabajar con verificaciones de autorización Ejercicio 28: Implementar una verificación de autorización
40 Minutos 20 Minutos 90 Minutos 25 Minutos 25 Minutos 40 Minutos 45 Minutos 10 Minutos
507 508 513 521 528 535 545 546 555 556 565 572 593
Capítulo 11: Informe ABAP clásico Lección: Implementación de listas ABAP Lección: Implementar pantallas de selección Ejercicio 29: Crear una Pantalla de selección y una Lista ABAP clásica Lección: Implementación de eventos de informes ABAP Ejercicio 30: Implementar eventos de informes ABAP
15 Minutos 50 Minutos 20 Minutos 30 Minutos 15 Minutos
Capítulo 12:Herramientas de análisis de programa Lección: Usar el Code Inspector
20 Minutos
Capítulo 13:Llamadas de programa y gestión de memoria Lección: Llamada de programas de manera síncrona Ejercicio 31: Implementación de llamadas de programa Lección: Un resumen del tiempo de ejecución ABAP y gestión de memoria Ejercicio 32: Utilizar la memoria de ABAP y la memoria de SAP
© Copyright . Reservados todos los derechos.
30 Minutos 30 Minutos 60 Minutos 25 Minutos
ix
615
ABAP Open SQL en detalle
616
Lección: Implementación de condiciones complejas WHERE y cláusulas especiales INTO
30 Minutos
626
Lección: Procesamiento y adición de sets de datos en la base de datos Ejercicio 33: Mantener sets de datos clasificados y condensados desde la base de datos Ejercicio 34: Realizar cálculos en la base de datos Lección: Lectura de múltiples tablas de base de datos Ejercicio 35: Implementar un JOIN para tres tablas de bases de datos Ejercicio 36: Implementar almacenamiento completo en memoria intermedia según demanda Ejercicio 37: Leer datos adicionales con el suplemento FOR ALL ENTRIES
30 Minutos
631 645 651 657 669 679
x
Capítulo 14:
10 Minutos 10 Minutos 45 Minutos 30 Minutos 30 Minutos 30 Minutos
© Copyright . Reservados todos los derechos.
Resumen del curso
PÚBLICO OBJETIVO Este curso está dirigido al siguiente público objetivo: ●
Consultor de aplicaciones
●
Consultor de datos
●
Consultor de desarrollo
●
Consultor analista de negocios o industria
●
Consultor de soporte
●
Consultor de tecnología
●
Programador
●
Administrador de sistema
●
Soporte TI
© Copyright . Reservados todos los derechos.
xi
xii
© Copyright . Reservados todos los derechos.
CAPÍTULO 1
Resumen del portafolio SAP
Lección 1 Identificación de las piezas del portafolio SAP
2
Lección 2 Listado de las capacidades clave de SAP NetWeaver
13
Lección 3 Consideración de la estrategia de versiones de SAP Ejercicio 1: Acceso al documento de estrategia de release de SAP
21 29
OBJETIVOS DEL CAPÍTULO ●
Determinar los componentes del portafolio SAP que mejor se adapten a sus necesidades
●
Enumerar las capacidades claves de SAP NetWeaver
●
Encontrar información de actualización y de mantenimiento para las soluciones SAP
© Copyright . Reservados todos los derechos.
1
Capítulo 1 Lección 1 2
Identificación de las piezas del portafolio SAP
RESUMEN DE LA LECCIÓN Este módulo describe el portafolio SAP y la estructura de soluciones de software SAP. The aim of this introductory lesson is to provide participants with an overview of the SAP software portfolio. Some advantages of the software are also introduced here. Make sure that you introduce the different areas of the SAP home page to participants. For more information, see http://www.sap.com. Ejemplo empresarial Su empresa planifica introducir software de SAP. Usted es miembro de un equipo de proyecto y necesita una visión general del portafolio completo de SAP. Por este motivo, será preciso conocer lo siguiente: ●
Una comprensión de los componentes claves del portafolio SAP
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Determinar los componentes del portafolio SAP que mejor se adapten a sus necesidades
Áreas clave de SAP
Figura 1: Áreas clave de SAP
Para brindar apoyo a clientes en un mundo empresarial en constante cambio, SAP extiende su portafolio de soluciones con innovaciones para proporcionar valor instantáneo a las
2
© Copyright . Reservados todos los derechos.
Lección: Identificación de las piezas del portafolio SAP
necesidades del cliente. Mientras se despliega el portafolio de soluciones, SAP actualiza la consistencia de los datos, de los procesos y de las aplicaciones en el portafolio. SAP se enfoca en las siguientes áreas clave: ● Escalar el negocio principal de los clientes (localmente) ●
Innovar mediante extensiones (según demanda)
●
Extender el alcance de los clientes (en el dispositivo)
SAP: Localmente, según demanda y en el dispositivo SAP: On-Premise SAP continuará evolucionando y fortaleciendo su negocio principal de suministrar soluciones para todos los segmentos de industrias y de mercados. Las soluciones SAP escalan los principales negocios de los clientes y les dan valor instantáneo. Para facilitar el uso de estas soluciones, SAP asegura que estén integradas previamente e implementadas sin interrupciones. Las soluciones SAP se desarrollan mediante principios de software tales como desacoplamiento, capas, abstracción y diseño. Con el enfoque de SAP a la arquitectura orientada al servicio (SOA), las soluciones de terceros no SAP se integran en forma consistente con los procesos empresariales núcleo de los clientes. Ya se encuentra disponible el software SAP Business Suite 7, un producto fundamental dentro de esta área. Se planean más productos para los años subsiguientes. SAP: On-Demand SAP brinda innovaciones rápidas que proporcionan funcionalidad extendida y on-demand para una línea específica de negocios. Los clientes pueden utilizar instantáneamente las innovaciones de SAP sin necesidad de TI interna para gestionar la infraestructura. Como estas extensiones se integran sin inconvenientes con los procesos empresariales núcleo de los clientes, los clientes se benefician con la integración completa del proceso empresarial. SAP: On-Device SAP también tiene como objetivo extender el alcance de los clientes de las siguientes maneras: ● Permitiendo a los usuarios finales utilizar los datos y procesos de SAP en diferentes dispositivos en todas partes mediante las aplicaciones SAP para empresas móviles ●
●
●
Proporcionando a los usuarios finales información de dentro y fuera de la empresa para que puedan tomar decisiones basadas en una amplia gama de datos de acuerdo a sus casos de uso Ayudando a los usuarios finales a cooperar y a optimizar el rendimiento a través de una red empresarial dinámica de personas Permitiendo a los interlocutores, clientes y usuarios finales extender la funcionalidad de SAP y construir experiencias de usuarios
© Copyright . Reservados todos los derechos.
3
Capítulo 1: Resumen del portafolio SAP
Funcionamiento combinado Para asegurar que todas las soluciones y los componentes de software encajen perfectamente en la infraestructura del cliente, se requiere una capa de funcionamiento combinado que trabaje en todas las aplicaciones. SAP continuará invirtiendo en la gestión de ciclo de vida, la gestión de datos maestros y el funcionamiento combinado de procesos. El objetivo de esta inversión es reducir el coste de propiedad continuamente y asegurar la consistencia de los datos y la gestión del proceso a través de capas múltiples de aplicaciones.
Productos para empresas de todos los tamaños
Figura 2: Diferentes productos para empresas de varios tamaños
SAP ofrece un amplio rango de productos en escala que se pueden ajustar a cualquier tamaño y adaptar a los procesos de continuo cambio de las empresas de cualquier tamaño. Las siguientes soluciones SAP se encuentran disponibles para clientes pequeños y medianos, como se muestra en la figura: ● SAP Business One ●
SAP Business ByDesign
●
SAP Business All-in-One Note that SAP Business One is not powered by SAP NetWeaver.
SAP Business One SAP Business One es una aplicación completa e integrada de planificación de recursos empresariales (ERP) con una interfaz similar a Windows. La aplicación fue desarrollada específicamente para empresas pequeñas y medianas. SAP Business One cuenta con las siguientes características: SAP Business One brinda una navegación simple y opciones de extensión, funciones de arrastrar y vincular e integración con Microsoft Word y con Excel.
●
●
4
SAP Business One le permite gestionar de manera uniforme importantes áreas empresariales como ventas, distribución y finanzas con una única aplicación integrada. La
© Copyright . Reservados todos los derechos.
Lección: Identificación de las piezas del portafolio SAP
aplicación SAP Business One brinda un resumen actualizado de los datos importantes de una empresa dada. Esta información ayuda a las empresas a satisfacer los requisitos de los clientes, lo que constituye un requisito previo importante para un crecimiento rentable. ●
SAP Business One se puede almacenar localmente dentro de una empresa o mediante un interlocutor y se puede implementar en dos meses.
SAP Business One es la solución ideal para pequeñas empresas de alrededor de 100 empleados que buscan un sistema económico que asegure la operación exitosa y rentable de sus procesos centrales (como finanzas, ventas, servicio al cliente y operaciones). SAP Business One se vende únicamente a través de una red global de colaboradores certificados y con experiencia. Estos colaboradores brindan un soporte de 24 horas, que cubre las ampliaciones de los proveedores de software independientes. Actualmente hay más de 34.000 clientes que, a partir del año 2012, utilizan SAP Business One en más de 40 países. Para obtener más información acerca de SAP Business One, consulte http://www.sap.com/ solutions/sme/businessone. SAP Business ByDesign The SAP Business ByDesign solution is powered by SAP NetWeaver, but it is not based on SAP Business Suite. SAP Business ByDesign es una solución para empresas pequeñas (alrededor de 100 empleados) y medianas (entre 100 a 500 empleados), que desean utilizar una solución ondemand para mejorar sus procesos centrales y disminuir los costes de entrada y operativos. La solución está orientada a las empresas medianas que no utilizan el software empresarial integrado. SAP Business ByDesign cuenta con las siguientes características: ● Combina las ventajas de una aplicación integrada y completa con los beneficios de una solución on-demand. Al tener un bajo riesgo potencial y bajos costes operativos, SAP Business ByDesign proporciona servicio y soporte integrado, adaptabilidad y características de fácil utilización. La solución también garantiza transparencia y se atiene a los requisitos legales. ●
Es la solución más completa, totalmente integrada y on-demand para ayudar a que las empresas medianas gestionen sus finanzas, sus recursos humanos, sus proyectos, su producción y su gestión de relaciones entre proveedor y cliente. También cumple los requisitos legales regionales y locales de las empresas. El diseño de SAP Business ByDesign comprende asuntos de conformidad específicos del país (reglamentarios).
SAP Business ByDesign no fue desarrollado simplemente para aplicaciones empresariales estándares o para la gestión de relaciones de clientes. En lugar de eso, la aplicación se desarrolló con interfaces de usuario que se pueden personalizar por rol de usuario para admitir todos los procesos empresariales dentro de una empresa. La aplicación ofrece procesos completos para el centro de trabajo del futuro. Para obtener más información acerca de SAP Business ByDesign, consulte http:// www.sap.com/solutions/sme/businessbydesign. SAP Business All-in-One All software has to be adapted to a company’s requirements. The SAP Business All-in-One solution is the ideal solution for small and midsize companies having up to 2,500 employees,
© Copyright . Reservados todos los derechos.
5
Capítulo 1: Resumen del portafolio SAP
industry-specific requirements, several divisions, and a mature IT infrastructure. Such companies can use the preconfigured SAP systems for SAP Business All-in-One. SAP Business All-in-One es proporcionado por SAP NetWeaver e incluye la aplicación SAP ERP, la aplicación SAP Customer Relationship Management (SAP CRM) y las aplicaciones del portafolio SAP BusinessObjects. SAP All-in-One es la marca comercial de las soluciones verticales (soluciones que son específicas de la industria o del país) basadas en la tecnología de SAP NetWeaver y desarrollada con colaboradores de SAP. SAP Business All-in-One cuenta con las siguientes características: Permite a las empresas aprovechar las mejores prácticas de los líderes de la industria a un precio fijo razonable. Y todo esto sobre una plataforma que las empresas no superarán.
●
●
●
Se puede utilizar como software local o ser alojado por un interlocutor de una empresa. Se basa en varios productos SAP con un foco en SAP ERP, SAP CRM y en el portafolio de SAP BusinessObjects.
●
Ofrece un portafolio de funciones específicas del sector basado en SAP Best Practices.
●
Se puede planificar fácilmente.
Más de 13.000 clientes de pequeñas y medianas empresas en más de 50 países ejecutan SAP Business All-in-One. Más de 1.000 interlocutores de SAP alrededor del mundo proporcionan implementación local y soporte de personalización para SAP Business All-in-One, otorgándole acceso a la asistencia de expertos en cualquier lugar. Los escenarios empresariales configurados previamente y los aceleradores de implementación se pueden colocar en funcionamiento en esta aplicación, en 8 a 16 semanas. Para obtener más información acerca de SAP Business All-in-One, consulte http:// www.sap.com/solutions/sme/businessallinone. Soluciones SAP La siguiente tabla muestra una comparación de las soluciones de SAP para empresas pequeñas y medianas:
6
Parámetros
SAP Business One
SAP Business ByDesign
SAP Business All-inOne
Resumen
Una aplicación integrada y simple para gestionar toda una empresa.
Una solución de gestión empresarial integrada y simple suministrada como software como servicio (SaaS).
Una solución integrada y completa de la industria para propulsar negocios de extremo a extremo.
© Copyright . Reservados todos los derechos.
Lección: Identificación de las piezas del portafolio SAP
Parámetros
SAP Business One
SAP Business ByDesign
SAP Business All-inOne
Se ajusta mejor a las empresas.
Para las empresas que superaron el software empaquetado solamente de contabilidad y necesitan reemplazar múltiples aplicaciones no integradas.
Para las empresas Para las siguientes que necesitan empresas: reemplazar ● Las empresas que soluciones puntuales, han superado las procesos manuales y soluciones hojas de cálculo puntuales, las aplicaciones personalizadas o existentes o el software ERP actual. ●
●
Las empresas que poseen soluciones actuales que quizá no satisfagan los requisitos específicos del sector o que no tengan funcionalidad fronteriza. Las empresas que están experimentando una mayor complejidad de procesos industriales y necesitan sistemas que puedan escalar para satisfacer los planes de crecimiento.
Tamaño de empresa
Hasta 100
100–500
Hasta 2.500
Personal TI y funciones
Poseen recursos TI limitados o externos
Poseen recursos TI limitados o externos
Posee personal TI interno
Modelo de despliegue On-premise u alojado On-demand por un interlocutor
On-premise u alojado por un interlocutor
Resumen de SAP Business Suite El portafolio de software de SAP se amplía y optimiza constantemente, y se adapta a las necesidades del mercado. Con el paso del tiempo, SAP ha desarrollado varias aplicaciones específicas del sector y agregó más productos al portafolio de software para empresas
© Copyright . Reservados todos los derechos.
7
Capítulo 1: Resumen del portafolio SAP
pequeñas y medianas. SAP permite la integración entre varias aplicaciones (módulos) de diferentes proveedores y a través de los límites de la empresa. Las aplicaciones de SAP Business Suite son una extensa familia de aplicaciones empresariales que permiten a las empresas gestionar sus cadenas de valores completas. Estas aplicaciones proveen a los usuarios de resultados consistentes a través de la red de una empresa y la flexibilidad necesaria para dirigir las situaciones dinámicas del mercado. Las aplicaciones también admiten procesos en toda la empresa. SAP Business Suite proporciona las siguientes características: Un abanico completo de soluciones empresariales
●
●
Una infraestructura tecnológica que combina apertura y flexibilidad con madurez y estabilidad
●
Interfaces para la integración de productos no SAP
●
Componentes que pueden adaptarse para cumplir múltiples requisitos empresariales
●
Numerosas funciones específicas del ramo
SAP Business Suite juega un rol central en las empresas. Varias empresas ya se benefician de las aplicaciones empresariales integrales y flexibles en SAP Business Suite, por sus funciones altamente evolucionadas. Estas funciones incluyen integración completa, funciones típicas de sector, ampliación ilimitada y colaboración fluida a través de Internet. Para obtener más información acerca de SAP Business Suite, consulte http://www.sap.com/ solutions/sme/business-suite. Arquitectura de SAP Business Suite
Figura 3: SAP Business Suite: Arquitectura
Consulte la figura para los componentes en la arquitectura de SAP Business Suite. Como se muestra en la figura, las aplicaciones centrales de SAP Business Suite son SAP ERP, SAP CRM, SAP Product Lifecycle Management (SAP PLM), SAP Supplier Relationship Management (SAP SRM) y SAP Supply Chain Management (SAP SCM). Estas aplicaciones admiten todos los procesos empresariales fundamentales de una empresa.
8
© Copyright . Reservados todos los derechos.
Lección: Identificación de las piezas del portafolio SAP
SAP ERP La aplicación de SAP ERP es una aplicación principal del mercado para optimizar la empresa y la TI reduciendo la complejidad de TI, aumentando la adaptabilidad y entregando más valor de TI a un menor coste que las soluciones tradicionales de ERP. Soporta los procesos empresariales completos y misión crítica para finanzas, gestión de recursos humanos, gestión de activos fijos, ventas, aprovisionamiento y otras funciones corporativas esenciales. SAP ERP también admite procesos específicos del sector, proporcionando funciones empresariales específicas del sector que se pueden activar en forma selectiva mediante el switch framework. Este framework mantiene estable el centro de la aplicación y ayuda a asegurar máximo rendimiento. SAP Customer Relationship Management La aplicación SAP CRM proporciona una plataforma integral para los profesionales de marketing, ventas y servicios, de modo que obtengan una inteligencia de cliente completa que puedan aprovechar para administrar de manera efectiva los clientes y los procesos relacionados con clientes. SAP CRM permite interacciones de clientes multicanal, que incluyen teléfonos móviles inteligentes, Internet y redes sociales. También ofrece una infraestructura de comunicaciones dedicada que ayuda a conectar a todos los usuarios en cualquier momento, en cualquier lugar. SAP Product Lifecycle Management, SAP Supplier Relationship Management y SAP Supply Chain Management SAP Product Lifecycle Management La aplicación SAP PLM ayuda a las empresas a gestionar, monitorizar y controlar toda la información relacionada al producto a lo largo del ciclo de vida completo del producto y del activo fijo y a través de la cadena logística ampliada. SAP PLM facilita la creatividad y libera el proceso de la innovación del producto de restricciones organizativas. SAP Supplier Relationship Management La aplicación SAP SRM proporciona una plataforma de aprovisionamiento que ayuda a las organizaciones en todas las industrias a mejorar su determinación central de fuente de aprovisionamiento y les permite interactuar con los proveedores a través de canales múltiples. SAP SRM acelera y optimiza todo el proceso de ciclo de aprovisionamiento completo al soportar los procesos integrados y al activar el cumplimiento del contrato que genera ahorros realizables. Los procesos integrados y un mejor cumplimiento del contrato generalmente producen grandes ahorros. SAP Supply Chain Management La aplicación SAP SCM permite a las empresas adaptar sus procesos de suministro en cadena a un entorno cambiante y competitivo. SAP SCM transforma las cadenas de suministro tradicionales de procesos lineales y secuenciales en redes de suministro abiertas, configurables y receptivas. En tales redes, las empresas centradas en los clientes y orientadas por la demanda pueden percibir y afrontar en forma más inteligente y rápida las dinámicas de suministro y de demanda en todo un entorno distribuido globalmente.
© Copyright . Reservados todos los derechos.
9
Capítulo 1: Resumen del portafolio SAP
For more information about the core applications of SAP Business Suite, see the following URLs: ●
SAP ERP – http://www.sap.com/solutions/business-suite/erp
●
SAP CRM – http://www.sap.com/solutions/business-suite/crm
●
SAP PLM – http://www.sap.com/solutions/business-suite/plm
●
SAP SRM – http://www.sap.com/solutions/business-suite/srm
●
SAP SCM – http://www.sap.com/solutions/business-suite/scm
Aplicaciones industriales SAP satisface los requisitos de procesos empresariales específicos para muchas industrias al complementar los procesos empresariales básicos comunes a todas las empresas grandes. Se brinda soporte para estos procesos específicos de la industria como parte de SAP ERP o como una aplicación de industria separada, como la aplicación SAP Dealer Business Management o la aplicación SAP Reinsurance Management, que se integra con las otras aplicaciones de SAP Business Suite. La arquitectura y la funcionalidad empresarial de las aplicaciones industriales son el resultado de un conocimiento y una comprensión profunda de SAP de los requisitos empresariales específicos de la industria y de los procesos empresariales. Los portafolios industriales de SAP se amplían continuamente al añadir nuevas aplicaciones que satisfacen las necesidades empresariales altamente especializadas de los clientes en los mercados de destino. La siguiente tabla enumera algunas de las aplicaciones de la industria que ofrece SAP: Sector industrial
Portafolio industrial
Industrias de fabricación
SAP for Aerospace and Defense SAP for Automotive SAP for Engineering, Construction, and Operations SAP for High Tech SAP for Industrial Machinery & Components
Industrias de procesos
SAP for Life Sciences SAP for Mill Products SAP for Mining SAP for Oil and Gas SAP for Chemicals
Industrias de consumidor
SAP for Consumer Products SAP for Retail SAP for Wholesale Distribution
10
© Copyright . Reservados todos los derechos.
Lección: Identificación de las piezas del portafolio SAP
Sector industrial
Portafolio industrial
Industrias de servicio
SAP for Media SAP for Professional Services SAP for Telecommunications SAP for Transportation and Logistics SAP for Utilities
Servicios públicos
SAP for Defense and Security SAP for Healthcare SAP for Higher Education & Research SAP for Public Sector
Servicios financieros
SAP for Banking SAP for Insurance
Aplicaciones adicionales y paquetes de ampliación Las aplicaciones adicionales entregan valor, están concebidas para usuarios empresariales especializados y ofrecen un alto grado de flexibilidad en un proceso. Las aplicaciones adicionales manejan procesos empresariales especializados comunes a un gran número de industrias, tales como aplicaciones de fabricación, soluciones SAP para autoID y serialización de artículos y aplicaciones para empresas móviles. SAP NetWeaver La plataforma de tecnología SAP NetWeaver proporciona una fundación fiable, segura y escalable para aplicaciones empresariales de ejecución, tales como aplicaciones SAP Business Suite y SAP BusinessObject. SAP NetWeaver asegura que empresas grandes pueden llevar a cabo los procesos empresariales críticos. Al igual que la base técnica para una arquitectura orientada al servicio (SOA), SAP NetWeaver ofrece un conjunto integral de funciones middleware en un entorno de software modular con el objetivo de reducir la complejidad de TI y aumentar la flexibilidad empresarial a través de infraestructuras TI heterogéneas. SAP NetWeaver ofrece a las organizaciones de TI el menor costo operativo y la mejor disponibilidad empresarial para las aplicaciones SAP a través de las infraestructuras TI heterogéneas mediante la gestión del ciclo de vida unificado, la gestión de identidad, las comunicaciones seguras y la supervisión global. Paquetes de ampliación SAP también posee un método demostrado para entregas de actualización continuas para SAP Business Suite y SAP NetWeaver, sin interrumpir las operaciones de la empresa. SAP proporciona paquetes de ampliación con colecciones de funciones empresariales nuevas y mejoradas que las empresas pueden desplegar en forma modular y según su propia planificación. Los paquetes de ampliación permiten a las empresas obtener ventajas de las innovaciones en curso, mientras se mantiene estable su software central. Los paquetes se introdujeron con la aplicación SAP ERP 6.0. Varios paquetes de ampliación han sido liberados desde el año 2006.
© Copyright . Reservados todos los derechos.
11
Capítulo 1: Resumen del portafolio SAP
Ahora, todas las aplicaciones centrales de SAP Business Suite están habilitadas para innovación continua mediante paquetes de ampliación. En el futuro, SAP continuará ofreciendo paquetes de ampliación para las aplicaciones base, que minimizará la necesidad de proyectos upgrade potencialmente perjudiciales.
Aplicaciones y componentes SAP
Figura 4: Aplicaciones y componentes SAP
SAP Business Suite proporciona numerosas aplicaciones para hacer frente a desafíos empresariales. Sin embargo, los submódulos de varias aplicaciones poseen requisitos similares o idénticos para las funciones empresariales. Es por ello que las diferentes aplicaciones contienen componentes de software similares en algunas partes. Un componente es la unidad de software más pequeña que puede producirse, suministrarse, instalarse y actualizarse por separado. Ejemplos de componentes son SAP ERP Central Component (ECC), SAP SCM y SAP NetWeaver Portal. Consulte la figura para un resumen de las aplicaciones y los componentes SAP.
DISCUSIÓN CON MODERADOR ¿Qué componentes o aplicaciones ofrecidos por SAP Business Suite utilizará realmente en su empresa?
RESUMEN DE LA LECCIÓN Ahora podrá: ●
12
Determinar los componentes del portafolio SAP que mejor se adapten a sus necesidades
© Copyright . Reservados todos los derechos.
Capítulo 1 Lección 2 13
Listado de las capacidades clave de SAP NetWeaver
RESUMEN DE LA LECCIÓN Este módulo explica el rol central de SAP NetWeaver Application Server (SAP NetWeaver AS) en SAP NetWeaver y las capacidades clave de SAP NetWeaver. Ejemplo empresarial Como administrador, desea conocer más acerca de SAP NetWeaver y el rol que tiene SAP NetWeaver AS en SAP NetWeaver. Por este motivo, será preciso conocer lo siguiente: ●
Comprensión de las capacidades clave de SAP NetWeaver
●
Comprensión sobre cómo acceder al mapa tecnológico de SAP NetWeaver
●
Comprensión de los casos de uso de SAP NetWeaver
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Enumerar las capacidades claves de SAP NetWeaver
Mapa tecnológico de SAP NetWeaver: Vista de capacidad La plataforma de tecnología SAP NetWeaver es una fundación fiable, segura y en escala para aplicaciones empresariales de ejecución, tal como aplicaciones SAP Business Suite y SAP BusinessObject. También permite a empresas grandes a llevar a cabo los procesos empresariales de misión crítica. SAP NetWeaver ofrece las ventajas siguientes: Como la fundación técnica para la arquitectura orientada al servicio (SOA), SAP NetWeaver brinda un amplio conjunto de funciones middleware en un entorno modular de software. Estas funciones ayudan a reducir la complejidad de TI y a aumentar la flexibilidad empresarial en todas las infraestructuras heterogéneas de TI.
●
●
●
SAP NewWeaver brinda organizaciones de TI con el menor costo operativo y la mejor disponibilidad empresarial para las aplicaciones SAP en todas las infraestructuras heterogéneas de TI. Las operaciones de bajo costo y la disponibilidad empresarial se realizan a través de una gestión de ciclo de vida unificada, de gestión de identidad, de comunicaciones seguras y de la supervisión global en SAP NetWeaver. SAP NetWeaver brinda la flexibilidad de integrar y ampliar los procesos empresariales que se ejecutan en SAP, en colaboradores certificados por SAP y en aplicaciones a medida. Esta flexibilidad proviene del contenido de integración predefinido y de servicios empresariales y las herramientas modelos que admiten desarrollo rápido en SAP NetWeaver.
© Copyright . Reservados todos los derechos.
13
Capítulo 1: Resumen del portafolio SAP
●
●
●
SAP NetWeaver admite la gestión de proceso empresarial, lo que aumenta la eficiencia, la integridad y la seguridad de los procesos empresariales de misión crítica. Los usuarios empresariales también pueden usar SAP NetWeaver para definir las reglas empresariales para asegurar la consistencia en la red empresarial. SAP NetWeaver integra y conecta a las personas, la información y los procesos empresariales a través de tecnologías y empresas. Permite a las empresas adaptarse a los cambios rápidamente. SAP NetWeaver garantiza que los procesos empresariales cruciales de una empresa son fiables, seguros y ampliables. Además, SAP NetWeaver permite a las empresas maximizar los beneficios de su software y de sus sistemas actuales. SAP NetWeaver consolida tecnologías no uniformes y bridan contenido empresarial predefinido, lo cual reduce el esfuerzo manual implicado en la actualización de este contenido. SAP NetWeaver se basa en una tecnología que usa estándares industriales y puede ser ampliada mediante herramientas de desarrollo conocidas.
Mapa tecnológico basado en capacidad de SAP NetWeaver
Figura 5: Mapa tecnológico basado en capacidad de SAP NetWeaver (Edición 2010)
El mapa tecnológico de SAP NetWeaver posee una estructura simple, como se muestra en la figura. La estructura facilita la referencia de las capacidades de SAP NetWeaver mediante los escenarios de aplicación, mientras admite un procedimiento más intuitivo de desglose para los componentes de SAP NetWeaver. El mapa tecnológico no se vincula a un producto específico de SAP NetWeaver o a una versión, pero contiene todas las capacidades proporcionadas por la plataforma SAP NetWeaver. SAP NetWeaver posee varias capacidades, tal como productividad de usuario, inteligencia empresarial (BI) y composición de proceso empresarial, como se muestra en la figura. Capacidades de SAP NetWeaver: Productividad de usuario, BI, Composición de proceso empresarial y EIM Productividad de usuario SAP NetWeaver puede ayudar a los usuarios y a los grupos a mejorar su productividad al brindar colaboración ampliada, gestión de conocimiento optimizado y búsqueda intuitiva en objetos empresariales y en contenido desestructurado.
14
© Copyright . Reservados todos los derechos.
Lección: Listado de las capacidades clave de SAP NetWeaver
SAP NetWeaver puede proporcionar acceso personalizado a aplicaciones de misión crítica y a datos mediante portales, ordenadores e interfaces móviles. La tecnología UI flexible de SAP NetWeaver permite a las organizaciones y colaboradores de TI construir sus propias aplicaciones de vanguardia. Business Intelligence Las soluciones de Business Intelligence (BI) de SAP brindan funcionalidad de BI integral, que puede permitir a los usuarios tomar decisiones efectivas e informadas basadas en datos y en análisis de datos. Las soluciones BI brindan acceso a la información para todos los usuarios, desde el analista de alto nivel hasta el usuario empresarial ocasional. Estas soluciones requieren una dependencia mínima en recursos y programadores de TI y permiten a los usuarios acceder, formatear, analizar, navegar y compartir información en toda la organización. Composición del proceso empresarial La composición de proceso empresarial permite a los usuarios diseñar, modelar, implementar, ejecutar, monitorizar, operar y perfeccionar procesos empresariales. Los clientes que utilizan SAP NetWeaver pueden concentrarse en el desarrollo modelo de las aplicaciones compuestas en lugar del tradicional enfoque basado en códigos para desarrollar estas aplicaciones. Gestión de información empresarial La gestión de información empresarial (EIM) es la actividad empresarial de crear, limpiar, integrar, gestionar, controlar y archivar los datos estructurados y desestructurados de una organización. Las actividades de EIM son compatibles con las familias de productos SAP: Enterprise data warehouse (EDW) management
●
●
Gestión de datos maestros
●
Integración de datos y control de calidad de datos
●
Gestión de metadatos
●
Gestión del ciclo de vida de la información
●
Enterprise content management
EIM puede ayudar a las organizaciones a integrar datos y a conciliar información empresarial en infraestructuras de TI heterogéneas y redes empresariales que son multisociedades. A su vez, la integración y la conciliación de datos ayudan a crear una solida base de datos de confianza para las iniciativas operacionales, analíticas y de control. SAP entrega soluciones de diferentes familias de producto, incluso SAP NetWeaver, SAP BusinessObjects EIM y ampliaciones de solución SAP. Mediante la gestión efectiva de la información de los activos fijos, las organizaciones pueden minimizar los esfuerzos de integración de datos, optimizar la ejecución completa del proceso empresarial y obtener una perspectiva empresarial fundamentada. Capacidades de SAP NetWeaver: SOA Middleware, Desarrollo personalizado, Gestión de seguridad y de identidad y Gestión del ciclo de vida de aplicaciones
© Copyright . Reservados todos los derechos.
15
Capítulo 1: Resumen del portafolio SAP
La arquitectura orientada a servicios (SOA) middleware SAP NetWeaver permite a las organizaciones de TI utilizar los servicios web basados en estándares para formar soluciones empresariales nuevas e innovadoras que satisfagan las cambiantes necesidades empresariales. En particular, SAP NetWeaver brinda SOA middleware que facilita la comunicación entre aplicaciones distintas. Desde una vista técnica, SOA middleware consiste en un repository y registro de servicios empresariales, en un Enterprise Services Bus y en herramientas de gestión SOA. Con SOA middleware, los profesionales de TI pueden basarse en una plataforma basada en estándares para acelerar la integración empresarial. Desarrollo personalizado Mediante SAP NetWeaver, los profesionales de TI pueden extender o ampliar las aplicaciones existentes. Los profesionales pueden crear aplicaciones personalizadas mediante lenguajes de programación ABAP o Java. Gestión de seguridad y de identidad Las organizaciones se enfrentan a un difícil desafío en el mundo consciente de la seguridad. Deben soportar límites empresariales transparentes, usuarios independientes de la ubicación y demandas crecientes para el cumplimiento de la normativa. Con SAP NetWeaver, las organizaciones de TI pueden introducir protecciones para su empresa, al mismo tiempo que se ayuda a los usuarios y los procesos empresariales pueden proceder libremente en las operaciones de seguridad. Gestión del ciclo de vida de aplicaciones La gestión de ciclo de vida de la aplicación brinda procesos, herramientas, servicios y un modelo organizacional para gestionar soluciones SAP y no SAP durante todo el ciclo de vida de la aplicación. En lugar de concentrarse solo en las fases individuales, SAP brinda un acercamiento holístico. Los resultados de una fase específica se pueden aprovechar en otras fases, debido a la integración provista por SAP Solution Manager. Este tipo de integración ayuda a implementar y operar soluciones de TI de manera más rápida y a costos más bajos. Tabla de asignación: Mapas tecnológicos de SAP NetWeaver La siguiente tabla ofrece una comparación entre las ediciones 2007 y 2010 del mapa tecnológico de SAP NetWeaver:
16
Mapa tecnológico de SAP NetWeaver: Edición 2007
Mapa tecnológico de SAP NetWeaver: Edición 2010
Permitir productividad del usuario
Productividad de usuario
Unificación de datos
Gestión de la información
Gestión de información empresarial
Gestión de la información
Gestión de eventos empresariales
Gestión de los procesos empresariales
Integración de procesos completos
Gestión del proceso empresarial, SOA middleware
Desarrollo personalizado
Desarrollo de composición y de aplicación
© Copyright . Reservados todos los derechos.
Lección: Listado de las capacidades clave de SAP NetWeaver
Mapa tecnológico de SAP NetWeaver: Edición 2007
Mapa tecnológico de SAP NetWeaver: Edición 2010
Gestión unificada del ciclo de vida
Lifecycle management
Aplicaciones para gobernabilidad y gestión de seguridad
Gestión de seguridad y de identidad
Consolidación
Gestión de ciclo de vida, gestión de la información
Diseño y desarrollo de Enterprise SOA
SOA middleware
How to Access the SAP NetWeaver Technology Map 1. Display the SAP NetWeaver Technology Map and demonstrate the key capabilities of SAP NetWeaver. a) Use the Web browser to open the SAP NetWeaver Technology Map. b) To access the SAP NetWeaver Technology Map, see: http://scn.sap.com/docs/DOC-8287 or http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/business_maps/guid/ eG1sLXVyaT17c21jLWhvc3R9L3NvY292aWV3L21jcGdldC5hc3A/ cGFja2FnZWlkPURFRTk4RDA3REY5RkE5RjFCM0M3MDAxQTY0RDNGNDYyJnZpZXc 9c21jcmVuZGVyMiZpZD0yMjcwRUFENjI5ODE0RDA1QTdFQ0VDRUNFQ0M4RDAwMi YmeHNsLWxpc3Q9c2RuX2dlbmVyYWxfcmVuZGVyLnhzbHQ7c2RuX2xpbmtyZXdyaX RpbmcueHNsdDtnZW5lcmF0ZUhUTUxfU0ROLnhzbHQmJnBhY2thZ2UtaWQ9REVFO ThEMDdERjlGQTlGMUIzQzcwMDFBNjREM0Y0NjImJnJlc291cmNldHlwZT1zZG5fc29s dXRpb25fY29tcG9zZXJfZnVsbHBhZ2UmJnRpdGxlPVNvbHV0aW9uIENvbXBvc2VyIE NvbnRlbnQ=? id=2270EAD629814D05A7ECECECECC8D002&fragID=&packageid=DEE98D07DF9F A9F1B3C7001A64D3F462 c) Explain each key capability.
SAP NetWeaver Application Server
Figura 6: SAP NetWeaver AS: Base de los sistemas SAP
© Copyright . Reservados todos los derechos.
17
Capítulo 1: Resumen del portafolio SAP
Algunos sistemas SAP (Componente central de SAP ERP, Portal de SAP NetWeaver, SAP CRM y SAP SRM) se basan en SAP NetWeaver AS y lo utilizan como un entorno de ejecución. Junto con una base de datos, SAP NetWeaver AS es la plataforma de aplicación de SAP NetWeaver. Propiedades de SAP NetWeaver Application Server
Figura 7: SAP NetWeaver Application Server
SAP NetWeaver AS es el resultado del desarrollo lógico de la tecnología de SAP Application Server (anteriormente conocido como SAP Basis), donde se pone especial atención a las aplicaciones basadas en la web. SAP NetWeaver AS cuenta con las siguientes características: Un entorno de tiempo de ejecución fiable y probado exhaustivamente, que ha sido desarrollado en un período de diez años
●
●
●
●
Un framework para ejecutar procesos empresariales complejos que cumplan altos estándares de seguridad Un entorno de desarrollo fiable y fácil de utilizar Soporte para estándares abiertos, tales como HTTP, HTTPS, SMTP, WebDAV, SOAP, SSL, SSO, X.509, Unicode, HTML, XML y WML, WS Policy, SOAP, WS Trust, Java SE, JSR, WSRP, y SAML
●
Altas posibilidades de ampliación
●
Soporte para diferentes sistemas operativos y plataformas de bases de datos
Las aplicaciones entregadas por SAP no siempre requieren ambos entornos de ejecución, ABAP y Java. Existen diferentes opciones de instalación para SAP NetWeaver AS.
18
© Copyright . Reservados todos los derechos.
Lección: Listado de las capacidades clave de SAP NetWeaver
Opciones de instalación para SAP NetWeaver Application Server Se dispone de las siguientes opciones de instalación para SAP NetWeaver AS: ● SAP NetWeaver AS ABAP Infraestructura completa, en la cual se pueden desarrollar y utilizar aplicaciones basadas en ABAP ●
SAP NetWeaver AS Java Infraestructura completa en la cual las aplicaciones compatibles con Java 2 Enterprise Edition (J2EE) se pueda desarrollar y utilizar
●
SAP NetWeaver AS ABAP + Java (pila doble) Infraestructura completa, en la cual se pueden desarrollar y utilizar aplicaciones basadas en ABAP y aplicaciones basadas en J2EE Future versions of SAP NetWeaver will not support dual-stack installations.
DISCUSIÓN CON MODERADOR ¿Qué ventajas obtienen los clientes de SAP al utilizar SAP NetWeaver?
SAP NetWeaver: Casos y capacidades de uso La siguiente tabla brinda los principales usos de SAP NetWeaver 7.3x y las capacidades de aplicación asignadas a los casos de uso: Caso de uso
Correspondiente capacidad de SAP NetWeaver
Aplicaciones compuestas creadas
SAP NetWeaver Composition Environment
Data warehousing
SAP NetWeaver Business Warehouse
Contenido de integración y de auto mantenimiento mediante el portal SAP NetWeaver
Integración de proceso SAP NetWeaver
Escenarios de integración de creación
Portal de SAP NetWeaver
Movilizar procesos empresariales
SAP NetWeaver Mobile
Desarrollo de aplicación de cliente (ABAP)
Todas las áreas que permiten desarrollo ABAP en AS ABAP
Los casos de uso ilustran cómo puede utilizar su implementación de SAP NetWeaver.
Nota: SAP NetWeaver Mobile está disponible solo como add-on a EHP para SAP NetWeaver 7.3. Para más información, véase la nota de SAP 1645275.
© Copyright . Reservados todos los derechos.
19
Capítulo 1: Resumen del portafolio SAP
Funcionalidad de SAP NetWeaver
Figura 8: SAP NetWeaver: Funcionalidad
SAP NetWeaver brinda la siguiente funcionalidad, como se muestra en la figura: ● Entorno de composición ●
Integración del proceso
●
Gestión del ciclo de vida de aplicaciones
●
Gestión de seguridad y de identidad
●
Plataforma de aplicación -
Servidor ABAP
-
Servidor Java
Nota: Para más información, consulte la Master Guide SAP NetWeaver 7.3 EHP1 en SAP Service Marketplace en http://service.sap.com/instguides. En SAP Service Marketplace, seleccione SAP NetWeaver → SAP NetWeaver 7.3 → Instalación → Master Guide para SAP Enhancement Package 1 para SAP NetWeaver 7.3. Alternativamente, consulte SAP Developer Network en http:// www.sdn.sap.com/irj/sdn/nw-73.
RESUMEN DE LA LECCIÓN Ahora podrá: ●
20
Enumerar las capacidades claves de SAP NetWeaver
© Copyright . Reservados todos los derechos.
Capítulo 1 Lección 3 21
Consideración de la estrategia de versiones de SAP
RESUMEN DE LA LECCIÓN Este módulo explica las diferentes fases que atravesará una solución SAP típica hasta su próximo upgrade a una versión superior. También explica la duración de la actualización que SAP garantiza para sus productos. Tell the participants how the SAP products they use will change over time, through either corrections and enhancements or upgrades. SAP supports these processes in many ways and not just by using SAP Solution Manager. Ejemplo empresarial Quiere información actualizada acerca de la disponibilidad de versiones de soluciones SAP para tomar una buena decisión de compra o upgrade de una solución SAP. Por este motivo, será preciso conocer lo siguiente: ●
Una comprensión de disponibilidad, actualización e información de actualización
●
Una comprensión de cómo acceder al documento de estrategia de release de SAP
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Encontrar información de actualización y de mantenimiento para las soluciones SAP
© Copyright . Reservados todos los derechos.
21
Capítulo 1: Resumen del portafolio SAP
Estrategia de disponibilidad y de mantenimiento de las soluciones SAP
Figura 9: Fases de entrega de software de SAP
La estrategia de disponibilidad y de mantenimiento SAP determina la disponibilidad de los nuevos releases del software SAP (releases o paquetes de ampliaciones del portafolio de SAP Business Suite, SAP NetWeaver y SAP Business Object incluidos). La estrategia también determina la duración y las condiciones del mantenimiento de los releases y las dependencias entre releases. Los envíos de releases de SAP y de los correspondientes paquetes de ampliación se presentan en el mercado en dos o tres fases de entrega, tales como beta, restringida y no restringida. Los paquetes de ampliación de SAP contienen desarrollos nuevos y ampliaciones de aplicación para productos, como el portafolio de SAP Business Suite, SAP NetWeaver y SAP Business Object. Fases de entrega beta y restringida Fase de entrega beta En algunos casos, SAP ofrece una entrega beta antes de la fase de entrega restringida (antes de la fecha de liberación al cliente). Las entregas beta se utilizan solo con fines de prueba. No están disponibles para el uso productivo. Fase de entrega restringida Los nuevos releases del software están disponibles solo para un restringido número de clientes. La fecha de liberación al cliente marca el inicio de la fase de entrega restringida. Durante esta fase, el nuevo release del software pasa por un proceso estándar, llamado Ramp-Up. Ramp-Up es el nombre dado al proceso de introducción en el mercado de nuevos productos o nuevos releases de software SAP. El software SAP se puede utilizar para una implementación productiva. Durante el Ramp-Up, el software se encuentra disponible solo para un limitado círculo de clientes, que solicitan a SAP para participar.
22
© Copyright . Reservados todos los derechos.
Lección: Consideración de la estrategia de versiones de SAP
El ramp-up sirve para tener en cuenta los deseos de los clientes antes de que el software de SAP concreto esté disponible para el público. Los participantes en el ramp-up tienen contacto directo con el entorno de desarrollo SAP y obtienen un amplio rango de soporte en la implementación de software SAP. Un ramp-up dura unos 6 meses.
Nota: Para obtener más información acerca del ramp-up, consulte el SAP Service Marketplace con el alias /ramp-up. Fase de entrega de libre utilización Con la conclusión exitosa del programa Ramp-Up de SAP, la fase de entrega no restringida de un release de SAP comienza en su fecha de liberación estándar. Tras la fecha del release estándar, todos los clientes pueden solicitar el nuevo software sin restricciones. La última versión disponible del software SAP se denomina release predeterminado. Cuando los clientes de SAP solicitan software de SAP, obtienen el release predeterminado actual. Estrategia de actualización de SAP
Figura 10: Estrategia de actualización de SAP
SAP admite su contrato de mantenimiento mediante SAP Service Marketplace. El contrato incluye paquetes de soporte, los cuales solucionan problemas dependientes del componente, que surgen con la utilización del software SAP. SAP ofrece estos support packages a determinados intervalos de tiempo.
Nota: La duración de la actualización general puede ser diferente para algunos productos de software de SAP. Por ejemplo, algunas aplicaciones principales de SAP Business Suite tienen una duración que se incrementa de manera significativa de la actualización general.
© Copyright . Reservados todos los derechos.
23
Capítulo 1: Resumen del portafolio SAP
La estrategia de actualización A 5-1-2 se presentó en 2004 para soportar las fases de actualización alineadas entre los releases de SAP. Para continuar brindando una estructura de soporte fuerte y confiable para las soluciones líderes de la industria, SAP extendió su estrategia 5-1-2 a 7-2, la cual es de una actualización general de siete años, con una opción adicional de dos años de la actualización ampliada. Algunas aplicaciones, tal como SAP Business One y las aplicaciones compuestas, no cumplen con las reglas de estrategia de mantenimiento. Poseen un mantenimiento general con una duración mínima de dos años y no ofrecen actualización ampliada. Como parte de SAP Enterprise Support, los clientes reciben actualización ampliada para los releases automáticamente seleccionados y sin cargo adicional. Se aplican reglas especiales para contenido. Extensión de mantenimiento de SAP Business Suite 7
Figura 11: Extensión de mantenimiento de SAP Business Suite 7
Mainstream maintenance for SAP NetWeaver 7.0x ABAP will be extended through December 2020 and for SAP NetWeaver 7.0x Java (also including dual-stacks) until December 2017. If Java-based components are used, an update to at least SAP ERP EHP4 must be carried out by December 2017.
Para más información, véase la nota de SAP 1648480. Tipos de mantenimiento Do not discuss the maintenance fee percentages in detail. It is not required in this technical course. For detailed information, customers should contact the SAP sales representatives. For more information, see SAP Notes 505060, 303751, and 52505. Están disponibles los siguientes tipos de actualización de SAP: ● Actualización general La actualización general comienza con la fecha de liberación al cliente y finaliza después de siete años. La actualización cubre las fases de entrega restringidas y no restringidas. ●
Actualización ampliada Los clientes pueden ampliar el período de soporte en el que las correcciones o los cambios legales se tienen en cuenta a cambio de una cuota de actualización superior.
24
© Copyright . Reservados todos los derechos.
Lección: Consideración de la estrategia de versiones de SAP
El alcance del soporte de todo el período de actualización ampliada es similar al alcance del soporte proporcionado durante la actualización general. SAP publica de antemano información sobre la disponibilidad y el alcance de la actualización ampliada. ●
Actualización específica de cliente No se ajusta a la release para dar solución a los requisitos externos después de cierto punto en el tiempo durante el ciclo de vida de un release. Tales requisitos incluyen la implementación de cambios legales o el soporte de nuevas tecnologías. El final de la actualización ampliada o el final del mantenimiento general marca el tiempo en cuestión, mientras no se ofrezca actualización ampliada. La actualización específica de cliente empieza en este momento.
Un release se introduce automáticamente en la actualización específica de cliente. No hay necesidad de solicitar un contrato adicional. Durante esta fase, los clientes reciben servicios de soporte similares a aquellos ofrecidos en la fase de actualización general, pero con algunas restricciones adicionales. Por ejemplo, SAP no entrega nuevos support packages o actualizaciones para cubrir modificaciones legales; además, las actualizaciones tecnológicas son limitadas La resolución de problemas es específica de cliente, lo que significa que a los clientes se cobra por solucionar problemas que SAP aún no conoce.
Nota: Para más información de la estrategia de mantenimiento, consulte SAP Service Marketplace, alias /mantenimiento. Consulte la nota SAP 52505 para detalles acerca del mantenimiento específico de cliente. Upgrade SAP brinda vías de upgrade para releases de SAP y los releases de contenido correspondientes. SAP también brinda acceso a procedimientos de upgrade para el release actual. Por lo general, los clientes pueden actualizar directamente de un release a otro mientras los releases estén en la fase de actualización general. Según las restricciones tecnológicas, una actualización de un release muy alejado del release actual del cliente quizá debe ejecutarse en más de un paso. Para facilitar actualizaciones fluidas, SAP proporciona un solapamiento adecuado de dos releases sucesivos para asegurar que el tiempo en que los clientes puedan actualizar de un release al siguiente es de un año al menos. Para los releases de contenido, el solapamiento es de al menos seis meses.
Nota: Para obtener más información acerca de upgrades, consulte SAP Service Marketplace, alias / upgrade.
© Copyright . Reservados todos los derechos.
25
Capítulo 1: Resumen del portafolio SAP
Historial de componentes de software seleccionados
Figura 12: La evolución de la funcionalidad base y empresarial
This section is intended to make customers aware of changes in the names of SAP software components. It also provides a good transition to how SAP actually supplies applications to customers. Discuss only the structure of the latest ERP Central Component or SAP NetWeaver systems in detail. An overly extensive history that includes every name change over the last few years (for example, mySAP.com → mySAP Business Suite → SAP Business Suite) can be rather confusing for those customers who are about to be introduced to the software and don’t know the history. In contrast, seasoned SAP users or administrators may find the overview slide very helpful for understanding the context.
La figura muestra el desarrollo histórico de los siguientes componentes: ●
●
La tecnología base (SAP Basis → SAP Web AS → SAP NetWeaver AS) La funcionalidad empresarial central (SAP R/3 → SAP R/3 Enterprise → SAP ERP Central Component)
Base técnica (servidor de aplicación) en SAP Cuando SAP ofrecía básicamente dos productos (SAP R/2 y SAP R/3), el desarrollo de la base técnica estaba estrechamente enlazado con el desarrollo de aplicaciones. Los nombres de release de SAP Basis correspondían a la versión SAP R/3. Por ejemplo, SAP Basis 4.0B era la base técnica para SAP R/3 4.0B. Con el tiempo, el portafolio SAP creció significativamente. Se crearon nuevos productos y requirieron más modificaciones y ampliaciones frecuentes de SAP Basis que SAP R/3. Esto marcó la transición de la clásica SAP Basis (última versión SAP Basis 4.6D) a SAP Web
26
© Copyright . Reservados todos los derechos.
Lección: Consideración de la estrategia de versiones de SAP
Application Server (SAP Web AS). Las nuevas tecnologías de Internet (Internet Communication Manager a partir de SAP Web AS 6.10) y la complementación del entorno ABAP clásico con Java o JEE (a partir de SAP Web AS 6.20) fueron hitos importantes. SAP Web AS 6.40 constituye la base técnica (también conocida como "plataforma de aplicación") de SAP NetWeaver 2004. SAP NetWeaver ofrece funciones ampliadas, como el componente SAP NetWeaver Business Warehouse (SAP NetWeaver BW), todas basadas en la plataforma de aplicación. Desde SAP NetWeaver 7.0 (antes SAP NetWeaver 2004s), los nombres y releases de producto se continuaron adaptando. SAP NetWeaver 7.0 se basa ahora en SAP NetWeaver AS. Mientras que los releases 7.1x y 7.20 de SAP NetWeaver AS se emplean solo con ciertos componentes (tales como SAP NetWeaver Process Integration (PI) y SAP NetWeaver Composition Environment (CE)), SAP NetWeaver 7.3 es una entrega completa de la pila tecnológica de SAP NetWeaver. Funciones ERP centrales Con los releases de SAP R/3, el desarrollo de la base técnica y las aplicaciones estaban interconectados, hasta SAP R/3 4.6C inclusive. Con SAP R/3 Enterprise (4.7), que se basa en SAP Web AS 6.20, se introdujo el concepto de SAP R/3 Enterprise Extensions. La aplicación central (antes conocida como una "solución") de SAP Business Suite es SAP ERP. El componente central del software de SAP ERP es SAP ERP Central Component (ECC). SAP ECC 5.00 puede considerarse el sucesor técnico de SAP R/3 Enterprise y se basa en un SAP Web AS 6.40. En el momento de redactar esta documentación, la versión actual era SAP ERP 6.0 (anteriormente: SAP ERP 2005), que incluye SAP ECC 6.00. SAP ECC 6.00 funciona en SAP NetWeaver AS 7.00 y en otros componentes. Los paquetes de ampliación disponen de extensiones funcionales para diferentes componentes de software. SAP NetWeaver AS 7.1x o 7.20 no se utiliza como la base técnica de un sistema SAP ERP Central Component. Y otros componentes de SAP NetWeaver, como SAP NetWeaver Process Integration (PI) y SAP NetWeaver Composition Environment (CE) ya requieren este nivel de release de SAP NetWeaver AS.
© Copyright . Reservados todos los derechos.
27
Capítulo 1: Resumen del portafolio SAP
28
© Copyright . Reservados todos los derechos.
Capítulo 1 Ejercicio 1 27
Acceso al documento de estrategia de release de SAP
Ejemplo empresarial Desea determinar el fin de la actualización ampliada de SAP Enhancement Package 6 para SAP ERP 6.0. Use el SAP Service Marketplace para encontrar el final de la actualización ampliada de SAP enhancement package 6 para SAP ERP 6.0.
Consejo: Este ejercicio requiere un usuario registrado en SAP Service Marketplace. Si no tiene acceso a su S-user, saltee este ejercicio.
If some or all of your students have no access to the SAP Service Marketplace, you may also run this exercise as an instructor demonstration. 1. ¿Cuándo finaliza la actualización ampliada para el paquete 6 de ampliación SAP para SAP ERP 6.0?
© Copyright . Reservados todos los derechos.
29
Capítulo 1 Solución 1 28
Acceso al documento de estrategia de release de SAP
Ejemplo empresarial Desea determinar el fin de la actualización ampliada de SAP Enhancement Package 6 para SAP ERP 6.0. Use el SAP Service Marketplace para encontrar el final de la actualización ampliada de SAP enhancement package 6 para SAP ERP 6.0.
Consejo: Este ejercicio requiere un usuario registrado en SAP Service Marketplace. Si no tiene acceso a su S-user, saltee este ejercicio.
If some or all of your students have no access to the SAP Service Marketplace, you may also run this exercise as an instructor demonstration. 1. ¿Cuándo finaliza la actualización ampliada para el paquete 6 de ampliación SAP para SAP ERP 6.0? a) Navegue a SAP Service Marketplace, alias o estrategia de release. Consulte https:// service.sap.com/releasestrategy. b) Seleccione SAP’s Release Strategy for Large Enterprises. Abra el documento denominado SAP’s Release Strategy for Large Enterprises for all Major Releases from 2005 onward. c) Dentro del documento, busque SAP ERP. Uno de los resultados lo guiará hasta la tabla con los detalles de SAP ERP. La actualización ampliada para SAP EHP 6 para SAP ERP 6.0 finalizará en diciembre de 2020.
30
© Copyright . Reservados todos los derechos.
Lección: Consideración de la estrategia de versiones de SAP
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Encontrar información de actualización y de mantenimiento para las soluciones SAP
© Copyright . Reservados todos los derechos.
31
Capítulo 1: Resumen del portafolio SAP
32
© Copyright . Reservados todos los derechos.
Capítulo 1
31
Evaluación de la formación
1. Las soluciones no SAP se pueden integrar en forma consistente con los procesos empresariales núcleo de los clientes mediante ___________________. Seleccione la respuesta correcta. X
A Una arquitectura orientada a servicios (SOA)
X
B SAP Customer Relationship Management (CRM)
X
C SAP ERP
X
D SAP NetWeaver
2. SAP Business All-in-One es la solución ideal para pequeñas y medianas empresas (que tienen hasta 2.500 empleados) con procesos estables, que deseen utilizar un sistema configurado previamente de SAP. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
3. SAP ERP no es compatible con procesos específicos del sector. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
4. Identificar las capacidades claves de SAP NetWeaver. Seleccione las respuestas correctas. X
A La arquitectura orientada a servicios (SOA) middleware
X
B Gestión de seguridad y de identidad
X
C Business intelligence
© Copyright . Reservados todos los derechos.
33
Capítulo 1: Evaluación de la formación
5. Identificar las distintas opciones de instalación para SAP NetWeaver Application Server (AS). Seleccione las respuestas correctas. X
A SAP NetWeaver AS ABAP
X
B SAP NetWeaver AS Java
X
C SAP NetWeaver AS ABAP + Java
X
D SAP NetWeaver AS C++
6. En la fase de actualización específica de cliente, los Support Packages se entregan a los clientes para resolver cuestiones del sistema y del cliente. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
7. ___________ se utiliza para resolver problemas (dependiente del componente), que surgen al utilizar el software SAP. Seleccione la respuesta correcta.
34
X
A Support packages
X
B Componentes de actualización ampliada
X
C Funciones ERP centrales
© Copyright . Reservados todos los derechos.
Capítulo 1
33
Respuestas a la Evaluación de la formación
1. Las soluciones no SAP se pueden integrar en forma consistente con los procesos empresariales núcleo de los clientes mediante ___________________. Seleccione la respuesta correcta. X
A Una arquitectura orientada a servicios (SOA)
X
B SAP Customer Relationship Management (CRM)
X
C SAP ERP
X
D SAP NetWeaver
2. SAP Business All-in-One es la solución ideal para pequeñas y medianas empresas (que tienen hasta 2.500 empleados) con procesos estables, que deseen utilizar un sistema configurado previamente de SAP. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
3. SAP ERP no es compatible con procesos específicos del sector. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
4. Identificar las capacidades claves de SAP NetWeaver. Seleccione las respuestas correctas. X
A La arquitectura orientada a servicios (SOA) middleware
X
B Gestión de seguridad y de identidad
X
C Business intelligence
© Copyright . Reservados todos los derechos.
35
Capítulo 1: Respuestas a la Evaluación de la formación
5. Identificar las distintas opciones de instalación para SAP NetWeaver Application Server (AS). Seleccione las respuestas correctas. X
A SAP NetWeaver AS ABAP
X
B SAP NetWeaver AS Java
X
C SAP NetWeaver AS ABAP + Java
X
D SAP NetWeaver AS C++
6. En la fase de actualización específica de cliente, los Support Packages se entregan a los clientes para resolver cuestiones del sistema y del cliente. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
7. ___________ se utiliza para resolver problemas (dependiente del componente), que surgen al utilizar el software SAP. Seleccione la respuesta correcta.
36
X
A Support packages
X
B Componentes de actualización ampliada
X
C Funciones ERP centrales
© Copyright . Reservados todos los derechos.
CAPÍTULO 2
Navegación
Lección 1 Navegación por sistemas SAP Ejercicio 2: Entrar al sistema y navegar en la pantalla
38 53
Lección 2 Rendimiento de navegación avanzada en SAP GUI Ejercicio 3: Funciones de llamada
56 63
OBJETIVOS DEL CAPÍTULO ●
Navegar a través de los sistemas SAP utilizando SAP GUI
●
Llamar funciones en sistemas basados en ABAP
© Copyright . Reservados todos los derechos.
37
Capítulo 2 Lección 1 36
Navegación por sistemas SAP
RESUMEN DE LA LECCIÓN Este módulo brinda un resumen de las opciones de navegación en los sistemas SAP. Conocerá los comandos de navegación básicos mediante la interfaz gráfica de usuario de SAP (GUI) para Windows. After completing this lesson, the participants will be able to log on to the system without errors. They will also be able to name and use the basic elements of an SAP GUI screen and log off from the system correctly. Course ADM100 covers how to configure SAP Logon. Ejemplo empresarial Desea saber sobre las opciones disponibles para sus usuarios para acceder a los sistemas SAP a través de SAP GUI. Por este motivo, se requieren los siguientes conocimientos: ●
Comprensión de las interfaces de usuario en el entorno SAP
●
Cómo iniciar sesión en el sistema
●
Cómo trabajar con la estructura de pantalla
●
Comprensión de SAP NetWeaver Business Client
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Navegar a través de los sistemas SAP utilizando SAP GUI
Interfaces de usuario en el entorno SAP La mayoría de las aplicaciones SAP se basan en SAP NetWeaver AS ABAP. Ejemplos de tales aplicaciones son SAP Customer Relationship Management (CRM) y SAP Supply Chain Management (SCM). Algunas aplicaciones y algunos componentes SAP, tales como SAP NetWeaver Portal, SAP NetWeaver Process Integration (SAP NetWeaver PI) y SAP NetWeaver Composition Environment (SAP NetWeaver CE), se basan en SAP NetWeaver AS Java. Algunas aplicaciones, tales como SAP Business One y SAP StreamWork, y soluciones como SAP Crystal solutions, no se basan por completo en SAP NetWeaver Application Server (SAP NetWeaver AS).
38
© Copyright . Reservados todos los derechos.
Lección: Navegación por sistemas SAP
Nota: Algunas soluciones SAP, como SAP Solution Manager, se basan en AS ABAP + Java. Dependiendo de su uso, las soluciones SAP utilizan interfaces de usuario separadas. Tecnologías de acceso diferente Los usuarios finales del sistema SAP utilizan frecuentemente determinadas tecnologías de acceso, pero los usuarios técnicos casi nunca las utilizan. La siguiente tabla enumera ejemplos de tecnologías de acceso: Producto SAP
Tecnología de acceso típica
SAP ERP
SAP GUI para Windows o SAP GUI para HTML
SAP NetWeaver Business Intelligence (BI)
Interfaz basada en navegador (varios navegadores posibles)
SAP Business ByDesign
Interfaz basada en navegador (varios navegadores posibles), software como servicio (SaaS)
Soluciones SAP Business All-in-One
SAP NetWeaver Business Client
Nota: En este curso, nos concentramos en SAP NetWeaver y su tecnología. Esta lista no abarca todos los productos SAP. Tampoco abarca todas las tecnologías de acceso posibles. Por ejemplo, se puede tener acceso a un sistema que utiliza SAP ERP mediante su navegador o SAP GUI para Java. SAP NetWeaver BI también es accesible mediante SAP GUI para Windows. La interfaz de presentación, SAP GUI, le permite a un usuario interactuar con los sistemas SAP basados en AS ABAP. SAP GUI utiliza las funciones provistas por el entorno de presentación relevante. SAP GUI se basa en la guía de estilo de Windows y se encuentra disponible para varias plataformas. Ofrece las misma funciones para cada plataforma. Existen varios tipos de SAP GUI, que pueden operar todos de la misma forma, independientemente de la plataforma subyacente.
© Copyright . Reservados todos los derechos.
39
Capítulo 2: Navegación
Variantes de SAP GUI
Figura 13: Variantes de SAP GUI
La figura muestra los tipos de SAP GUI y su flujo de comunicación con el despachador ABAP o Internet Communication Manager (ICM).
Nota: Los términos oficiales de SAP GUI son SAP GUI para entorno Windows, SAP GUI para entorno Java y SAP GUI para Java. Estos términos están disponibles solo en inglés. Familiarmente, los términos SAP GUI para Windows, SAP GUI para Java o Java GUI, y Web GUI, se utilizan como sinónimos con los términos oficiales. Los términos familiares se utilizan con frecuencia.
Atención: Las variantes de SAP GUI solo son aptas para trabajar con sistemas SAP basados en AS ABAP. SAP GUI para Java no ofrece acceso a los sistemas SAP basados en AS Java. El nombre SAP GUI para Java se refiere a su tecnología de implementación. Esta GUI se ha implementado en Java y se puede utilizar en front ends que no ejecute un sistema operativo Windows (por ejemplo, front ends que ejecutan Mac OS X o Linux). Para acceder a las aplicaciones SAP basadas en AS Java se utiliza un navegador.
40
© Copyright . Reservados todos los derechos.
Lección: Navegación por sistemas SAP
SAP GUI SAP GUI para el entorno Windows (SAP GUI para Windows) es la implementación de SAP GUI en un entorno Microsoft Windows. SAP GUI para Windows esta escrito en C o C++, se ejecuta en plataformas basadas en Windows y permite todas las transacciones en un sistema SAP. El flujo de datos entre la capa de presentación y la capa de aplicación no se compone de pantallas preparadas, sino de información lógica y compacta sobre los elementos de operación y las entradas del usuario (protocolo DIAG). El volumen de datos transferidos para cada modificación de pantalla es de unos pocos KB, de manera que puede conectar fácilmente los servidores de presentación por WANs. SAP GUI para entorno Java (SAP GUI para Java) se escribe en Java y es la implementación independiente de plataforma de SAP GUI. Como SAP GUI para entorno Windows, esta GUI también utiliza el protocolo DIAG. Puede instalar SAP GUI en front-end o en el terminal server. Si instala SAP GUI en un terminal server, puede acceder al mismo mediante clientes terminales. SAP GUI para HTML requiere SAP Internet Transaction Server (ITS), que forma parte de AS ABAP, en el lado del servidor, y un navegador web en el lado cliente. SAP ITS ofrece los servicios necesarios para crear respuestas, dentro del sistema SAP, en formato HTML. Las respuestas se transfieren al servidor web o al cliente web fuera del sistema SAP, utilizando el ICM de AS ABAP. La ventaja principal de SAP GUI para HTML es que es fácil de instalar en el front-end. Requiere una instalación de navegador.
Nota: Puede encontrar más información acerca de los tipos de SAP GUI en las siguientes notas SAP: ●
●
●
Nota SAP 66971: Plataformas SAP GUI compatibles Nota SAP 314568: Funcionalidad/limitaciones/comportamiento especial de SAP GUI para HTML Nota SAP 146505: SAP GUI para el entorno Java (GUI independiente de plataforma)
●
Nota SAP 138869: SAP GUI en el servidor de terminal Windows (WTS)
●
Nota SAP 147519: Estrategias y plazos de actualización para SAP GUI
© Copyright . Reservados todos los derechos.
41
Capítulo 2: Navegación
Entrada al sistema
Figura 14: El programa SAP Logon
Se puede acceder a la mayoría de las soluciones ofrecidas por SAP utilizando SAP GUI. SAP Logon es un programa de Windows, que arbitra entre el sistema SAP y SAP GUI. Los pasos para acceder a un sistema SAP mediante SAP Logon son los siguientes: 1. SAP Logon muestra una lista de sistemas SAP. Esta lista se toma de un fichero en el frontend, saplogon.ini, que se encuentra configurada previamente en forma centralizada y es configurada por los usuarios finales. Selecciona el sistema al cual desea entrar. Durante la entrada al sistema, SAP Logon permite una distribución dinámica de usuarios utilizando los recursos disponibles para el sistema seleccionado. 2. Al entrar a un sistema SAP, se le solicita un nombre de usuario y una contraseña, entre otras cosas. Si ha implementado un entorno Single Sign-On (SSO), es posible que no tenga que indicar esta información. Cuando inicie sesión, también seleccione un mandante determinado del sistema SAP.
Consejo: Los mandantes corresponden a entidades empresariales independientes y se pueden utilizar para representar una empresa en un sistema SAP. Esto significa que si un sistema SAP tiene varios mandantes, varias empresas pueden representarse y estar activas simultáneamente en ese sistema. El mandante tiene un campo clave correspondiente en las tablas de la base de datos utilizadas por dicho sistema SAP. Al trabajar en un mandante, usted solo tiene acceso a datos comerciales del mismo mandante. También puede seleccionar un idioma de entrada al sistema soportado por el sistema. La instalación estándar de SAP incluye alemán e inglés, pero puede instalar otros idiomas. La cantidad de idiomas instalados determina los idiomas que su sistema soporta. 3. En la pantalla de inicio de sesión, puede utilizar el botón de clave de acceso nueva para modificar su clave de acceso. Como máximo puede modificar una vez por día su clave de acceso. En el curso de una sesión de entrada al sistema, puede trabajar en varias sesiones de SAP GUI al mismo tiempo. Su administrador de sistema puede utilizar un parámetro de sistema para definir cuántas sesiones se permiten para cada entrada al sistema SAP.
42
© Copyright . Reservados todos los derechos.
Lección: Navegación por sistemas SAP
Para detalles sobre restricciones de entrada al sistema, consulte la nota SAP 12466. Las notas SAP contienen información detallada de ciertas funciones o correcciones para errores conocidos en los productos SAP. Puede tener acceso a las notas SAP a través, por ejemplo, de SAP Service Marketplace en Internet, utilizando un usuario válido (S-user) y una clave de acceso. Para obtener más información sobre notas SAP, haga clic en https:// service.sap.com/notes. Six SAP GUI sessions (processing windows) are the default for a logon session. The default for parameter rdisp/max_alt_modes is six sessions for each logon. The number of sessions cannot be set differently for each user. The number specified in the system applies to all users of the system or the logon instance.
La imagen de acceso de un sistema SAP
Figura 15: La imagen de acceso de un sistema SAP
Los datos de usuario en los sistemas SAP se denominan registros maestros de usuario. Un mandante SAP almacena el registro maestro de usuario en el sistema. Esto significa que solo podrá entrar al sistema en aquellos mandantes en los que exista su usuario (registro maestro). Si su usuario solo existe para el mandante 100, podrá acceder correctamente al mandante 100. Si puede acceder a más de un mandante, tiene más de un registro maestro de usuario, los cuales le permiten realizar varias actividades según el mandante al que acceda. Su administrador del sistema puede agregar texto a su imagen de acceso. Para visualizar los pasos para añadir texto a la pantalla de entrada al sistema, consulte la nota SAP 205487: Texto propio en la pantalla SAP GUI Logon. Los múltiples intentos de entrada al sistema en un sistema SAP se registran en el sistema tanto por razones de seguridad como por razones de licencia. Si el mismo usuario entra al sistema más de una vez, entonces, por cada inicio de sesión subsiguiente, el sistema visualiza un mensaje de advertencia. Este mensaje ofrece las siguientes opciones para el usuario: ● Continuar con la actual entrada al sistema y finalizar las demás entradas existentes.
© Copyright . Reservados todos los derechos.
43
Capítulo 2: Navegación
●
●
Continuar con la actual entrada al sistema sin finalizar otras entradas existentes (esto se registra en el log; SAP se reserva el derecho de visualizar el log). Finalizar esta entrada al sistema.
La segunda opción se puede desactivar a nivel central y de todo el sistema. Para cambiar la clave de acceso inicial Utilice la clave de acceso inicial que se le ha asignado para entrar al sistema por primera vez. Durante el primer intento de entrada al sistema, el sistema le solicita cambiar y grabar su clave de acceso. Por motivos de seguridad, es aconsejable cambiar la clave de acceso de vez en cuando. Realice los siguientes pasos para modificar su clave de acceso: 1. Indique su nueva clave de acceso en los campos Clave de acceso nueva y Repita su clave de acceso. Puede trasladarse entre estos campos mediante un clic con el ratón o con el tabulador. Tenga en cuenta que se pueden establecer numerosas reglas con respecto a la estructura de la contraseña en su sistema.
Figura 16: Ventana de diálogo para cambiar la clave de acceso
2. Seleccione
(Continuar) para grabar su nueva clave de acceso.
Para volver a cambiar la clave de acceso modificada El usuario puede cambiar su clave de acceso una vez al día como máximo en la imagen de acceso inicial. En cambio, los administradores de usuarios con autorización para la transacción SU01 pueden modificar las claves de acceso cuantas veces lo deseen. De hecho, el administrador solo puede asignar nuevas claves de acceso iniciales. La contraseña inicial requiere realizar un cambio durante la siguiente entrada al sistema del usuario correspondiente. Los siguientes son los pasos para modificar nuevamente su clave de acceso: 1. En la imagen de acceso del sistema SAP, indique sus datos y su clave de acceso actual. 2. Seleccione el botón Nueva clave de acceso. 3. Modifique su clave de acceso y grabe sus datos. System parameters with the prefix login/* influence the password response in the SAP system. Parameter login/password_expiration_time, for example, specifies the number of days after which a user has to change his password.
44
© Copyright . Reservados todos los derechos.
Lección: Navegación por sistemas SAP
Estructura de pantalla SAP Easy Access
Figura 17: Pantalla SAP Easy Access
Una vez que ha entrado exitosamente al sistema, aparece la pantalla inicial del sistema SAP (pantalla de SAP Easy Access). La pantalla SAP Easy Access es la pantalla inicial por defecto en los sistemas SAP. El panel de la izquierda de la pantalla consta de una jerarquía de árbol de los menús disponibles para usted en el sistema SAP. Puede utilizar el lado derecho de la pantalla para visualizar el logo de su empresa. Su administrador de sistema pone a su disposición este gráfico de manera central. Los usuarios individuales no pueden personalizar dicho gráfico. Puede obtener una descripción detallada de los pasos a seguir para configurar el gráfico en la pantalla SAP Easy Access en Extras → Información de gestión, si posee la correspondiente autorización. Tenga en cuenta que el gráfico se almacena en el sistema y se transporta al front end cada vez que entra un usuario. Dado que el transporte se realiza en forma comprimida, el gráfico no debe exceder los 20 KB. También puede impedir que el gráfico sea visualizado con una de las siguientes opciones: ● Seleccione la configuración Conexión de velocidad baja en SAP Logon. Consulte la nota SAP 161053: Mediante SAP GUI en WAN. ●
Seleccione Extras → Opciones en la pantalla SAP Easy Access.
© Copyright . Reservados todos los derechos.
45
Capítulo 2: Navegación
Elementos de pantalla en SAP GUI
Figura 18: Elementos de pantalla en SAP GUI
Aparece una pantalla típica (con algunos elementos comunes) si selecciona la etiqueta Predeterminados en Sistema → Perfil de usuario → Datos propios. A continuación, verá la pantalla mostrada en el gráfico con los datos de su usuario. Una interfaz de usuario SAP puede, por ejemplo, contener los siguientes elementos simples de pantalla: ●
Barra de menús
●
Barra de herramientas del sistema
●
Campo de comandos
●
Barra de título
●
Barra de botones
●
Etiquetas
●
Casillas de selección de campos de entrada
●
●
Botones de selección Barra de status
Puede iniciar las aplicaciones directamente indicando sus códigos de transacción en el campo de comandos. Puede mostrar y ocultar el campo de comando mediante el pequeño triángulo al lado del campo. Puede encontrar el código de transacción para una aplicación en el menú SAP en la pantalla SAP Easy Access, en la barra de status o en la aplicación misma en Sistema → Status. La barra de menús es la línea superior de cualquier diálogo del sistema SAP. Los menús visualizados aquí dependen de la aplicación que está siendo utilizada. Los menús también pueden contener menús en cascada.
46
© Copyright . Reservados todos los derechos.
Lección: Navegación por sistemas SAP
Los botones de la barra de herramientas estándar se muestran en todas las pantallas SAP Easy Access. Si los botones no se encuentran disponibles en una aplicación, están desactivados. Si se sitúa el cursor durante un instante sobre un botón, aparece una marca con el nombre o la función del botón. Si es apropiado, el sistema también visualiza la configuración de clave de función correspondiente. Las siguientes son las descripciones de los elementos de pantalla: ● La barra de título indica el nombre de la función que está utilizando actualmente. ●
●
●
●
●
●
La barra de herramientas de aplicación muestra los botones disponibles en la aplicación en la que se encuentra actualmente. Para mejorar en claridad las etiquetas se organizan varias subpantallas. Dentro de un grupo de campo las casillas de selección le permiten seleccionar varias opciones al mismo tiempo. Los botones de radio le permiten seleccionar solo una opción dentro de un grupo de campo. Los campos de entrada y los botones son elementos de pantalla adicionales. La barra de status muestra información sobre el status actual del sistema, como advertencias o errores. También puede cambiar la variante de visualización para mostrar, por ejemplo, el código de transacción de la transacción actual.
How to Work With the Screen Structure 1. Show how to work with the screen structure. a) On the SAP Easy Access screen, run transaction code GUIT to demonstrate the screen elements. On the individual screens of this transaction, examples of input fields, pushbuttons, radio buttons, and checkboxes are illustrated. Screen 700 shows the frequently used icons in the SAP system. The system table ICON contains all icons and their technical names. The behavior of the navigational arrows in transaction GUIT is also instructive. The Back pushbutton is not active, whereas the Exit and Cancel pushbuttons still work. b) You can also close transaction GUIT by entering the command /n. In addition, you can use other transactions to demonstrate the screen elements.
Para salir del sistema Los siguientes son los pasos para salir del sistema: 1. En la pantalla SAP Easy Access, seleccione Sistema → Salir.
© Copyright . Reservados todos los derechos.
47
Capítulo 2: Navegación
Consejo: Alternativamente, seleccione el botón Finalizar en la pantalla SAP Easy Access o indique el comando /NEND en el campo de comando. Si se encuentran abiertas varias sesiones de SAP GUI (sesiones de ventana), seleccione el botón Finalizar para cerrar solo la ventana activa. Aparece el campo de diálogo para salir del sistema solo en la última ventana.
Atención: El comando /NEX finaliza inmediatamente su sesión sin consultar primero con las ventanas de diálogo. Todas las sesiones de su sesión terminal se cierran y las entradas que no se han grabado se pierden. 2. Aparece una ventana de diálogo de Salida y le comunica que perderá los datos que no se hayan grabado al salir del sistema.
Figura 19: Ventana de diálogo de salida
3. Para salir, seleccione el botón Sí. Consejo: Desde el punto de vista del sistema operativo Windows, una sesión SAP es una aplicación normal. También puede cerrar las sesiones de SAP GUI mediante la combinación de teclas Alt + F4 en el sistema operativo. Cuando cierra la última ventana de su sesión, también se visualiza la ventana de diálogo de Salida.
48
© Copyright . Reservados todos los derechos.
Lección: Navegación por sistemas SAP
SAP NetWeaver Business Client
Figura 20: Iniciar SAP NetWeaver Business Client
SAP NetWeaver Business Client ofrece un aspecto visual y operativo unificado al trabajar en sistemas SAP basados en SAP NetWeaver. Por ejemplo, puede trabajar en los sistemas utilizando el portal de SAP NetWeaver, SAP Solution Manager, o SAP ERP mediante una interfaz similar.
Nota: Las siguientes Notas SAP pueden resultar útiles cuando comienza a trabajar con SAP NetWeaver Business Client: Nota SAP 1029940: Requisitos y limitaciones de NetWeaver Business Client Nota SAP 1400383: SAP BP: SAP NWBC 3.0 a partir de EHP4 para SAP ERP 6.0, ABAP Config Nota SAP 900000: NetWeaver Business Client: FAQ Opciones de conexión En nuestro entorno de entrenamiento, puede acceder al sistema DCC de SAP ECC mediante la transacción NWBC o SAP NetWeaver Business Client con las siguientes opciones de conexión: Opciones de conexión
Descripción
Nombre
ID de sistema de su sistema de formación
© Copyright . Reservados todos los derechos.
49
Capítulo 2: Navegación
Opciones de conexión
Descripción
URL
La URL para conectar SAP NetWeaver Business Client a un sistema SAP. Por ejemplo, http://server.:. Observe que la cadena de caracteres /sap/bc/nwbc depende del tipo de sistema con el cual desea conectarse.
Tipo
Por ejemplo, ABAP o lo que requiera el sistema al que desea conectarse
Mandante
Mandante al que desea conectarse
Idioma
El idioma que SAP NetWeaver Business Client debe utilizar para conectarse al sistema SAP (por ejemplo, EN o DE)
Descripción de SAP GUI Logon
Generalmente no necesita utilizar este campo. Consulte la ayuda de contexto para este campo para más información.
Comentario
Descripción en la pantalla SAP NWBC Logon
Atención: Para utilizar correctamente SAP NetWeaver Business Client junto con SAP Solution Manager, se requiere que el usuario en el sistema SAP tenga al menos un rol de puesto de trabajo asignado. Utilizar SAP NetWeaver Business Client
Figura 21: Utilizar SAP NetWeaver Business Client
50
© Copyright . Reservados todos los derechos.
Lección: Navegación por sistemas SAP
Luego de suministrar las credenciales correctas (pantalla de inicio de sesión no mostrada), podrá trabajar en el sistema SAP utilizando los roles especiales asignados a su usuario.
© Copyright . Reservados todos los derechos.
51
Capítulo 2: Navegación
52
© Copyright . Reservados todos los derechos.
Capítulo 2 Ejercicio 2 49
Entrar al sistema y navegar en la pantalla
Ejemplo empresarial Quiere trabajar en el sistema SAP Solution Manager. Entre al sistema de entrenamiento PSM y realice algunos ejercicios básicos en el sistema (la ruta del menú se refiere al menú estándar de SAP).
Consejo: Utilice los datos de entrada al sistema que le ha proporcionado su instructor.
1. Inicie el programa SAP Logon y cree una nueva entrada según la información que le haya proporcionado su instructor. Seleccione el botón Entrar al sistema. Indique el mandante, el nombre de usuario, la clave de acceso inicial y el idioma de trabajo que le indique el instructor. Cuando entre al sistema por primera vez, indique una nueva clave de acceso de su elección dos veces en la ventana que aparece. 2. ¿Cuál es el número máximo de sesiones paralelas de SAP GUI que puede abrir mediante Sistema → Crear sesión? 3. ¿Cuál es el nombre de la función a la que llega si selecciona Herramientas → Administración → Monitor → Supervisión de sistema → Resumen de usuario? ¿Qué código de transacción utiliza para llamar esta transacción en lugar de la ruta especificada del menú?
© Copyright . Reservados todos los derechos.
53
Capítulo 2 Solución 2 50
Entrar al sistema y navegar en la pantalla
Ejemplo empresarial Quiere trabajar en el sistema SAP Solution Manager. Entre al sistema de entrenamiento PSM y realice algunos ejercicios básicos en el sistema (la ruta del menú se refiere al menú estándar de SAP).
Consejo: Utilice los datos de entrada al sistema que le ha proporcionado su instructor.
1. Inicie el programa SAP Logon y cree una nueva entrada según la información que le haya proporcionado su instructor. Seleccione el botón Entrar al sistema. Indique el mandante, el nombre de usuario, la clave de acceso inicial y el idioma de trabajo que le indique el instructor. Cuando entre al sistema por primera vez, indique una nueva clave de acceso de su elección dos veces en la ventana que aparece. a) Siga la instrucción del ejercicio. 2. ¿Cuál es el número máximo de sesiones paralelas de SAP GUI que puede abrir mediante Sistema → Crear sesión? a) Este sistema de formación debería permitirle abrir hasta 6 sesiones SAP GUI. 3. ¿Cuál es el nombre de la función a la que llega si selecciona Herramientas → Administración → Monitor → Supervisión de sistema → Resumen de usuario? ¿Qué código de transacción utiliza para llamar esta transacción en lugar de la ruta especificada del menú? a) La función se llama Lista de usuario. Puede encontrar el código de transacción relevante seleccionando Sistema → Status. En este caso, el código de transacción es SM04. b) También puede visualizar el código de transacción de una transacción activa en la barra de status. c) De manera alternativa, puede visualizar permanentemente los códigos de transacción en la pantalla SAP Easy Access. Seleccione Extras → Opciones y active el campo Visualizar nombres técnicos. d) Una cuarta opción es visualizar los detalles al seleccionar la correspondiente entrada de menú y a continuación Extras → Detalles técnicos.
54
© Copyright . Reservados todos los derechos.
Lección: Navegación por sistemas SAP
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Navegar a través de los sistemas SAP utilizando SAP GUI
© Copyright . Reservados todos los derechos.
55
Capítulo 2 Lección 2 52
Rendimiento de navegación avanzada en SAP GUI
RESUMEN DE LA LECCIÓN Este módulo describe varios modos de llamar una función en los sistemas SAP y brinda conocimientos de la gestión del usuario y de menús y favoritos de SAP. Ejemplo empresarial Como usuario final, desea conocer cómo iniciar las funciones en el sistema SAP y la ayuda que brinda el sistema. Por este motivo, se requieren los siguientes conocimientos: ●
Comprensión del trabajo en el usuario y en los menús de SAP
●
Una comprensión de la gestión de favoritos
●
Los pasos para crear una lista de códigos de transacción
●
Una buena comprensión de las funciones de llamada
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Llamar funciones en sistemas basados en ABAP
Menús de usuario y de SAP
Figura 22: Lista de favoritos y menú de usuario
56
© Copyright . Reservados todos los derechos.
Lección: Rendimiento de navegación avanzada en SAP GUI
La pantalla SAP Easy Access se visualiza automáticamente después de haber entrado al sistema. La pantalla representa el punto de acceso estándar a un sistema SAP en SAP GUI para Windows. La barra de navegación de la parte izquierda de la pantalla contiene una estructura de árbol, que consiste en menú y entradas a favoritos. Puede adaptar las áreas de Favoritos según sus necesidades. Únicamente los administradores del sistema pueden modificar las entradas de menús de SAP y de usuario. You can configure the SAP and area menus by using SE43. The user menus are bound to authorization roles, which are set up using PFCG. El usuario final puede cambiar entre un menú de usuario basado en roles y el menú estándar de SAP (si las parametrizaciones del sistema lo permiten).
Consejo: Los administradores del sistema pueden utilizar la tabla USERS_SSM para determinar si los usuarios pueden cambiar entre el menú SAP y sus menús de usuario. La disponibilidad de los menús de usuario o SAP no afecta la autorización del usuario. Esto significa que un usuario siempre puede llamar funciones autorizadas utilizando un código de transacción, independientemente de la estructura de menú. Menú de usuario según rol Se crea un menú de usuario según rol basado en el rol asignado al usuario, y transferido al front end. Esto significa que tiene sentido mantener la menor cantidad de roles posibles ya que, en algunas circunstancias, muchos roles podrían tomar mucho tiempo de transferencia hacia el front end. Si un usuario tiene varios roles asignados, algunas funciones pueden repetirse en distintos menús de usuario. Si no desea que estas aparezcan dos veces, consulte la nota SAP 357693: Evitar redundancia en Easy Access (y las demás notas que se detallan) para obtener información sobre la identificación y eliminación de duplicados y preguntas relacionadas.
Consejo: Mientras tenga la autorización apropiada, también puede visualizar menús de usuario distintos de los que tiene asignados en su registro maestro de usuario. Para realizar esta acción, seleccione el botón Otro menú. Utilice el botón Crear rol para iniciar la transacción de actualización de roles, PFCG. El menú de usuario y los menús SAP se pueden estructurar de una manera bastante compleja. Es difícil recordar la ruta exacta de la transacción que busca. Las transacciones SEARCH_SAP_MENU y SEARCH_USER_MENU se pueden utilizar para buscar los menús correspondientes para un patrón de texto predefinido. El resultado de búsqueda se prepara en una vista de lista desde la cual puede obtener la vía de navegación. Las transacciones encontradas no pueden iniciarse directamente mediante doble clic.
© Copyright . Reservados todos los derechos.
57
Capítulo 2: Navegación
A further search option for SAP menu entries is transaction SDMO, which also allows you to search for a text pattern. Some transactions have to be started manually. They may not start if they are double-clicked.
Gestión de favoritos Además del menú de usuario o del menú SAP, el usuario también obtiene funciones en el área Favoritos. Las transacciones utilizadas con frecuencia, los enlaces web o los ficheros también se pueden almacenar en el área Favoritos. The favorites entries of a user are in the system tables SMEN_BUFFC and SMEN_BUFFI. Administrators can access these tables to make changes for large groups of users. La lista Favoritos contiene referencias a funciones del sistema SAP, enlaces a contenido de Internet o a ficheros en ordenadores front end de usuarios finales. Cada usuario final puede editar la lista de Favoritos según sus preferencias. Al principio la lista se encuentra vacía. Puede visualizar únicamente su propia lista de Favoritos. Dado que un sistema SAP almacena los datos en la lista de favoritos de cada usuario, un usuario podría tener diferentes colecciones de favoritos en distintos sistemas.
Consejo: El menú completo de Favoritos, incluidas las estructuras de carpetas, se puede copiar fácilmente cargándolo o bajándolo de un sistema SAP a otro sistema SAP. Los menús de Favoritos descargados se almacenan temporalmente en el ordenador front end.
The upload and download of favorites requires the corresponding authorizations for the authorization object S_GUI. It is possible that the user does not have authorization in the productive customer system to upload favorites. Menú de favoritos Para mejorar la estructuración de la lista de Favoritos, clasifique los favoritos en carpetas. Puede editar los favoritos en la pantalla SAP Easy Access seleccionando Favoritos. Puede mejorar las siguientes tareas mediante la utilización del menú de favoritos: ●
●
●
●
58
Puede agregar una función desde el menú de usuario (o menú de SAP) a su lista personal de favoritos mediante la selección de la función y marcando Favoritos → Añadir. Aquí, el acceso vía menús también se escribe con el texto de la entrada de favoritos hasta cierto punto. Si ha resaltado una entrada de menú utilizando el ratón, puede copiar el nodo seleccionado en el área Favoritos haciendo clic en el nodo con el botón derecho. Como alternativa, también puede arrastrar los elementos desde el área de menú utilizando el ratón y almacenarlos en el área Favoritos. Puede añadir URLs o enlaces a ficheros a su lista de favoritos seleccionando Favoritos → Añadir otros objetos. Haga clic en el símbolo de triángulo a la izquierda del símbolo de fichero para desplegar u ocultar la lista de favoritos.
© Copyright . Reservados todos los derechos.
Lección: Rendimiento de navegación avanzada en SAP GUI
Consejo: Para cambiar el nombre de una transacción en favoritos, resalte la entrada de favoritos correspondiente y seleccione el acceso vía menús Favoritos → Modificar. Puede cambiar y grabar el texto en la ventana de diálogo que se abre. Puede borrar entradas de Favoritos que ya no necesite. Al borrar las entradas borra el enlace a las funciones correspondientes de su lista de Favoritos. Si quiere borrar todo el menú Favoritos, resalte la entrada Favoritos y haga clic con el botón derecho para visualizar el menú de contexto disponible. Seleccione Borrar todos los favoritos.
How to Download and Upload a Favorites Menu 1. Demonstrate the download of your own Favorites menu. a) Save the data, for example, under C:\temp\fav.txt on your front-end computer. b) Delete the complete favorites list. c) Upload the favorites from the file you have just saved on the system.
Opciones para llamar una función
Figura 23: Opciones para llamar una función en un sistema SAP
Las opciones para llamar funciones en un sistema SAP son las siguientes: ● Indicando códigos de transacción en el campo de comandos ●
Seleccionando posiciones del menú SAP
●
Seleccionando posiciones del menú de usuario
© Copyright . Reservados todos los derechos.
59
Capítulo 2: Navegación
●
Seleccionando posiciones de la lista de Favoritos
●
Seleccionando posiciones de los menús en la barra de menús
Puede acceder a los menús en la barra de menús utilizando la combinación de teclas Alt + (# equivale a la letra subrayada de la posición de menú seleccionada) o Alt y navegar con el cursor utilizando las teclas de flecha en el teclado. Puede utilizar las teclas de acceso rápido para ir a la pantalla SAP Easy Access o el campo de comandos, y llamar funciones del sistema desde allí.
Consejo: Utilice las siguientes teclas para navegar utilizando el teclado: ● TAB le permite desplazarse de un elemento de campo al siguiente elemento dentro de un grupo de campos. ●
●
Ctrl + TAB le permite desplazarse de un grupo de campos al primer elemento del siguiente grupo de campos. Ctrl + / le permite desplazarse directamente al campo de Código OK.
Puede encontrar más accesos rápidos mediante Customizing de la configuración local (Alt + F12) → Ayuda SAP GUI. Puede utilizar la llave F1 en el campo de comando para visualizar las siguientes entradas posibles: ● /N para cancelar la transacción en curso ●
●
●
/NXXXX para llamar la transacción XXXX directamente desde otra transacción. Sin el prefijo solo puede llamar XXXX desde la pantalla SAP Easy Access. /O para visualizar el resumen de las sesiones de SAP GUI en su ordenador /OXXXX para llamar la transacción XXXX en una nueva ventana directamente desde otra transacción
●
/NEND para finalizar la sesión con una ventana de diálogo de confirmación
●
/NEX para finalizar la sesión sin una ventana de diálogo de confirmación
●
/I para borrar la ventana que está utilizando actualmente
Nota: Al presionar la tecla F4 en el campo de comandos no se visualiza la ayuda para entradas. En lugar de ello, la tecla enumera las últimas 15 entradas en el campo en su front end. Esta lista se almacena en el registro del front end y es válida para todas las sesiones en el front end, sin importar el sistema que se utiliza.
60
© Copyright . Reservados todos los derechos.
Lección: Rendimiento de navegación avanzada en SAP GUI
How to Create a List of Transaction Codes 1. Explain the options for calling functions by using either the mouse or the keyboard. Pay particular attention to navigation using transaction codes. There is a simple method for administrators to create their own lists of transaction codes. a) Select the entries required for the list from the table TSTCT and save them in Excel. b) The easiest way of doing this is to choose System → List → Save → Local file on the SAP Easy Access screen. End users do not need to create transaction code lists in this way because they have role-based menus. The significance of user menus and the option of switching to the SAP menu are also covered in this lesson.
© Copyright . Reservados todos los derechos.
61
Capítulo 2: Navegación
62
© Copyright . Reservados todos los derechos.
Capítulo 2 Ejercicio 3 57
Funciones de llamada
Ejemplo empresarial Como usuario final, familiarícese con las diferentes formas de llamar funciones. Identifique quién entra actualmente al sistema de formación PSM y cree un menú de Favoritos para su usuario. Tarea 1 Encuentre las diferentes formas de visualizar el resumen de usuarios. 1. Ejecute la transacción para visualizar una lista de los usuarios que han entrado al sistema. En la pantalla SAP Easy Access, seleccione Herramientas → Administración → Supervisar → Supervisar sistema → Resumen de usuarios. Observe que este acceso vía menús puede no estar disponible en su sistema de formación de manera predeterminada. En ese caso, introduzca /nS000 en el campo de comandos. 2. Para salir del resumen de usuarios, pulse la tecla F3 o el botón Atrás en la barra de herramientas. Ejecute el código de transacción SM04, el cual lo lleva directamente al resumen de usuarios.
Tarea 2 Creación de un menú de Favoritos. Grabe las transacciones utilizadas con frecuencia en un menú de Favoritos. 1. Para visualizar el resumen de usuarios, seleccione Herramientas → Administración → Supervisar → Supervisar sistema → Resumen de usuarios en la pantalla SAP Easy Access . Seleccione la entrada de la transacción. En la pantalla SAP Easy Access, seleccione Favoritos → Añadir. La transacción se graba en el área de Favoritos. 2. Añada las transacciones RSPFPAR, SEARCH_SAP_MENU y SEARCH_USER_MENU al menú de Favoritos sin desplegar el menú SAP. 3. ¿Puede distinguir entre las entradas de favoritos mediante el método utilizado para registrarlas? 4. Cree una carpeta Opciones de búsqueda en la que podrá almacenar ambas transacciones de búsqueda. 5. Averigüe con qué frecuencia y en qué lugar se almacena la transacción SM04 para el resumen de usuarios en el menú SAP.
© Copyright . Reservados todos los derechos.
63
Capítulo 2 Solución 3 58
Funciones de llamada
Ejemplo empresarial Como usuario final, familiarícese con las diferentes formas de llamar funciones. Identifique quién entra actualmente al sistema de formación PSM y cree un menú de Favoritos para su usuario. Tarea 1 Encuentre las diferentes formas de visualizar el resumen de usuarios. 1. Ejecute la transacción para visualizar una lista de los usuarios que han entrado al sistema. En la pantalla SAP Easy Access, seleccione Herramientas → Administración → Supervisar → Supervisar sistema → Resumen de usuarios. Observe que este acceso vía menús puede no estar disponible en su sistema de formación de manera predeterminada. En ese caso, introduzca /nS000 en el campo de comandos. a) Vea el ejercicio para la solución. 2. Para salir del resumen de usuarios, pulse la tecla F3 o el botón Atrás en la barra de herramientas. Ejecute el código de transacción SM04, el cual lo lleva directamente al resumen de usuarios. a) Vea el ejercicio para la solución.
Tarea 2 Creación de un menú de Favoritos. Grabe las transacciones utilizadas con frecuencia en un menú de Favoritos. 1. Para visualizar el resumen de usuarios, seleccione Herramientas → Administración → Supervisar → Supervisar sistema → Resumen de usuarios en la pantalla SAP Easy Access . Seleccione la entrada de la transacción. En la pantalla SAP Easy Access, seleccione Favoritos → Añadir. La transacción se graba en el área de Favoritos. a) Vea el ejercicio para la solución. Consejo: Alternativamente, puede utilizar una acción de arrastrar y soltar o el menú contextual para copiar transacciones en las áreas de favoritos. El menú contextual se abre haciendo clic con el botón derecho.
64
© Copyright . Reservados todos los derechos.
Lección: Rendimiento de navegación avanzada en SAP GUI
2. Añada las transacciones RSPFPAR, SEARCH_SAP_MENU y SEARCH_USER_MENU al menú de Favoritos sin desplegar el menú SAP. a) En la pantalla SAP Easy Access, seleccione Favoritos → Insertar transacción. b) En el campo Código de transacción, introduzca la transacción deseada. c) Seleccione el botón Continuar. d) Ejecute estos pasos en cada transacción. 3. ¿Puede distinguir entre las entradas de favoritos mediante el método utilizado para registrarlas? a) Sí; si se insertan mediante la selección previa en el menú, una parte de la información de la vía del acceso al menú se almacena como texto de favoritos. 4. Cree una carpeta Opciones de búsqueda en la que podrá almacenar ambas transacciones de búsqueda. a) En la pantalla SAP Easy Access, seleccione Favoritos → Insertar carpeta. b) En el campo Nombre de carpeta, introduzca opciones de búsqueda. c) Arrastre al fichero ambas transacciones de búsqueda SEARCH_SAP_MENU y SEARCH_USER_MENU. 5. Averigüe con qué frecuencia y en qué lugar se almacena la transacción SM04 para el resumen de usuarios en el menú SAP. a) Ejecute la transacción de búsqueda SEARCH_SAP_MENU. b) En el campo Buscar entrada de texto, introduzca SM04. c) La transacción SM04 se almacena tres veces en distintas rutas en el menú SAP, como se muestra en la siguiente tabla. Transacción
Acceso a la pantalla SAP Easy Access
SM04
Herramientas → Administración → Super visar → Supervisar sistema → Resumen de usuarios
SM04
Herramientas → Administración → Super visar → Rendimiento → Excepciones/ Usuario → Usuario activo → Usuario local
SM04
Herramientas → CCMS → Control/ Supervisión → Rendimiento → Excepcion es/Usuario → Usuario activo → Usuario local
Del mismo modo, puede buscar en el menú de usuario.
© Copyright . Reservados todos los derechos.
65
Capítulo 2: Navegación
RESUMEN DE LA LECCIÓN Ahora podrá: ●
66
Llamar funciones en sistemas basados en ABAP
© Copyright . Reservados todos los derechos.
Capítulo 2
61
Evaluación de la formación
1. Los datos de usuario en los sistemas SAP se denominan ______________________. Seleccione la respuesta correcta. X
A Registros de usuario
X
B Registros maestros de usuario
X
C Registros almacenados
2. Puede trabajar en solo una ventana (sesión) a la vez en un sistema SAP. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
3. Las siguientes cadenas de caracteres son entradas válidas del campo de comando en la pantalla SAP Easy Access. Seleccione las respuestas correctas. X
A /nend
X
B /nex
X
C ?SM04
X
D /nsm04
X
E Desde SAP Easy Access: SM04
X
F Desde SAP Easy Access: search_sap_menu
© Copyright . Reservados todos los derechos.
67
Capítulo 2: Evaluación de la formación
4. Identifique las afirmaciones que describen de manera precisa a un mandante en un sistema SAP. Seleccione las respuestas correctas. X
A Un mandante representa una unidad económica completamente independiente.
X
B Un mandante tiene su propia base de datos.
X
C Un mandante equivale a un cliente.
X
D Un mandante puede representar a una empresa entera.
5. Únicamente los ___________ pueden modificar las entradas de menús de SAP y de usuario. Seleccione la respuesta correcta.
68
X
A Usuarios actuales
X
B Responsables del sistema
© Copyright . Reservados todos los derechos.
Capítulo 2
63
Respuestas a la Evaluación de la formación
1. Los datos de usuario en los sistemas SAP se denominan ______________________. Seleccione la respuesta correcta. X
A Registros de usuario
X
B Registros maestros de usuario
X
C Registros almacenados
Los datos de usuario en los sistemas SAP se denominan registros maestros de usuario. Los registros maestros de usuario son almacenados en el sistema por un mandante. Esto significa que solo podrá entrar al sistema en los mandantes en los que exista su usuario (registro maestro). 2. Puede trabajar en solo una ventana (sesión) a la vez en un sistema SAP. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
Una vez que ha entrado al sistema, es posible trabajar en varias ventanas (sesiones SAP GUI) en paralelo.
© Copyright . Reservados todos los derechos.
69
Capítulo 2: Respuestas a la Evaluación de la formación
3. Las siguientes cadenas de caracteres son entradas válidas del campo de comando en la pantalla SAP Easy Access. Seleccione las respuestas correctas. X
A /nend
X
B /nex
X
C ?SM04
X
D /nsm04
X
E Desde SAP Easy Access: SM04
X
F Desde SAP Easy Access: search_sap_menu
Puede indicar códigos de transacción válidos directamente en la pantalla SAP Easy Access. Si está utilizando otra función, introduzca /n adelante del código de la transacción. /nend y /nex son dos opciones de salida distintas. ?SM04 no es una entrada válida. La entrada válida es search_sap_menu porque crea una pantalla de búsqueda para las entradas en el menú SAP. 4. Identifique las afirmaciones que describen de manera precisa a un mandante en un sistema SAP. Seleccione las respuestas correctas. X
A Un mandante representa una unidad económica completamente independiente.
X
B Un mandante tiene su propia base de datos.
X
C Un mandante equivale a un cliente.
X
D Un mandante puede representar a una empresa entera.
Los datos de todos los mandantes de un sistema SAP se almacenan en una única base de datos común. No obstante, estos datos se dividen por mandante, de manera que pueden administrarse y controlarse diferentes empresas en distintos mandantes. Un mandante no es un cliente en un sistema SAP. 5. Únicamente los ___________ pueden modificar las entradas de menús de SAP y de usuario. Seleccione la respuesta correcta. X
A Usuarios actuales
X
B Responsables del sistema
Únicamente los administradores del sistema pueden modificar las entradas de menús de SAP y de usuario.
70
© Copyright . Reservados todos los derechos.
CAPÍTULO 3
El núcleo del sistema
Lección 1 Explotando el servidor de aplicación SAP NetWeaver
72
Lección 2 Diferenciación de procesos SAP NetWeaver AS Java y ABAP Ejercicio 4: Determine la estructura de una instancia
78 93
Lección 3 Procesamiento de solicitudes AS ABAP Ejercicio 5: Enumerar los procesos de trabajo configurados en una instancia de AS ABAP
96 105
Lección 4 Explicación de procesos AS ABAP Ejercicio 6: Configuración y supervisión de las entradas de tabla de bloqueo Ejercicio 7: Imprimir un duplicado de pantalla en AS ABAP Ejercicio 8: Planificación de un informe simple en el fondo
108 121 127 131
OBJETIVOS DEL CAPÍTULO ●
Comprender la arquitectura de SAP NetWeaver AS
●
Identificar los procesos que se ejecutan en SAP NetWeaver AS
●
Planificar la arquitectura del sistema de los diferentes tipos de SAP NetWeaver AS
●
Describir el procesamiento de solicitudes en AS ABAP
●
Describir el procesamiento de transacciones en AS ABAP
●
Explicar los procesos ABAP y sus fines
© Copyright . Reservados todos los derechos.
71
Capítulo 3 Lección 1 66
Explotando el servidor de aplicación SAP NetWeaver
RESUMEN DE LA LECCIÓN Este módulo introduce la arquitectura principal de los sistemas SAP y los procesos de SAP NetWeaver Application Server (AS), basados en configuraciones simples de mandante y de servidor. El módulo también explica el término instancia. Ejemplo empresarial Durante la implementación de un sistema SAP, debe comprender la arquitectura de los sistemas SAP y determinar el modo en que se distribuirán los procesos del sistema SAP requeridos entre el hardware disponible. Por este motivo, se requieren los siguientes conocimientos: ●
Una comprensión de las configuraciones del mandante y del servidor
●
Una comprensión del término instancia
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Comprender la arquitectura de SAP NetWeaver AS
Términos básicos Los sistemas SAP se utilizan para ejecutar procesos o aplicaciones empresariales. Estas aplicaciones se deben implementar independientemente del entorno de hardware que se utilice (sistema operativo y base de datos) con el mayor alcance posible. SAP NetWeaver ofrece los siguientes entornos de tiempo de ejecución: ●
Entorno de tiempo de ejecución ABAP (AS ABAP)
●
Entorno de tiempo de ejecución Java (AS Java)
Entorno de tiempo de ejecución ABAP ABAP es un lenguaje de programación desarrollado por SAP. Muchas de las aplicaciones empresariales en el sistema SAP están escritas en ABAP. ABAP se ha optimizado para desarrollar aplicaciones empresariales con altas posibilidades de ampliación. Los clientes pueden utilizar el Workbench ABAP para desarrollar aplicaciones completamente nuevas o para ampliar y modificar las aplicaciones estándares SAP. Las aplicaciones se desarrollan o amplían utilizando la infraestructura de AS ABAP. AS ABAP proporciona el entorno de tiempo de ejecución para programas escritos en ABAP. SAP proporciona un entorno de tiempo de ejecución para los programas ABAP y Java. Entorno de tiempo de ejecución Java
72
© Copyright . Reservados todos los derechos.
Lección: Explotando el servidor de aplicación SAP NetWeaver
AS Java es un servidor de aplicación de acuerdo con el estándar Java 2 Enterprise Edition (J2EE). Java es un lenguaje de programación orientado a objetos e independiente de la plataforma, que se distribuye en varias áreas. El concepto Java permite el desarrollo de un extenso rango de aplicaciones, desde las aplicaciones clásicas a applets utilizados en sitios web hasta aplicaciones cliente/servidor. A partir de SAP Web Application Server 6.20, SAP ha provisto una completa infraestructura de tiempo de ejecución compatible con Java EE. Hasta SAP NetWeaver AS Java 7.0, la infraestructura era compatible con J2EE 1.3. AS Java 7.1x son compatibles con EE 5, y a partir de AS Java 7.3x son compatibles con EE6. La arquitectura de un servidor de aplicación conforme a la especificación Java EE es similar al entorno de tiempo de ejecución ABAP utilizado para las soluciones SAP. Ambos entornos de tiempo de ejecución son independientes de plataforma, se ejecutan en una arquitectura de varios niveles y tienen una lógica de presentación y empresarial separadas. En la tecnología SAP, utilizando Java EE, SAP Netweaver Application Server tiene las siguientes ventajas: ● La arquitectura de integración abierta SAP NetWeaver se integra perfectamente en la apertura de Java EE. ●
●
●
●
Java EE es una prueba más de la estrategia de independencia de plataforma aplicada por SAP. La arquitectura de Java EE Connector permite la integración estandarizada de las aplicaciones externas. Las tecnologías de servicios web son admitidas directamente por Java. La comunidad Java, que está en rápido crecimiento, brinda un acceso simple a los programadores experimentados.
Cliente y servidor: Definición de la terminología
Figura 24: Vistas orientadas al hardware y al software
Los conceptos de cliente y de servidor se pueden definir de las siguientes maneras:
© Copyright . Reservados todos los derechos.
73
Capítulo 3: El núcleo del sistema
●
●
En la vista orientada al hardware, el término servidor se refiere al servidor central de una red que proporciona datos, memoria y recursos para las estaciones de trabajo (clientes). En la vista orientada al software, tanto el cliente como el servidor se definen en el nivel de proceso (servicio). El proceso solicitando un servicio es el cliente, y el servidor es el proceso proprocionando el servicio.
En el contexto de sistemas SAP, los términos "cliente" y "servidor" se utilizan tal como se definen en la vista orientada al software.
Configuración cliente/servidor para sistemas SAP
Figura 25: Configuraciones cliente/servidor simples
Participants will learn about various configuration options and recognize in particular the significance of a special hardware layer for application server processes (scalability and logon load balancing). Los siguientes procesos se utilizan para operar con software de aplicaciones empresariales: ● Procesos de presentación (por ejemplo, para visualizar pantallas) ●
Procesos de aplicación (por ejemplo, para ejecutar aplicaciones)
●
Procesos de base de datos (por ejemplo, para gestionar y organizar bases de datos)
Al instalar y configurar un sistema SAP, es necesario que decida cómo distribuirá los procesos requeridos entre el hardware disponible. SAP ECC (SAP Enterprise Core Component) es un ejemplo de software de aplicación empresarial. La figura muestra diferentes tipos de configuraciones con relación al número de niveles de hardware utilizados. Configuraciones de una capa, de dos capas y de tres capas Configuración de una capa
74
© Copyright . Reservados todos los derechos.
Lección: Explotando el servidor de aplicación SAP NetWeaver
En la configuración de una capa, solo un ordenador realiza todas las tareas de procesamiento (procesos de base de datos, aplicación y presentación). Este es el procesamiento de unidad central clásico. Las configuraciones de una capa se utilizan para tests y demostraciones (por ejemplo, un sistema SAP en un ordenador portátil). Si varios usuarios desean trabajar en un sistema de configuración de una capa, el costo extra de hardware para cada usuario adicional es superior a los costes de implementación de niveles de hardware adicionales (por ejemplo, mover los procesos de presentación a otros hosts). Configuración de dos capas Los servidores de presentación especial utilizados para formar la interfaz gráfica generalmente implementan configuraciones de dos capas. Una configuración de dos capas con los procesos de presentación distribuidos puede mantener un buen rendimiento para un alto número de usuarios. No existe un incremento considerable en los costes de hardware comparado con una configuración de una capa. La carga resultante de los procesos de presentación se distribuye a los distintos ordenadores front-end y, de este modo, no influye en el rendimiento del host de base de datos. Otra posibilidad de configuración de dos capas es instalar sistemas de escritorio de gran potencia y utilizarlos para procesos de presentación y de aplicación (cliente/servidor de dos capas). Esta configuración es especialmente adaptable para aplicaciones que tienen altas demandas de procesador (por ejemplo, para programadores de simulaciones o de software). Una configuración tal se implementa en el entorno SAP solo para fines de prueba, dado que requiere administración adicional. Configuración de tres capas En una configuración de tres capas, cada capa se ejecuta en su host. Múltiples servidores de aplicación pueden trabajar simultáneamente con los datos de un servidor de base de datos. Si el número de usuarios supera un determinado límite superior, el host central, en el cual ejecutamos tanto los procesos de aplicación como de base de datos, se convierte en un cuello de botella. Para evitar un cuello de botella semejante, puede mejorar el rendimiento del sistema SAP distribuyendo los procesos de capa de aplicación en varios hosts. El agregado de una capa de hardware específicamente para los procesos de aplicación facilita la escalabilidad. Si el número de usuarios de SAP en un sistema aumenta con el tiempo, afecta negativamente el rendimiento del sistema. Para mejorar el rendimiento del sistema, se puede añadir otro host para los procesos de aplicación en la mayoría de los casos. En el entorno SAP Business Suite, las configuraciones de cliente/servidor más complejas de más de tres capas son teóricamente posibles y se utilizan en la práctica. Un nivel adicional podría ser un servidor web, por ejemplo. At this point, you could show the participants the type of configuration being used for the course (normally a two-tier configuration with distributed presentation). For this, use transaction SM51 followed by System → Status and the message that the SAP GUI process is running locally on the front end, for example.
© Copyright . Reservados todos los derechos.
75
Capítulo 3: El núcleo del sistema
Instancia
Figura 26: La instancia de un sistema SAP (ejemplo)
The section starts with the definition of the term instance for SAP NetWeaver AS. Clearly explain the terms central instance and central services instance. Una instancia es una unidad administrativa que combina componentes del sistema SAP juntos para proporcionar uno o más servicios. Los servicios proporcionados por una instancia se inician o se detienen juntos. Un perfil de instancia común se utiliza para configurar los parámetros de los componentes en una instancia. Cada instancia dispone de sus propias áreas de memoria intermedia. Una instancia se ejecuta en un ordenador físico, pero es posible que haya varias instancias en un mismo ordenador. Una instancia se identifica por el ID de sistema (SID) y el número de instancia. Consejo: Los términos Instancia SAP y Servidor de aplicación se usan frecuentemente como sinónimos. Al instalar un sistema SAP, dispone de la opción de separar los procesos del nivel de aplicación de los procesos que se encuentran en el nivel de base de datos. Esto significa que es posible instalar y operar la base de datos de un sistema SAP en un ordenador físicamente separado de las instancias del sistema SAP. Existe exactamente una base de datos para cada sistema SAP. La base de datos tiene el mismo ID de sistema (DB ID) que el sistema SAP. Instancia central La instancia central de un sistema SAP brinda servicios que no ofrece otra instancia del sistema. Para AS ABAP, la instancia central proporciona el servidor de mensajes y el proceso de trabajo de encolamiento.
76
© Copyright . Reservados todos los derechos.
Lección: Explotando el servidor de aplicación SAP NetWeaver
La instancia de servicios central proporciona el servicio de mensajes y el servicio de cola para AS Java. Para AS ABAP, estos servicios también se pueden mover a la instancia de servicios centrales ABAP por motivos de alta disponibilidad. Si los servicios se trasladan, los sistemas AS ABAP no podrían tener más una instancia central. Las otras instancias de un sistema se denominan generalmente instancias de diálogo. Si la instancia central y la base de datos (y para AS Java también la instancia de servicios central) están instaladas en el mismo ordenador, el ordenador se denomina sistema central. Sistema SAP El sistema SAP es un sistema de software instalado que proporciona un conjunto definido de funciones, que es parte a su vez de una solución SAP. Estas funciones se implementan en un conjunto de componentes de software. Un sistema SAP se instala y configura como una unidad. Consta de una base de datos, una o más instancias de servidor de aplicación (ABAP y/o Java), servicios centrales (tales como un servidor de mensajes y un servidor de cola) y componentes opcionales (tales como TREX y liveCache). El sistema se identifica por su ID de sistema SAP, que consta de tres letras o dígitos (por ejemplo, DCC). RESUMEN DE LA LECCIÓN Ahora podrá: ●
Comprender la arquitectura de SAP NetWeaver AS
© Copyright . Reservados todos los derechos.
77
Capítulo 3 Lección 2 72
Diferenciación de procesos SAP NetWeaver AS Java y ABAP
RESUMEN DE LA LECCIÓN Este módulo explica la arquitectura y los procesos de los diferentes tipos de SAP NetWeaver Application Server (SAP NetWeaver AS). Give an overview of all types of work processes, the services, and the tasks that they perform. Discuss the advantages of configuring a central instance (if the participants have not already configured the system in this way). This scenario can then be transferred to AS Java and the central service instance can be explained. Ejemplo empresarial Durante la implementación de un sistema SAP, debe establecerse la arquitectura de los sistemas SAP y el modo en que se distribuirán los procesos del sistema SAP requeridos entre el hardware disponible. Por este motivo, se requieren los siguientes conocimientos: ●
Una comprensión de los procesos AS ABAP
●
Una comprensión de cómo identificar los procesos que se ejecutan en SAP NetWeaver AS
●
Una comprensión de los tipos de SAP NetWeaver AS
●
Una comprensión de arquitectura AS Java
●
Una comprensión de arquitectura AS ABAP
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá:
78
●
Identificar los procesos que se ejecutan en SAP NetWeaver AS
●
Planificar la arquitectura del sistema de los diferentes tipos de SAP NetWeaver AS
© Copyright . Reservados todos los derechos.
Lección: Diferenciación de procesos SAP NetWeaver AS Java y ABAP
Procesos AS ABAP
Figura 27: Procesos AS ABAP
En AS ABAP, estos procedimientos ABAP incluyen el despachador y una cantidad de procesos de trabajo en el servidor de aplicación, dependiendo de los recursos de hardware, como se muestra en la figura. El despachador distribuye las solicitudes a los procesos de trabajo. Los siguientes son los procesos de trabajo disponibles: Los procesos de trabajo de diálogo cumplen todos los requisitos para la ejecución de los pasos de diálogo desencadenados por un usuario activo. Cada despachador requiere, por lo menos, dos procesos de trabajo de diálogo.
●
●
Los procesos de trabajo SPOOL transfieren un flujo secuencial de datos a las impresoras. Se necesita únicamente un proceso de trabajo SPOOL para cada sistema SAP. Es posible configurar más de un proceso de trabajo SPOOL para cada despachador.
Nota: Si un sistema no se utiliza para imprimir, se requiere incluso, por ejemplo, un proceso de trabajo SPOOL, para almacenar las listas generadas en el contexto del proceso de fondo en TemSe.
●
●
Los procesos de trabajo de actualización ejecutan órdenes de actualización. Similar a los procesos de trabajo SPOOL, necesita al menos un proceso de trabajo de actualización por sistema SAP. Puede configurar más de un proceso de trabajo de actualización por despachador. Los procesos de trabajo de fondo ejecutan programas que funcionan sin interactuar con un usuario. Para el normal funcionamiento de un sistema SAP, alcanzaría un único
© Copyright . Reservados todos los derechos.
79
Capítulo 3: El núcleo del sistema
proceso de fondo. Pero para una actualización o la importación de las solicitudes de transporte ABAP, necesita un segundo proceso de trabajo de fondo. Puede configurar más de un proceso de trabajo de fondo para cada despachador. ●
●
El proceso de trabajo de encolamiento administra la tabla de bloqueo en la memoria compartida. Esta tabla contiene los bloqueos de base de datos lógicos del entorno de tiempo de ejecución ABAP. Se necesita únicamente un proceso de trabajo de encolamiento para cada sistema SAP. La configuración de procesos de trabajo en cola adicionales se deben realizar en la misma instancia del primer proceso de trabajo en cola, ya que estos procesos de trabajo deben acceder a la misma tabla de bloqueo.
Resumiendo, el despachador de una instancia ABAP gestiona diferentes tipos de procesos de trabajo en su instancia, tal como diálogo, actualización, fondo, en cola y procesos de trabajo SPOOL. Estos procesos de trabajo se dedican a tareas distintas cuando se ejecutan los procesos empresariales en un sistema SAP. El administrador de un sistema SAP puede utilizar parámetros de perfil para configurar el número de procesos de trabajo de varios tipos.
Consejo: Los tipos y números de los procesos de trabajo a ser iniciado para cada instancia se configuran mediante el parámetro de perfil del sistema SAP.
Nota: Para aprender más acerca del número de procesos de trabajo ABAP a ser configurado para una instancia, consulte la nota de SAP 39412.
The following table summarizes the relevant profile parameters: Type
User Profile
Parameter
DIA
Responsible for dialog requests
rdisp/wp_no_dia
UPD
Responsible for update
rdisp/wp_no_vb
UPD2
Responsible for less timecritical update (optional)
rdisp/wp_no_vb2
BGD
Responsible for executing background jobs
rdisp/wp_no_btc
SPO
Responisble for processing output requests
rdisp/wp_no_spo
ENQ
Responsible for locks
rdisp/wp_no_enq
This is only a selection of the relevant dispatcher parameters. For lock mechanisms, for example, there are dedicated enqueue/* parameters.
80
© Copyright . Reservados todos los derechos.
Lección: Diferenciación de procesos SAP NetWeaver AS Java y ABAP
To learn more about the number of ABAP work processes to be configured for an instance, see SAP Note 39412.
Servicios adicionales en el ABAP Runtime System Además de los procesos de trabajo, el sistema de tiempo de ejecución ABAP proporciona los siguientes servicios (no se trata de procesos de trabajo) para la comunicación interna y externa: ● El Servidor de mensajes (MS) se ocupa de la comunicación entre los despachadores distribuidos dentro del AS ABAP, lo que permite la posibilidad de ampliar varios servidores de aplicación paralelos. El servidor de mensajes solo se configura una vez por cada sistema SAP. El proceso de gateway (GW) permite la comunicación entre sistemas SAP, o entre sistemas SAP y sistemas de aplicación externos. Hay un lector de gateway por cada despachador.
●
El Internet Communication Manager (ICM) permite la comunicación con el sistema SAP mediante protocolos web como HTTP. El ICM recibe solicitudes del cliente y las reenvía a un sistema SAP para su procesamiento. En un sistema ABAP + Java, el ICM reconoce si la solicitud es una llamada para AS ABAP o AS Java y reenvía la solicitud respectivamente. El ICM también puede dirigir solicitudes HTTP de un sistema SAP a un servidor Web y devolver la respuesta al sistema SAP desde el servidor Web. Puede configurar un máximo de un proceso ICM por servidor de aplicación (vista basada en software).
●
The Internet Graphic Server (IGS) is missing in this figure. To demonstrate the IGS in the SAPTEC course, the easiest thing to do is to call transaction SIGS (or report GRAPHICS_IGS_ADMIN). On the start page, confirm the suggested RFC destination. This takes you to the initial page for the IGS. The Internet Graphic Server (IGS) is an infrastructure that application developers can use to display graphics in an internet browser with minimal effort. The IGS is integrated into various SAP UI technologies from SAP GUI for HTML to WebDynpro ABAP/Java. The IGS offers a server architecture where data from an SAP system or another source can be used for generating graphical and non-graphical output. The IGS is available as a fixed component of SAP NetWeaver AS and is installed with every SAP NetWeaver AS installation (both for systems based on AS ABAP and for systems based on AS Java). As of SAP Web AS 6.20, there already is a stand-alone engine on Windows 32bit computers. You can choose between the stand-alone and integrated IGS for SAP Web AS 6.40 versions. From SAP NetWeaver AS 7.00, however, only the integrated IGS version must be used. The IGS has the following parts: ● Multiplexer (Mux), which administers incoming and outbound connections and distributes the enquiries among the appropriate port watchers ●
●
Port watchers, which connect to the Mux through TCP/IP and are the host applications for the IGS interpreter Interpreters, which are the plug-ins for the IGS. The interpreters take care of the generation of graphics and content (A number of interpreters are available for different types of graphics and content).
© Copyright . Reservados todos los derechos.
81
Capítulo 3: El núcleo del sistema
Use the following tools to administer the IGS: ● For AS ABAP Report GRAPHICS_IGS_ADMIN or transaction SIGS, where the report was encapsulated ●
For AS Java Web interface access using the URL http://(hostname):(port), whereby the Host Name is the name of the computer on which the IGS is installed and the Port is the port of the HTTP listener
For more details about the IGS, see SAP Note 454042.
SAP NetWeaver AS Java Processes 7.0x y anterior
Figura 28: SAP NetWeaver AS Java Processes 7.0x y anterior
Los siguientes procesos existen en AS Java: ● El despachador distribuye las solicitudes por los procesos de trabajo. ●
El proceso de servidor ejecuta las aplicaciones Java. Todos los procesos del servidor es de subproceso múltiple y puede procesar varias solicitudes en forma paralela. Es un contraste de procesos de trabajo ABAP. Cada despachador puede tener como mínimo un proceso de servidor y hasta 16 procesos de servidor.
Nota: Generalmente, menos procesos de servidor Java se configuran por despachador Java que los procesos de trabajo configurados por cada despachador ABAP. Se pueden configurar un máximo de 16 procesos de servidor Java por cada instancia.
●
82
El servicio de mensajes Java gestiona una lista de despachadores y procesos de servidor Java. Es el responsable de la comunicación dentro del entorno de tiempo de ejecución
© Copyright . Reservados todos los derechos.
Lección: Diferenciación de procesos SAP NetWeaver AS Java y ABAP
Java. El servicio de mensajes se configura solo una vez por sistema SAP en la instancia de servicios centrales Java. ●
●
●
El Enqueue Service Java gestiona los bloqueos lógicos que el programa de aplicación Java ejecutado fija en un proceso de servidor. El servicio en cola se configura solo una vez por sistema SAP en la instancia de servicios centrales Java. Por cada sistema SAP Java, existe un proceso SDM y se encuentra en la instancia central Java. El Software Deployment Manager (SDM) es la herramienta estándar utilizada para instalar componentes de software SAP NetWeaver AS Java.
Para 7.0x y versión anteriores, una instancia Java que no es de tipo Java CS (servicios centrales) tiene exactamente un despachador Java y requiere un mínimo de un proceso de servidor. Puede haber varias instancias instaladas en un host. Just like in the ABAP environment, every developer is responsible for requesting locks from the enqueue service and releasing them in the Java environment.
Procesos en SAP NetWeaver AS Java 7.1x y en versiones posteriores
Figura 29: Procesos en SAP NetWeaver AS Java 7.1x y en versiones posteriores
Un cluster AS Java se compone de varias instancias. Cada instancia posee un número de instancia y se ejecuta en una máquina virtual Java (JVM). Puede iniciar, detener y monitorizar las instancias por separado. Los procesos de AS Java 7.1x y versiones posteriores son las siguientes: ● La instancia de servicios centrales consiste en un servicio de mensaje, un servicio en cola y un servicio de gateway. Estos servicios son responsables respectivamente del intercambio de mensajes y del ajuste de carga con el cluster Java, la administración de bloqueo y la comunicación externa.
© Copyright . Reservados todos los derechos.
83
Capítulo 3: El núcleo del sistema
●
●
ICM trata solicitudes de mandantes y las despacha a los procesos de servidor disponibles. Los datos se transfieren desde el ICM a los procesos del servidor y para retornar, mediante Fast Channel Architecture (FCA), que permite una comunicación rápida y fiable entre el ICM y los procesos del servidor. ICM reemplaza el despachador Java. El proceso de servidor ejecuta las aplicaciones Java. El proceso es responsable de las solicitudes entrantes de procesamiento, las cuales son asignadas por el ICM. Cada proceso del servidor es de subproceso múltiple y puede procesar en forma simultánea un amplio número de solicitudes.
Tipos de SAP NetWeaver AS: Opciones de instalación (7.0 y versiones anteriores)
Figura 30: Posibles tipos de SAP NetWeaver AS (7.0x y versiones anteriores)
Quickly point out the installation options of SAP NetWeaver AS. Stress that the option chosen generally depends on the SAP system to be installed. If you install a system with SAP NetWeaver Portal, AS Java is installed. If you install a system with SAP NetWeaver Process Integration (PI), AS ABAP + Java is installed. An AS ABAP-based BI system and a separate AS Java- based BI Java system are installed during the installation of SAP NetWeaver BI. Según la aplicación o el producto utilizados, se instalan los siguientes tipos de servidores de aplicación: ● Sistema AS ABAP Este tipo de AS ofrece la infraestructura completa, donde se pueden desarrollar y utilizar las aplicaciones basadas en ABAP. ●
Sistema AS Java Este tipo de AS ofrece la infraestructura completa para el desarrollo y la utilización de las aplicaciones basadas en J2EE.
84
© Copyright . Reservados todos los derechos.
Lección: Diferenciación de procesos SAP NetWeaver AS Java y ABAP
●
Sistema AS ABAP + Java Este tipo de AS ofrece la infraestructura completa, en la cual se pueden desarrollar y utilizar las aplicaciones basadas en ABAP y en J2EE. Un sistema tal necesita instalarse solo si una solución lo solicita explícitamente, tal como SAP NetWeaver PI 7.0 ó SAP Solution Manager 7.1.
Una de las principales características de SAP NetWeaver AS es que el esquema ABAP de la base de datos almacena tablas ABAP, programas y datos de aplicación, mientras que el esquema Java almacena datos Java. Aquí, el entorno de tiempo de ejecución ABAP puede acceder al esquema ABAP de la base de datos. El entorno de tiempo de ejecución puede acceder al esquema Java. En un sistema ABAP + Java, varios entornos de tiempo de ejecución comunican en forma directa a través del SAP Java Connector (JCo). Posibles tipos de SAP NetWeaver AS (7.10 y posteriores)
Figura 31: Posibles tipos de SAP NetWeaver AS (7.10 y posteriores)
© Copyright . Reservados todos los derechos.
85
Capítulo 3: El núcleo del sistema
Arquitectura de AS ABAP
Figura 32: Arquitectura de AS ABAP (7.0x y versiones inferiores)
En AS ABAP 7.0x y en versiones anteriores, la instancia central se distingue por el hecho de que el servidor de mensajes y el proceso de trabajo de encolamiento se ejecutan allí. Al resto de instancias del sistema se las denomina instancias de diálogo. Alternativamente también puede denominar las instancias después de instalar los servicios. Para SAP NetWeaver AS ABAP, no se realizaron modificaciones desde un punto de vista arquitectónico entre 7.0x y versiones superiores. En 7.1 y anterior, solo los términos “instancia central” pasó a denominarse “Servidor de aplicación principal (PAS)” e “instancia de diálogo” pasó a denominarse “Servidor de aplicación adicional (AAS)”. Los tipos de procesos de trabajo en un servidor de aplicación determina los servicios proporcionados por el servidor de la aplicación. Un servidor de la aplicación puede asumir varios roles. Por ejemplo, un servidor de aplicación puede funcionar como un servidor de diálogo y de actualización, si brinda varios procesos de trabajo de diálogo y como mínimo un proceso de trabajo de actualización.
Nota: Se encuentra disponible un resumen de las instancias de AS ABAP en SM51. En la pantalla SAP Easy Access, seleccione Herramientas → Administración → Monitor → Supervisar sistema → Servidores. Utilice la transacción SM50 para visualizar un resumen de los procesos de trabajo en la instancia en la que actualmente se encuentra. También puede visualizar este resumen seleccionando Herramientas → Administración → Monitor → Supervisar sistema → Resumen de proceso en la pantalla SAP Easy Access. Servidor de mensajes Las funciones de un servidor de mensaje son las siguientes: Brindar a AS ABAP un servicio de mensajes central para la comunicación interna (por ejemplo para el inicio de actualizaciones, la solicitud y la liberación de bloqueos o el lanzamiento de órdenes de procesos de fondo).
●
86
© Copyright . Reservados todos los derechos.
Lección: Diferenciación de procesos SAP NetWeaver AS Java y ABAP
●
●
●
Proveer información acerca de las instancias del sistema que actualmente se encuentran disponibles. Permitir la comunicación entre procesos entre los despachadores ABAP de los servidores de la aplicación. El servidor de mensajes se instala exactamente una vez por sistema SAP. Realizar una distribución de carga de los usuarios a las instancias disponibles, si los usuarios entran a AS ABAP mediante grupos de inicio de sesión a SAP GUI para Windows o SAP GUI para Java.
La distribución de la carga, que tiene lugar durante la operación de acceso, también se conoce como distribución dinámica de usuarios. Después que el servidor de mensajes realiza la distribución de la carga, el SAP GUI se comunica directamente con el despachador. El usuario permanece dentro de esta instancia hasta que salga del sistema.
Nota: Está disponible un resumen de usuarios que han entrado al sistema en la instancia en la que también usted ha entrado, mediante la transacción SM04 (alternativamente, seleccione Herramientas → Administración → Monitor → Supervisión de sistema → Resumen de usuario). Puede ver en qué instancia a entrado al sistema a través de Sistema → Status. Si accede a AS ABAP mediante protocolos web en un navegador, tal como HTTP, el ICM recibe la solicitud. El ICM reenvía la solicitud al despachador de la instancia que se asigna después del ajuste de carga. El Gateway Reader acepta la comunicación de otros sistemas SAP mediante la Remote Function Call (RFC).
How to Determine Information about the Instance and Services in an ABAP System 1. Determine information about the instance and services in an ABAP system. a) On the SAP Easy Access screen, run transaction code SM51 and briefly mention the instances and services that are available there. b) If you wish, you can also point out the option of branching from SM51 to SM04 (user overview) and SM50 (process overview). Again, you can see the instance to which you are logged on by choosing System → Status. c) If you explain the work process distribution in SM50, it is useful to point out the V2 type of update work process (UP2).
© Copyright . Reservados todos los derechos.
87
Capítulo 3: El núcleo del sistema
Arquitectura de AS Java (7.0x y versiones anteriores)
Figura 33: Arquitectura de AS Java 7.0 y versiones anteriores
En AS Java 7.0x, diferencia la instancia central por el hecho que SDM se ejecuta allí. El servidor central de servicios de mensajes y el servidor de encolamiento ejecutan en la instancia central de servicios (CS). Al resto de instancias del sistema se las denomina instancias de diálogo. En AS Java 7.3 EHP1, la instancia Java consta de ICM y de uno o más procesos de servidores. Se discontinuó el proceso SDM.
Nota: La totalidad del entorno Java (todos los procesos y esquemas de base de datos) también se refiere a un cluster de Java. Los procesos individuales (despachador y servidor) se refieren al cluster Java como nodos. Puede obtener un resumen de los procesos Java que se iniciaron mediante la información de sistema del entorno de tiempo de ejecución (http://: /sap/ monitoring/ SystemInfo; por ejemplo, http:// twdf1234.wdf.sap.corp:50000, seleccione Información de sistema). You can show the participants the AS Java system information. You need an appropriately authorized user in the Java stack in order to display the system information.
88
© Copyright . Reservados todos los derechos.
Lección: Diferenciación de procesos SAP NetWeaver AS Java y ABAP
Arquitectura de AS Java (7.1x y versiones posteriores)
Figura 34: Arquitectura de AS Java (7.1x y versiones posteriores)
De manera análoga a AS ABAP, el servicio de mensajes de AS Java proporciona un servicio de mensajes central para la comunicación interna. El servicio de mensajes Java también ofrece información acerca de qué instancias y nodos del AS Java están disponibles. Cada nodo del cluster Java se puede comunicar directamente con el centro de mensajes. En AS Java, el Enqueue Service lleva a cabo los bloqueos lógicos. Cada nodo del cluster Java se puede comunicar directamente con el Enqueue Service. Cuando se accede a AS Java a través de un navegador, el despachador Java recibe solicitudes, que serán procesadas por los procesos de servidor.
How to Display Java System Information 1. Show the participants the AS Java system information. You need an appropriately authorized user in the Java stack in order to display the system information.
© Copyright . Reservados todos los derechos.
89
Capítulo 3: El núcleo del sistema
Arquitectura de AS ABAP + Java
Figura 35: Arquitectura de AS ABAP + Java 7.0x y versiones anteriores)
En el AS ABAP + Java (que significa procesos ABAP y Java en el mismo sistema SAP, bajo el mismo ID de sistema), se aplican los mismos principios arquitectónicos que para los sistemas AS ABAP y AS Java por separado. Sin embargo, existen algunas peculiaridades debido a que ambos entornos de tiempo de ejecución se integran uno con el otro.
Nota: AS ABAP + Java se llama una instalación add-in, dado que es posible instalar primero AS ABAP y luego complementarlo con AS Java. La instancia central de un sistema AS ABAP + Java se puede reconocer por los procesos ABAP-MS, un proceso de trabajo en cola y SDM. Los servicios centrales del entorno de tiempo de ejecución Java (Java-MS y Java-ES) aquí también se suministran en la instancia de servicios centrales Java. Todas las otras instancias se denominan instancias de diálogo. Tanto los entornos de tiempo de ejecución AS ABAP y Java pueden responder a solicitudes mediante protocolos web, así el ICM debe determinar el entorno al cual se envía la solicitud. El ICM decide la dirección de la solicitud por su URL. En el caso de una solicitud al entorno de tiempo de ejecución ABAP, por ejemplo, la llamada de un web dynpro ABAP, el ICM reenvía la solicitud al despachador ABAP y los procesos de trabajo responden a la solicitud. Si el sistema realiza una solicitud al entorno de tiempo de ejecución Java, por ejemplo, la llamada de un Java Server Page (JSP), el ICM reenvía la solicitud al despachador Java y uno de los procesos de servidor responde a la solicitud. En un sistema AS ABAP + Java, los datos también se archivan en esquemas de bases de datos separados (pero en la misma instalación de base de datos). Es decir, los procesos de trabajo solo pueden acceder a los datos ABAP, y los procesos de servidor solo pueden acceder a los datos Java. En el intercambio de datos, ambos entornos de tiempo de ejecución se comunican mediante el SAP Java Connector (JCo). Esta comunicación es necesaria, por
90
© Copyright . Reservados todos los derechos.
Lección: Diferenciación de procesos SAP NetWeaver AS Java y ABAP
ejemplo, si los datos de facturación almacenados en el esquema de datos ABAP necesitan visualizarse en una interfaz de usuario Java. El SAP JCo está integrado a AS Java y se utiliza cuando un sistema AS Java debe comunicarse con un sistema AS ABAP remoto.
Nota: SAP JCo brinda el protocolo SAP RFC para el entorno Java. JCo también está disponible en una instalación separada, por ejemplo, para conectar productos no SAP en Java con sistemas SAP ABAP. Otra característica especial de AS ABAP + Java es el almacenamiento conjunto. En este caso, el User Management Engine (AS Java) utiliza los usuarios de AS ABAP.
As a preparation take a look at the file structure of the training system (for example, using transaction AL11). The training system is AS ABAP + Java with two instances, as follows: ●
●
The instances (ABAP + Java) are each stored in a separate directory: -
Central instance, for example, D:\usr\sap\\DVEBMGS$$
-
Dialog instance, for example, D:\usr\sap\\D$$
The Java part of an instance is relative to these instance directories in the directory .../ j2ee.
The directories .../j2ee/cluster/dispatcher and .../j2ee/cluster/server exist for the Java dispatcher and the server processes.
Arquitectura de AS ABAP + Java (7.1x y versiones posteriores)
Figura 36: Arquitectura de AS ABAP + Java (7.1x y versiones posteriores)
© Copyright . Reservados todos los derechos.
91
Capítulo 3: El núcleo del sistema
La figura muestra la arquitectura de un sistema SAP basado en SAP NetWeaver AS 7.10 o versiones posteriores. Cambios introducidos con SAP NetWeaver AS 7.1x A partir de SAP NetWeaver AS 7.10, se introdujeron los siguientes cambios en la arquitectura: ● La anterior instancia central pasó a denominarse Servidor de aplicación principal (PAS). ●
La anterior instancia de diálogo pasó a denominarse Servidor de aplicación adicional (AAS).
●
El despachador Java fue reemplazado por el proceso ICM.
●
Se discontinuó el proceso SDM.
●
La instancia de los servicios centrales (Java) incluye un proceso de gateway.
La instancia que se instala primero se conocen como instancia PAS. Las demás instancias para un sistema se conocen como AAS.
92
© Copyright . Reservados todos los derechos.
Capítulo 3 Ejercicio 4 85
Determine la estructura de una instancia
Ejemplo empresarial Como administrador del sistema, necesita tener una vista general de los procesos de su sistema SAP. Provide the necessary user names and password to students, wherever required. Determine la cantidad de instancias que puede tener un sistema SAP. 1. ¿Con qué instancia trabaja usted actualmente en el sistema PSM? 2. ¿Qué instancias (AS ABAP) ofrece el sistema de formación PSM? ¿Qué servicios se brindan? ¿Cuál es el número de sistema de la instancia central del sistema? 3. ¿Cuáles instancias AS Java existen en el sistema PSM?
© Copyright . Reservados todos los derechos.
93
Capítulo 3 Solución 4 86
Determine la estructura de una instancia
Ejemplo empresarial Como administrador del sistema, necesita tener una vista general de los procesos de su sistema SAP. Provide the necessary user names and password to students, wherever required. Determine la cantidad de instancias que puede tener un sistema SAP. 1. ¿Con qué instancia trabaja usted actualmente en el sistema PSM? a) Entre a la pantalla SAP Easy Access utilizando SAP GUI para Windows. b) En la pantalla SAP Easy Access, seleccione Sistema → Status. c) El nombre de la instancia en la cual se encuentra está disponible en el campo Nombre de servidor y tiene la estructura: __. 2. ¿Qué instancias (AS ABAP) ofrece el sistema de formación PSM? ¿Qué servicios se brindan? ¿Cuál es el número de sistema de la instancia central del sistema? a) En la pantalla SAP Easy Access, ejecute el código de transacción SM51 (alternativamente, seleccione Herramientas → Administración → Monitor → Supervisión de sistema → Servidores). b) Puede ver una lista de todas las instancias AS ABAP iniciadas y los servicios que ofrecen. c) La instancia en la cual está configurado el proceso de trabajo de encolamiento es la instancia central. d) En la transacción SM51, puede reconocer esta instancia por el tipo de mensaje en cola. 3. ¿Cuáles instancias AS Java existen en el sistema PSM? a) Inicie un navegador Web. b) Ejecute la página de inicio del AS Java del sistema SAP PSM. c) Se accede a la página de inicio en http://:, por ejemplo http://twdf1928.wdf.sap.corp:58000/ d) En la página de inicio de AS Java, seleccione el enlace Información de sistema. e) Entre al sistema con el usuario y la clave de acceso que le proporcione el instructor. f) Verá la información acerca de las instancias y los servicios centrales de AS Java (SCS).
94
© Copyright . Reservados todos los derechos.
Lección: Diferenciación de procesos SAP NetWeaver AS Java y ABAP
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Identificar los procesos que se ejecutan en SAP NetWeaver AS
●
Planificar la arquitectura del sistema de los diferentes tipos de SAP NetWeaver AS
© Copyright . Reservados todos los derechos.
95
Capítulo 3 Lección 3 88
Procesamiento de solicitudes AS ABAP
RESUMEN DE LA LECCIÓN Este módulo trata sobre el funcionamiento del Servidor de aplicación SAP NetWeaver ABAP (AS ABAP). También explica el trabajo de los procesos AS ABAP. This lesson introduces the processes of AS ABAP. The tasks performed by the processes are introduced. After this lesson, the participants will understand the basic mechanisms and processes in AS ABAP. Keep in mind that this lesson does not describe every detail of various functions. Ejemplo empresarial Su empresa ha decidido implementar SAP ERP. Las funciones empresariales básicas, como la gestión financiera en SAP ERP, son procesadas por el entorno de tiempo de ejecución ABAP. Los empleados de diferentes departamentos técnicos (desarrollo, administración de sistema, preparación de trabajo, seguridad y otros) necesitan comprender en forma detallada cómo funciona AS ABAP. Por este motivo, se requieren los siguientes conocimientos: ●
Una comprensión del funcionamiento de AS ABAP
●
Una comprensión de la interfaz de la base de datos de AS ABAP
●
Una comprensión del proceso de solicitudes a AS ABAP
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
96
Describir el procesamiento de solicitudes en AS ABAP
© Copyright . Reservados todos los derechos.
Lección: Procesamiento de solicitudes AS ABAP
Procesamiento de solicitudes por parte de SAP GUI
Figura 37: Procesamiento de una solicitud de usuario en ABAP
Point the following out to participants who are already familiar with the classical ABAP runtime environment: Classical transactions, such as displaying customers by means of transaction FD03, still happen exclusively through the ABAP runtime environment. The existence of the Java runtime environment does not mean that this application is now implemented by means of the SAP GUI as well as in a Java-based way. Choosing the type of runtime environment (ABAP or Java) and the user interface (SAP GUI, Web Dynpro ABAP or Java, BSP, or JSP) always depends on the selected application. Los usuarios pueden entrar al sistema SAP a través de SAP GUI o de un cliente Web (navegador). Si los usuarios inician sesión utilizando SAP GUI, el entorno de tiempo de ejecución ABAP procesa las solicitudes del usuario. Si los usuarios inician sesión utilizando un navegador, el procesamiento se puede realizar con un entorno de tiempo de ejecución ABAP o Java, dependiendo de la solicitud del usuario. If necessary, you can talk about the necessity and process of buffer synchronization when you introduce buffers and their significance. The participants should learn about the general procedure for a user request in the SAP system. Only the case of an internal user (with SAP GUI) is discussed here. This section does not cover the integration of browsers by using the Internet Communication Manager (ICM). Los usuarios inician sesión mediante el servidor de mensaje (ABAP) (ajuste de carga) o directamente en el despachador ABAP. Los procesos de trabajo ejecutan las peticiones de los usuarios. El procesamiento de una solicitud de usuario en AS ABAP, tal y como se describe en la figura, implica distintos procesos en las tres capas (presentación, aplicación y base de datos).
© Copyright . Reservados todos los derechos.
97
Capítulo 3: El núcleo del sistema
Las entradas de pantalla de un usuario son aceptadas por el programa de presentación SAP GUI de SAP, convertidas a un formato interno y luego reenviadas al AS ABAP. Despachador ABAP El despachador (ABAP) es el procesamiento central de AS ABAP, el cual desempeña las siguientes funciones: ● Gestiona los recursos para las aplicaciones escritas en ABAP junto con el sistema operativo respectivo ●
Distribuye las solicitudes entre los procesamientos de trabajo
●
Integra la capa de presentación
●
Organiza las actividades de comunicación
●
Graba las solicitudes de procesamiento en colas de solicitudes y las procesa según el principio first in, first out.
Así pues, los datos se procesan en el proceso de trabajo, y el usuario, que crea la orden utilizando SAP GUI, no siempre tiene asignado el mismo proceso de trabajo. Es decir que no hay asignaciones fijas de procesos de trabajo a los usuarios. Para procesar solicitudes de usuario, a menudo es necesario leer datos del esquema ABAP de la base de datos o escribir en ella. Todo proceso de trabajo se conecta directamente al esquema ABAP de la base de datos para procesar las solicitudes del usuario.
Nota: El esquema de base de datos (todas las tablas de AS ABAP) pertenece a un usuario que inicia sesión en la base de datos mediante procesos de trabajo. Hasta el release 4.6C, este usuario se llamó SAPR3. Después de ello, el nombre de usuario se cambió a SAP de manera que varios sistemas SAP puedan ser operados en una base de datos. Puede consultar este usuario en el sistema SAP en Sistema → Status. Para AS Java, el usuario (el esquema de base de datos) se llama SAPDB. Una vez que se completa el proceso de trabajo, su resultado se devuelve al SAP GUI mediante el despachador ABAP. El SAP GUI interpreta el resultado y genera la imagen de salida para el usuario. Las memorias intermedias ayudan a acelerar el procesamiento de las solicitudes de los usuarios. Los datos que se leen con frecuencia pero que raramente se modifican (por ejemplo, programas o datos de Customizing como mandantes, monedas o sociedades) se pueden mantener como copia del contenido de la base de datos en la memoria compartida del servidor de aplicación. Esto significa que los datos no necesitan ser leídos desde la base de datos cada vez que se requieran. Pero los datos pueden llamarse rápidamente desde la memoria intermedia. Cada instancia dispone de sus propias memorias intermedias.
98
© Copyright . Reservados todos los derechos.
Lección: Procesamiento de solicitudes AS ABAP
Nota: Durante la inicialización del sistema SAP, el despachador ejecuta las siguientes acciones (entre otras): ●
Lee los parámetros del perfil de sistemas.
●
Inicia los procesamientos de trabajo.
●
Entra al servidor del mensaje.
Flujo de proceso para solicitudes
Figura 38: Flujo de proceso para solicitudes
Point out that all work processes are based on the same kernel file, disp+work.exe, that is, all work processes – regardless of their type – have an identical structure. Los procesos de trabajo ejecutan la lógica de proceso de los programas de aplicación. Además de la memoria interna, un proceso de trabajo cuenta con un controlador de tareas que coordina las acciones dentro de un proceso de trabajo, los procesadores de software y una interfaz de base de datos. El procesador de dynpro ejecuta la lógica de proceso del programa de aplicación, llama a módulos de lógica de proceso y transfiere contenido de campo a la lógica de procesamiento. El intérprete ABAP ejecuta la lógica de procesamiento real de los programas de aplicación ABAP. El procesador de pantalla informa al procesador ABAP sobre el subprograma que se debe ejecutar según el status de procesamiento de la lógica de proceso.
© Copyright . Reservados todos los derechos.
99
Capítulo 3: El núcleo del sistema
As of Release 7.0, the ABAP work process has been capable of hosting a Java Virtual Machine (JVM) as well. This function has nothing to do with AS Java or the Java 2 Enterprise Edition (J2EE) technology. If this function has been activated in AS ABAP, you see the message type VMC in SM51. For more information about the VM Container (VMC), see the SAP NetWeaver Library under SAP NetWeaver by Key Capability → Application Platform by Key Capability → Platform-Wide Services → SAP Virtual Machine Container.
El proceso de trabajo de diálogo seleccionado por el despachador realiza primero un roll in del contexto de usuario. Los datos que contiene el status de procesamiento actual de un programa en ejecución, así como los datos que caracterizan al usuario se comunican al proceso de trabajo. A continuación, el proceso de trabajo procesa la solicitud del usuario, que puede implicar, por ejemplo, la solicitud de datos de la base de datos o de las memorias intermedias de la memoria compartida. Después que el proceso de trabajo de diálogo ha procesado el paso de diálogo, el proceso de trabajo devuelve el resultado, realiza un roll back del contexto de usuario a la memoria compartida y se encuentra nuevamente disponible para una nueva solicitud de usuario de la cola de solicitudes. El resultado se transfiere al SAP GUI y el usuario visualiza la nueva pantalla. Memory management and the roll-in or roll-out process: The memory management system differentiates between the main memory areas that are available exclusively to one work process and the memory areas that can be used by all work processes. The memory used exclusively by a work process stores session-specific data that must be kept for longer than the duration of a work step. This data is automatically made available to the process at the start of a dialog step (rolled in) and saved at the end of the dialog step (rolled out). This data includes data that characterizes the user (user context), such as authorization, administrative information, and other data for the ABAP and screen processors, which has been collected in the previous dialog steps for the active transaction. There are also additional memory areas for all processes in the shared memory. These memory areas are used for, among other things, the factory calendar and the screen, table, and program buffers.
Interfaz de base de datos de AS ABAP This section will give the participants an understanding of ABAP Open SQL as platformindependent SQL. Point out that the applications that the participants develop will lose their platform independence if the participants use ABAP Native SQL. Para gestionar cantidades considerables de datos se utilizan sistemas de gestión de bases de datos relacionales (RDBMS). Un RDBMS graba los datos y las relaciones entre ellos en forma de tablas bidimensionales. Son conocidos por su simplicidad lógica. La definición de los datos, de las tablas y de las relaciones entre las tablas tiene lugar a nivel de base de datos en el catálogo de la base de datos (Dictionary ABAP) del RDBMS. Dentro del lenguaje de programación ABAP de SAP, se puede utilizar ABAP Open Structured Query Language (SQL), lenguaje de consulta de bases de datos) para acceder a los datos de aplicación de la base de datos, independientemente del RDBMS que se utilice. La interfaz de base de datos, que forma parte de cualquier proceso de trabajo de AS ABAP, traduce las sentencias de Open SQL desde ABAP a las sentencias SQL correspondientes a la base de
100
© Copyright . Reservados todos los derechos.
Lección: Procesamiento de solicitudes AS ABAP
datos específica utilizada (Native SQL). De este modo, posibilita que los programas ABAP sean independientes de base de datos.
Nota: ABAP Open SQL es un lenguaje de consulta de base de datos, basada en el SQL estándar (ISO). El lenguaje contiene ampliaciones que no están incluidas en el SQL estándar. Al interpretar sentencias ABAP del Open SQL, la interfaz de base de datos de SAP verifica la sintaxis de dichas sentencias ABAP y asegura la utilización óptima de las memorias de SAP locales en la memoria compartida del servidor de aplicación. En estas memorias intermedias se almacenan los datos con frecuencia, de modo que para leerlos ya no es necesario acceder de nuevo al servidor de la base de datos. Particularmente, todos los datos técnicos, tal como los programas ABAP, pantallas, información del diccionario ABAP, y un número de parámetros de administración empresarial, permanecen sin cambios en un sistema operativo. Los datos técnicos son ideales para la memoria intermedia. Flujo de una consulta de base de datos
Figura 39: Flujo de una consulta de base de datos
Puede utilizar comandos native SQL directamente en ABAP sin usar las memorias intermedias locales y habiendo interpretado los comandos de la interfaz de base de datos. Puede hacerlo mediante la inclusión de los comandos en un paréntesis EXEC SQL - END EXEC en el programa ABAP. El intérprete ABAP no verifica la sintaxis de ningún comando dentro de este paréntesis. Si utiliza native SQL para desarrollar programas, ya no podrá asegurar la independencia de plataforma de los programas At this point, you have the option of discussing the problems in buffer synchronization.
© Copyright . Reservados todos los derechos.
101
Capítulo 3: El núcleo del sistema
Nota: Si existen más de una instancia, entonces hay más de una memoria. Para ello, en ocasiones necesitará sincronizar memorias intermedias.
Procesamiento de solicitudes de diálogo
Figura 40: Multiplexación de procesos de trabajo de diálogo
Como se ve en la figura, se asigna un paso de diálogo de programa a un proceso de trabajo de diálogo específico durante la ejecución. Los pasos de diálogo individuales de un programa que consisten en varias pantallas se pueden ejecutar mediante varios procesos de trabajo de diálogo durante el tiempo de ejecución del programa. A esto se le llama multiplexación de procesos de trabajo. Un proceso de trabajo de diálogo procesa secuencialmente pasos de diálogo para varios usuarios y programas. Las aplicaciones de SAP diferencian entre interacción de usuario y lógica de procesamiento. Las acciones de usuario técnicamente se realizan mediante pantallas, también llamadas dynpros (de programas dinámicos), las cuales consisten en una imagen de pantalla y la lógica de proceso subyacente. El procesador dynpro del proceso de trabajo ejecuta la lógica de proceso de pantalla de la aplicación, llama los módulos de lógica de procesamiento y transfiere el contenido de campo a la lógica de proceso. La lógica de proceso de pantalla en sí se divide en los siguientes módulos: ● Proceso antes de salida (PBO) Se procesa antes de que la imagen de la pantalla sea enviada. Esta parte lógicamente pertenece a la subsiguiente imagen de pantalla. ●
Proceso después de la entrada (PAI) Se proceso después de una interacción de usuario en la pantalla.
102
© Copyright . Reservados todos los derechos.
Lección: Procesamiento de solicitudes AS ABAP
Esta parte de un paso de diálogo lógicamente pertenece a la imagen de pantalla precedente. La lógica de procesamiento real de los programas ABAP la ejecuta el intérprete ABAP. El procesador de pantalla informa al procesador ABAP sobre el subprograma que se debe ejecutar, el cual depende del status de procesamiento de la lógica de proceso. Si los datos necesitan ser intercambiados con la base de datos o las memorias intermedias durante un paso de diálogo, este intercambio sucede a través de la interfaz de la base de datos. Esto permite el acceso a las tablas de las base de datos, a los programas ABAP, o al ABAP Dictionary, entre otras cosas. If appropriate, you can roughly calculate, together with the participants, how many dialog processes can usefully be configured in an SAP system (taking into account the number of active users, the average processing time for a dialog step in the system, and the frequency with which users send requests to the system).
© Copyright . Reservados todos los derechos.
103
Capítulo 3: El núcleo del sistema
104
© Copyright . Reservados todos los derechos.
Capítulo 3 Ejercicio 5 95
Enumerar los procesos de trabajo configurados en una instancia de AS ABAP
Ejemplo empresarial Desea obtener un resumen de los procesos de trabajo configurados y sus status actuales. Utilice la transacción SM50 para responder las siguientes preguntas (alternativamente, en la pantalla SAP Easy Access, seleccione Herramientas → Administración → Monitor → Supervisar sistema → Resumen de proceso). 1. ¿Cuántos procesos de trabajo de diálogo existen en la instancia en la cual se encuentra? 2. Haga clic en Refresh varias veces en el resumen de proceso. ¿Sus consultas siempre se procesan mediante el mismo proceso de trabajo?
© Copyright . Reservados todos los derechos.
105
Capítulo 3 Solución 5 96
Enumerar los procesos de trabajo configurados en una instancia de AS ABAP
Ejemplo empresarial Desea obtener un resumen de los procesos de trabajo configurados y sus status actuales. Utilice la transacción SM50 para responder las siguientes preguntas (alternativamente, en la pantalla SAP Easy Access, seleccione Herramientas → Administración → Monitor → Supervisar sistema → Resumen de proceso). 1. ¿Cuántos procesos de trabajo de diálogo existen en la instancia en la cual se encuentra? a) En la pantalla SAP Easy Access, ejecute el código de transacción SM50. Esta acción visualiza los números de los procesos de trabajo de diálogo. b) Enumera los procesos de trabajo del tipo DIA. La transacción SM50 visualiza los procesos de trabajo en la instancia en la que actualmente se encuentra. Si desea visualizar los procesos de trabajo para todo el sistema SAP, ejecute la transacción SM66. (En este caso, necesita definir las opciones apropiadas mediante los botones Seleccionar proceso y Opciones.) 2. Haga clic en Refresh varias veces en el resumen de proceso. ¿Sus consultas siempre se procesan mediante el mismo proceso de trabajo? a) En la transacción SM50, seleccione el botón Refresh. Encuentre su proceso de trabajo utilizando su nombre de usuario en la columna Nombres Usuario. Puede suceder que sus consultas sean procesadas por varios procesos de trabajo.
106
© Copyright . Reservados todos los derechos.
Lección: Procesamiento de solicitudes AS ABAP
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Describir el procesamiento de solicitudes en AS ABAP
© Copyright . Reservados todos los derechos.
107
Capítulo 3 Lección 4 98
Explicación de procesos AS ABAP
RESUMEN DE LA LECCIÓN Este módulo describe el procesamiento de las transacciones en AS ABAP y explica los procesos ABAP y sus objetivos. Ejemplo empresarial Desea encontrar qué significa el término transacción y qué transacciones son la base de datos y ABAP. También desea gestionar las entradas de bloqueo. Por este motivo, se requieren los siguientes conocimientos: ●
Una comprensión del término transacción
●
Una comprensión de la base de datos y las transacciones ABAP
●
Una comprensión de la gestión de bloqueo
●
Una comprensión de los procesos AS ABAP
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Describir el procesamiento de transacciones en AS ABAP
●
Explicar los procesos ABAP y sus fines
Transacciones This section is supposed to explain the difference between a database transaction and the transaction in AS ABAP. Building on the participants’ knowledge of multiplexing of work processes, you need to clarify that an ABAP transaction can consist of several database transactions. You can use this lesson to introduce participants to the concepts of SAP lock and asynchronous updates and explain the background of these two concepts.
You need to explain the ACID concept. You may find it helpful to illustrate your explanation by using a specific transaction of your choice. The ACID concept is not an SAP invention but a general requirement for transactional systems. Las transacciones son unidades de procesamiento que van juntas funcionalmente. Tienen las siguientes principales características, que juntas forman el acrónimo ACID: ● Atómica
108
© Copyright . Reservados todos los derechos.
Lección: Explicación de procesos AS ABAP
Esto significa que una transacción es completamente exitosa o no tiene ningún efecto. Si un sistema orientado a la transacción deja de funcionar, no se almacenan los resultados inconsistentes y parciales. ●
Consistente Esto significa que el status de sistema cambia de un status a otro, donde ambos son precisos y consistentes en términos empresariales.
●
Aislada Esto significa que las modificaciones realizadas dentro de una transacción solo pueden ser visualizadas por otras transacciones, incluso por las que se ejecutan simultáneamente, tras la confirmación final (Commit).
●
Duradera Los resultados de una transacción son duraderos porque, tras la confirmación final, se almacenan permanentemente en la base de datos.
Base de datos y transacciones ABAP Cada proceso de trabajo se conecta a un interlocutor de comunicaciones específico a nivel de base de datos durante el tiempo de ejecución de una instancia SAP. Los procesos de trabajo no pueden intercambiar interlocutores de comunicaciones en tiempo de ejecución. Por este motivo, un proceso de trabajo solo puede realizar modificaciones en la base de datos dentro de una transacción de base de datos. Transacción de base de datos Una transacción de base de datos es, de acuerdo con el principio ACID, una secuencia indivisible de operaciones de base de datos, al principio y al final de la cual el set de datos de la base de datos debe ser consistente. El principio y el final de una transacción de base de datos están definidos por un comando commit (commit en base de datos) al sistema de base de datos. Durante una transacción de base de datos (entre dos comandos commit), el mismo sistema de base de datos garantiza que el set de datos sea consistente. El propio sistema de base de datos se encarga de la tarea de restablecer el set de datos a su estado anterior después de que una transacción finalice con un error (anular actualización). Transacción empresarial Las transacciones empresariales son unidades de proceso agrupadas para proporcionar una función específica. Estas unidades de proceso ejecutan modificaciones a la base de datos que son consistentes y dan sentido a los términos empresariales. Ejemplos típicos de transacciones son las actualizaciones en el Debe y el Haber, que solo tienen sentido juntas, o la creación de pedidos de material junto a la reserva de los materiales relevantes. Asimismo, una transacción AS ABAP se define como un proceso empresarial no divisible, cuya ejecución se realiza en forma completa, o no se ejecuta. Las transacciones AS ABAP se implementan como secuencias de pasos de diálogo relacionados lógicamente, que son consistentes en términos empresariales. Una imagen de pantalla representa un paso de diálogo de usuario.
© Copyright . Reservados todos los derechos.
109
Capítulo 3: El núcleo del sistema
Relación entre la base de datos y las transacciones SAP
Figura 41: Relación entre la base de datos y las transacciones SAP
En la figura se muestra la relación entre la base de datos y las transacciones SAP. No es necesario que la ejecución de una transacción SAP se realice con un simple proceso de trabajo de diálogo. Dentro de una transacción que modifica datos en la base de datos, el usuario solicita modificaciones en la base de datos mediante las pantallas visualizadas. Una vez completada la transacción, el resultado de las modificaciones debe ser un status de base de datos consistente. Puede procesar una ventana de diálogo mediante varios procesos de trabajo (multiplexación de procesos de trabajo). Cada proceso de trabajo aborda secuencialmente los pasos de diálogo para las aplicaciones no relacionadas. Las aplicaciones cuyos pasos de diálogo son ejecutados uno tras otro por el mismo proceso de trabajo no se pueden ejecutar dentro de la misma transacción de base de datos si no están relacionadas. Así, un proceso de trabajo debe iniciar una nueva transacción de base de datos para cada paso de diálogo.
Gestión de bloqueos
110
© Copyright . Reservados todos los derechos.
Lección: Explicación de procesos AS ABAP
Figura 42: Gestión de bloqueos en AS ABAP
You need to demonstrate the need for a lock mechanism to achieve data consistency at the database level. You also need to demonstrate that the lock management provided by database management systems is not sufficient. You need to introduce the participants to transactions SM12 and SM04. Para garantizar la consistencia de datos dentro de un sistema SAP, debe asegurarse de que no se pueda acceder a los registros de datos ni que estos puedan ser modificados por parte de varios usuarios simultáneamente. El sistema SAP posee su propio concepto de gestión de bloqueos. Desde la perspectiva de la base de datos, todos los pasos del diálogo forman unidades físicas y lógicas, tal como la transacción de base de datos. La gestión de bloqueos de base de datos solo puede coordinar este tipo de transacción de base de datos. Sin embargo, desde el punto de vista de SAP, esto no es suficiente. Esto se debe a que las transacciones SAP que forman una secuencia de pasos de trabajo relacionados en forma lógica, consistentes en términos empresariales, tienen varios pasos de diálogo. Los sistemas SAP deben tener su propia gestión de bloqueos. SAP implementa esto utilizando el proceso de trabajo de encolamiento. De este modo también se garantiza que la independencia de plataforma de la gestión de bloqueos esté actualizada. El concepto de bloqueo de SAP se basa en el principio según el cual los programas SAP realizan entradas de bloqueo para que los registros de datos se procesen en una tabla de bloqueo. Las entradas de bloqueo solo se puede llevar a cabo si no existen en la tabla de bloqueo. El proceso de trabajo de encolamiento gestiona el bloqueo lógico de las transacciones SAP en la tabla de bloqueo. Puede localizar la tabla de bloqueo en la memoria principal de la instancia, donde se configura el proceso de trabajo en cola.
© Copyright . Reservados todos los derechos.
111
Capítulo 3: El núcleo del sistema
Nota: La instancia, para la cual la memoria principal contiene la tabla de bloqueo, también se conoce como servidor de cola. Solicitud de bloqueo Si un usuario desea modificar algún dato, el proceso de trabajo de diálogo en ejecución solicitará un bloqueo (el programador de la aplicación debe programar esta solicitud explícitamente). When a lock object is successfully activated in the ABAP Dictionary, the system generates an ENQUEUE function module and a DEQUEUE function module with the respective names, ENQUEUE_ and DEQUEUE_. The developer then uses these function modules in the application to request and release locks.
Si se procesa una solicitud de diálogo en el servidor de cola, el proceso de trabajo de diálogo puede acceder directamente a la tabla de bloqueo. Entonces, el proceso de trabajo de diálogo verifica si se puede generar un nuevo bloqueo; es decir, si existe una colisión con bloqueos ya establecidos. Si es posible establecer un bloqueo, el proceso de trabajo de diálogo lo crea y se proporciona la clave del bloqueo al usuario (propietario del bloqueo). La clave del bloqueo se mantiene en el contexto del usuario en la memoria compartida. Si el proceso de trabajo de diálogo que procesa la solicitud de usuario y el proceso de trabajo de encolamiento no se ejecutan en la misma instancia, ambos se comunican entre sí a través del servidor de mensajes. En este caso, la solicitud de bloqueo se reenvía del proceso de trabajo de diálogo al proceso de trabajo de encolamiento a través de los despachadores y del servidor de mensajes. El proceso de trabajo de encolamiento verifica entonces si es posible establecer un bloqueo. Si es posible, el bloqueo es configurado por el proceso de trabajo en cola. La clave de bloqueo se transfiere a la solicitud de proceso de trabajo de diálogo mediante el despachador y el servidor de mensajes. Cuando se solicita el bloqueo, el sistema hace una verificación para determinar si el bloqueo solicitado genera algún conflicto con las entradas existentes en la tabla de bloqueo. Si la tabla de bloqueo ya contiene entradas correspondientes, se rechaza la solicitud de bloqueo. A continuación, el programa de aplicación informa al usuario de que actualmente no se puede ejecutar la operación solicitada.
Nota: Para que el sistema ejecute las solicitudes de bloqueo, el objeto de bloqueo se debe definir en la biblioteca ABAP. Los objetos de bloqueo comprenden una o más tablas cuyas entradas deben ser bloqueadas. Puede definir un modo de bloqueo para un objeto de bloqueo. Modos de bloqueo El programador de la aplicación puede elegir entre los siguientes modos de bloqueo: ● Bloqueos contra escritura (modo de bloqueo exclusivo)
112
© Copyright . Reservados todos los derechos.
Lección: Explicación de procesos AS ABAP
Solo un usuario puede editar los datos de bloqueo. Se rechazan todas las solicitudes de otro bloqueo contra escritura y contra lectura. Un bloqueo contra escritura protege los objetos bloqueados de todos los demás tipos de transacciones. Únicamente el mismo propietario del bloqueo puede establecer el bloqueo de nuevo (compactar). ●
Bloqueos contra lectura (modo de bloqueo compartido) Varios usuarios pueden acceder al mismo tiempo a la lectura de los datos de bloqueo. Se aceptan las solicitudes de bloqueos contra lectura adicionales, incluso si provienen de otros usuarios. Se rechaza un bloqueo contra escritura.
●
Bloqueos contra escritura ampliados (modo de bloqueo no acumulativo) Al tiempo que la misma transacción puede solicitar y liberar los bloqueos contra escritura sucesivamente, puede solicitar solo una vez un bloqueo contra escritura ampliado, incluso en la misma transacción. Se rechaza el resto de solicitudes de bloqueos.
●
Bloqueos optimistas (modo de bloqueo optimista) Al principio, los bloqueos optimistas responden como bloqueos contra lectura y se pueden cambiar a bloqueos contra escritura. Los bloqueos optimistas se establecen si el usuario visualiza los datos en modo de modificación. Los bloqueos optimistas de un mismo objeto no colisionan. Si el usuario desea grabar los datos (modificados), es necesario modificar el bloqueo optimista por un bloqueo contra escritura (modo E). Esto falla si alguien antes configura un bloqueo no optimista en el objeto. Los otros bloqueos optimistas del objeto se borran en el proceso.
Los bloqueos fijados por un programa de aplicación son liberados por el mismo programa de aplicación o por el programa de actualización una vez modificada la base de datos. Los bloqueos transferidos a un proceso de trabajo de actualización también se escriben en un fichero en el nivel del sistema operativo y se pueden recuperar si el servidor de cola deja de funcionar. La transacción SM12 (Herramientas → Administración → Monitor → Entradas de bloqueo) muestra los bloqueos actualmente configurados. Si un bloqueo ya ha sido heredado por el proceso de actualización, también se fija el indicador de copia de seguridad. Un bloqueo así también se incluye de nuevo en la tabla de bloqueo después de reanudar el servidor de cola. For older releases (earlier than 7.0), SM12 displays the locks set by the update work process in blue. As of SAP NetWeaver AS ABAP 7.00, you can display the details on the lock entry in transaction SM12. If the backup flag is set here, this corresponds to the earlier blue locks. Supresión de un bloqueo Existen dos formas de suprimir bloques mantenidos por los usuarios, como se indica a continuación: ● Mediante la finalización de la sesión de usuario en la transacción de resumen de usuario SM04 (Herramientas → Administración → Monitor → Supervisión del sistema → Resumen de usuario) ●
Borrar manualmente las entradas de bloqueo en SM12
El primer método (finalización de la sesión de usuario) da por resultado que el propietario del bloqueo original abandone la transacción y libere todos los bloqueos mantenidos. El segundo método (borrado manual mediante SM12) simplemente borra la entrada en tabla de bloqueo de la tabla de bloqueo. Este modo teóricamente permite a varios usuarios modificar los mismos registros de datos simultáneamente.
© Copyright . Reservados todos los derechos.
113
Capítulo 3: El núcleo del sistema
Atención: Antes de borrar los bloqueos, el administrador del sistema debe verificar (mediante la transacción SM04) si el usuario que es propietario del bloqueo todavía se encuentra dentro del sistema. Solo se deben borrar entradas de bloqueo con la transacción SM12 si el propietario del bloqueo ya no está dentro del sistema pero todavía es el propietario del bloqueo (por ejemplo, si la conexión entre SAP GUI y el sistema SAP se ha desactivado porque el usuario ha apagado su ordenador front end sin salir del sistema). Servidor de posición en cola independiente / Servicios centrales ABAP Para asegurar una alta disponibilidad, el proceso de trabajo de encolamiento junto al servidor de mensajes ABAP también se puede desvincular de la instancia central e instalar como una instancia de servicios centrales ABAP (ASCS). Para más detalles, consulte la biblioteca SAP NetWeaver Library y seleccione El concepto de bloqueo SAP → Servidor de posición en cola independiente.
How to Display Existing Lock Entries 1. At this point, show the participants the existing lock entries in transaction code SM12 (these locks could, for example, result from the user data being changed in SU01). It may also be helpful to draw the participants' attention to the consequences of manually deleting a lock entry. If you also demonstrate how to delete a user session in SM04, let the participants know that (if they do this themselves) they must never delete the sessions of users participating in other courses who are also logged on to the same training system. You can check this in the system log (SM21).
How to Delete the Locks Held by Users 1. Demonstrate the need for a lock mechanism to achieve data consistency at the database level. Also, demonstrate that the lock management provided by database management systems is not sufficient. In addition, introduce the participants to transaction codes SM12 and SM04.
114
© Copyright . Reservados todos los derechos.
Lección: Explicación de procesos AS ABAP
Procesar actualizaciones
Figura 43: El principio de las actualizaciones asincrónicas
Muy a menudo una transacción SAP, que asigna una transacción empresarial (por ejemplo, la creación de un pedido), contiene varias modificaciones de pantalla. Las modificaciones de datos resultantes de este proceso se deben ejecutar completamente o no ejecutarse en la base de datos. Si se produce un error durante la transacción y la operación finaliza, la transacción no debe realizar ninguna modificación en la base de datos. El sistema de actualización de SAP tiene en cuenta esto. Sistema y proceso de actualización El sistema de actualización ofrece mayor seguridad y rendimiento. El sistema también ofrece la capacidad de restablecer los datos durante la ejecución de modificaciones de base de datos. El sistema de actualización utiliza una tecnología que permite a las transacciones SAP librarse de las modificaciones de la base de datos que requieren mucho tiempo. Estas se llevan a cabo asincrónicamente en procesos de trabajo de actualización especiales. También evita los problemas de rechazo de repeticiones provocados por la diferencia en la concepción de la unidad de trabajo lógica (LUW) en una transacción SAP y en la base de datos. Si los datos almacenados temporalmente para su procesamiento se transfieren a un proceso de trabajo de actualización para seguir procesándolo, durante un proceso de trabajo de diálogo, el proceso de trabajo de diálogo no espera a que se complete la solicitud de actualización: La actualización es asincrónica (no simultánea). La parte de diálogo se completa con el comando ABAP COMMIT WORK, y la parte de actualización de la transacción se inicia. El servidor de actualización transfiere la solicitud de actualización a un proceso de trabajo de actualización. Aquí, cada paso de diálogo corresponde a una transacción de base de datos (que se ejecuta o bien completamente o no se ejecuta en la base de datos, y allí se completa con un comando COMMIT). El sistema ejecuta la parte de actualización de la transacción SAP
© Copyright . Reservados todos los derechos.
115
Capítulo 3: El núcleo del sistema
en una transacción de la base de datos. Únicamente en este punto el sistema copia los datos a la tabla de aplicación. Actualizaciones asincrónicas
Figura 44: Actualizaciones asincrónicas
Si los usuarios desean modificar un registro de datos en una transacción SAP, deben llamar la transacción correspondiente en el modo de diálogo, realizar las entradas correspondientes en las pantallas e iniciar el proceso de actualización grabando los datos. Pasos en actualizaciones asincrónicas El proceso de actualización asincrónico desencadena los siguientes pasos: 1. El programa bloquea el registro de datos para otros usuarios dirigiendo el proceso de trabajo de encolamiento (utilizando el servidor de mensajes, si resulta apropiado). El proceso de trabajo en cola realiza la entrada relevante en la tabla de bloqueo. Si otro usuario ya bloqueó los datos, el proceso de trabajo en cola informa al usuario que el registro de datos no se puede modificar actualmente. 2. Si el proceso de trabajo en cola realiza con éxito la escritura de la entrada en tabla de bloqueo en la tabla de bloqueo, pasa la clave de bloqueo que creó al usuario. El programa lee el registro por modificar desde la base de datos. El usuario puede modificar el registro en la imagen de pantalla de la transacción SAP. 3. En el proceso de trabajo de diálogo activo, el programa llama un módulo de función mediante CALL FUNCTION …… IN UPDATE TASK y escribe la solicitud de actualización en las tablas de actualización de la base de datos. Estas tablas también se denominan tablas VB*, puesto que sus nombres comienzan con VB. Actúan como memoria temporal y almacenan los datos que se deben modificar hasta que se puedan recopilar y escribir en las tablas de aplicación de la base de datos (en una transacción de base de datos individual).
116
© Copyright . Reservados todos los derechos.
Lección: Explicación de procesos AS ABAP
4. Al final de la fase de diálogo de la transacción (por ejemplo, cuando el usuario graba los datos, posiblemente tras completar otros pasos de diálogo), el programa inicia el cierre de la transacción con la expresión COMMIT WORK. El proceso de trabajo encargado de tratar el paso de diálogo activo completa la cabecera de actualización y desencadena un proceso de trabajo de actualización. 5. Sobre la base de la información (clave de la orden de actualización y clave de bloqueo) transferida del proceso de trabajo de diálogo, el proceso de trabajo de actualización lee los registros log que pertenecen a esta transacción SAP a partir de las tablas VB*. 6. El proceso de trabajo de actualización transfiere las modificaciones marcadas y recopiladas en las tablas VB* a la base de datos como una solicitud de actualización, y evalúa la respuesta de la base de datos. Si las modificaciones se han escrito correctamente en las tablas de destino, el proceso de trabajo de actualización desencadena un commit de base de datos después de la última modificación y borra las entradas de las tablas VB*. Si se produce un error, el proceso de trabajo de actualización desencadena un rollback de base de datos y deja los registros log en las tablas VB* y los marca como defectuosos. 7. Se reinicializan las entradas de bloqueo de la tabla de bloqueo.
Consejo: Detrás de las tablas VB*, existen VBHDR (cabeceras de actualización), VBMOD (módulos de actualización), VBDATA (datos de actualización) y VBERROR (información de posible error); las estructuras de tabla se pueden visualizar mediante el ABAP Dictionary (transacción SE11).
Demonstrate asynchronous updates on the system. Open two sessions and arrange them next to each other on the screen. In one session, call the process overview transaction SM50. If your system has several instances, make sure that you are logged on to the instance on which the update work process is configured. In the other session, in transaction SA38, call report VBTST300 (update test program) with the parameters U (update), no. of COMMIT WORKS = 1, and No. of func. per update = 5000. Leave the other parameters unchanged. Once you choose the Execute pushbutton, go to the session with the process overview and keep refreshing it to show that a dialog work process is active to start with. Once the dialog phase is finished, the message update test that was finished is displayed in the SA38 session. The update part of the transaction is also started in SM50 in the UPD process.
Nota: El programador de la aplicación decide si utilizar actualizaciones asincrónicas y cuándo hacerlo mientras programa la transacción. Además de la actualización asincrónica, existen otras técnicas de actualización (por ejemplo, sincrónica o local). Tipos de actualizaciones Para mejorar aún más el rendimiento, los programadores de la aplicación pueden configurar varios tipos de actualizaciones, tal como se indica a continuación:
© Copyright . Reservados todos los derechos.
117
Capítulo 3: El núcleo del sistema
●
Actualizaciones V1 principales, críticas en el tiempo Estas actualizaciones son relevantes para objetos con funciones de control en el sistema SAP, como modificar el material de almacén o crear un pedido.
●
Actualizaciones V2 secundarias, no críticas en el tiempo Estas actualizaciones dependen de las actualizaciones V1. Estas actualizaciones son, por ejemplo, actualizaciones puramente estadísticas, como el cálculo de resultados.
●
Actualizaciones no críticas en el tiempo Estas actualizaciones se recopilan y procesan en un punto posterior en el tiempo (ejecución colectiva).
Los módulos V1 de una transacción SAP se procesan secuencialmente en un único proceso de trabajo de actualización. Si un sistema SAP tiene un proceso de trabajo para actualizaciones V2 (tipo UP2), los módulos V2 solo se actualizarán en el sistema SAP. Una vez completado el procesamiento correctamente, el proceso de trabajo de actualización V1 libera de nuevo los bloqueos relevantes. Esto significa que los procesos de trabajo de actualización normales se encuentran disponibles de nuevo más rápidamente para las actualizaciones V1 críticas en el tiempo, y las entradas de bloqueo relevantes se borran antes. Si no ha configurado ningún proceso de trabajo de actualización V2, el proceso de trabajo V1 se encargará de tratar todas las actualizaciones. Los módulos no se actualizan automáticamente en la ejecución colectiva. Únicamente se actualizan los módulos si un informe especial (informe RSM13005) desencadena la actualización. Entonces se recopilan, se agregan y se actualizan todas las llamadas de los módulos de funciones simultáneamente. Los módulos de función se tratan como módulos de actualización V2. Si se produce un error durante una actualización, finalizará el procesamiento del componente de actualización activo. Los usuarios obtienen un aviso automático por correo urgente cuando se cancela una actualización. Si un proceso de trabajo de diálogo se cancela cuando se escriben datos en las tablas VB*, estas contienen datos que pueden no ser actualizados. Estos datos se borran automáticamente al volver a iniciar el sistema. Los datos también se pueden borrar de forma manual. Las tablas de aplicación permanecen sin modificaciones después de borrar los datos. Una actualización asincrónica se puede cancelar por varias razones. Si, por ejemplo, se realizan varios intentos para indicar el mismo registro de datos (mediante inserción) en una tabla, se desencadena la condición de excepción Clave duplicada en la codificación, puesto que ya existe una entrada en la tabla con esa clave. Por este motivo, no es posible escribir el registro de datos correspondiente en la base de datos más de una vez. At this point, show the participants how the SAP system reacts when an update terminates (if you have made the preparations described at the beginning of this lesson). To do this, call report VBTST300 in transaction SA38 with parameters U (= update), No. of COMMIT WORKS = 1, and No. of func. per update = 1 (leave the other parameters unchanged). This updates the database without any problems. Then call the same program with the same parameters (except with I instead of U). The program will now try to insert an entry in the database that already exists there. As a result, at the next user interaction after you run the program (you may need to wait a second), the system sends an express document with the title Update was Terminated. This is a message from the update work process.
118
© Copyright . Reservados todos los derechos.
Lección: Explicación de procesos AS ABAP
Once you have received the message, display the update record that caused the error in SM13. You also have the option of branching from here to the short dump. You may find that several defective update records are displayed in SM13 because several courses may be using the same system simultaneously.
Atención: Use this demonstration to create defective update records that the participants can then display in the exercises.
Cuando una actualización se cancela, el sistema envía un correo urgente al usuario que lanzó la actualización. El responsable del sistema es quien debe intervenir entonces e iniciar los pasos adicionales. La transacción SM13 (solicitudes de actualización) pone a disposición de los responsables del sistema herramientas de análisis para tratar las actualizaciones canceladas. Una vez que se ha corregido el error que causó la cancelación (por ejemplo, la reparación de los daños en el hardware), el usuario final necesita reiniciar el procesamiento.
© Copyright . Reservados todos los derechos.
119
Capítulo 3: El núcleo del sistema
120
© Copyright . Reservados todos los derechos.
Capítulo 3 Ejercicio 6 109
Configuración y supervisión de las entradas de tabla de bloqueo
Ejemplo empresarial Desea conocer cómo funciona el tratamiento en cola (bloqueo) en AS ABAP. Conozca cómo funciona la gestión de bloqueos en los sistemas SAP. 1. Modifique sus datos de usuario. 2. Abra una nueva ventana y verifique la lista de entradas de bloqueo para determinar en qué tablas se ha fijado un bloqueo. 3. En otra ventana, intente volver a modificar sus datos de usuario. 4. Cierre la ventana que visualiza sus datos de usuario listos para la modificación. ¿Qué sucede con las entradas de bloqueo?
© Copyright . Reservados todos los derechos.
121
Capítulo 3 Solución 6 110
Configuración y supervisión de las entradas de tabla de bloqueo
Ejemplo empresarial Desea conocer cómo funciona el tratamiento en cola (bloqueo) en AS ABAP. Conozca cómo funciona la gestión de bloqueos en los sistemas SAP. 1. Modifique sus datos de usuario. a) En la pantalla SAP Easy Access, ejecute el código de transacción SU3 para la actualización de algunos de sus datos de usuario (alternativamente, seleccione Sistema → Perfil de usuario → Datos propios). Nota: Los datos de usuario están ahora bloqueados exclusivamente en el nivel del sistema SAP. 2. Abra una nueva ventana y verifique la lista de entradas de bloqueo para determinar en qué tablas se ha fijado un bloqueo. a) En la pantalla SAP Easy Access, seleccione Sistema → Crear sesión para abrir una ventana nueva. b) Ejecute el código de transacción SM12 (alternativamente seleccione Herramientas → Administración → Monitor → Entradas en tabla de bloqueo). c) Presione INTRO sin cambiar los valores predeterminados. Verá una entrada en tabla de bloqueo (mantenida por su usuario) para su registro de datos en la tabla USR04. 3. En otra ventana, intente volver a modificar sus datos de usuario. a) En la pantalla SAP Easy Access, (seleccione Sistema → Crear sesión) ejecute nuevamente la transacción SU3 para abrir la segunda ventana. Nota: El sistema devuelve un mensaje de información para indicar que los datos solicitados ya se encuentran en acceso de modificación por otro usuario (en este caso, usted mismo). Los datos bloqueados aún se pueden visualizar. Dado que la transacción SU3 siempre se encuentra en modo de modificación, deberá utilizar la transacciónSU01 para visualizar los datos de usuario que actualmente se modifican. 4. Cierre la ventana que visualiza sus datos de usuario listos para la modificación.
122
© Copyright . Reservados todos los derechos.
Lección: Explicación de procesos AS ABAP
¿Qué sucede con las entradas de bloqueo? a) Para finalizar su ventana de modificación de usuario, ejecute el código de transacción SM04 (alternativamente, seleccione Herramientas → Administración → Gestión de sistema → Monitor → Supervisión de sistema → Resumen de usuario). b) Seleccione su usuario y el botón Sesiones. c) Posicione el cursor en la fila Actualizar datos propios de usuarios y seleccione el botón Final de sesión. d) Si selecciona ahora sus actuales entradas de bloqueo mediante la transacción SM12, no aparecerá el bloqueo en la tabla USR04. Nota: Si se cancela una acción en un sistema SAP (ya sea deliberadamente o no), los bloqueos mantenidos por la acción se borran.
© Copyright . Reservados todos los derechos.
123
Capítulo 3: El núcleo del sistema
Impresión
Figura 45: Imprimir en AS ABAP
Los sistemas SAP proporcionan una amplia variedad de opciones para representar datos de tipo empresarial y de otros tipos. Estos datos, que son creados y formateados en un paso de diálogo, se pueden enviar a impresoras y a otras interfaces de salida (fax, correo electrónico, etc.). Primero debe configurar la impresora en el sistema antes del envío. Seleccione una impresora que ya ha sido configurada eligiendo el comando Impresora (Ctrl + P) y a continuación utilizando el botón de ayuda F4. Generalmente, se configura una impresora estándar como predeterminada en su perfil de usuario. Una vez configurada la impresora, el sistema SAP dispone de toda la información necesaria para crear una orden SPOOL. Una orden SPOOL contiene información acerca de los datos por emitir, de su formato y del modelo de impresora utilizado. La orden SPOOL generada se almacena en el TemSe (temporary sequential file, fichero secuencial temporal).
Consejo: Las órdenes SPOOL pueden crearse mediante procesos de trabajo de diálogo o procesos de trabajo de fondo. Los procesos de trabajo SPOOL no crean órdenes SPOOL. Un proceso de trabajo SPOOL formatea los datos específicos en la orden SPOOL y crea una solicitud de salida. La orden de salida contiene todos los datos en un formato adecuado a la impresora. Estos datos pueden transferirse a un proceso SPOOL de sistema operativo localmente (en el mismo ordenador) o bien remotamente (mediante una conexión de red).
124
© Copyright . Reservados todos los derechos.
Lección: Explicación de procesos AS ABAP
Nota: En un sistema SAP, la conexión entre un proceso de trabajo SPOOL y el proceso SPOOL de sistema operativo se conoce como el método de acceso. Existen otros métodos de acceso, además de los que ya hemos analizado. Estos son dos de los métodos de acceso más utilizados para conectar impresoras a sistemas SAP. En este contexto, remoto o local no se refiere a la ubicación física de la salida, sino al sitio donde se conecta el proceso de trabajo SPOOL al proceso SPOOL de sistema operativo. En cuanto al proceso de impresión, se consigue el mejor rendimiento enviando los datos a imprimir al sistema operativo tan pronto como sea posible. Para enviar a imprimir los datos, utilice el método de acceso local. A continuación, el sistema operativo realiza todas las tareas restantes, como las colas y la transferencia de datos a la impresora seleccionada.
Consejo: Cada impresora seleccionable debe imprimir en el nivel del sistema operativo.
Puede visualizar sus órdenes SPOOL y de salida seleccionando Sistema → Órdenes SPOOL propias (transacción SP02). Seleccione Sistema → Perfil de usuario → Datos propios (código de transacción SU3) para especificar sus opciones personales para imprimir en la etiqueta Opciones predeterminadas en la sección Control SPOOL.
Nota: El curso ADM100 brinda información adicional acerca de la impresión y la configuración de impresoras en AS ABAP.
How to Create a Spool Request 1. Generate a spool request and an output request. a) In a transaction code with list output (such as SM50), choose Print (Ctrl + P). b) In the Print ALV List, choose an output device, such as LP01, and then, choose Continue. A spool request is created. c) On the SAP Easy Access screen, choose System → Own Spool Requests. Information on the spool request you have just created (and possibly others as well) is displayed. d) To view the output requests for a spool request, select the spool request and choose the Output requests pushbutton. e) The message you receive for your spool request is List contains no data. Go back and choose Print directly for your spool request. This creates an output request that you can display.
© Copyright . Reservados todos los derechos.
125
Capítulo 3: El núcleo del sistema
126
© Copyright . Reservados todos los derechos.
Capítulo 3 Ejercicio 7 115
Imprimir un duplicado de pantalla en AS ABAP
Ejemplo empresarial La administración del sistema necesita una lista de los procesos de trabajo configurados en cada instancia. Por este motivo, debe ser capaz de imprimir un duplicado de pantalla en AS ABAP. También debe poder explicar la diferencia entre las órdenes SPOOL y las solicitudes de salida. Imprima una lista simple y genere una solicitud de salida desde una orden SPOOL. Imprima la lista de procesos de trabajo. 1. Llame la transacción SM50. Imprima la lista. 2. Visualice sus propias órdenes SPOOL y genere una orden de salida a partir de la orden SPOOL.
© Copyright . Reservados todos los derechos.
127
Capítulo 3 Solución 7 116
Imprimir un duplicado de pantalla en AS ABAP
Ejemplo empresarial La administración del sistema necesita una lista de los procesos de trabajo configurados en cada instancia. Por este motivo, debe ser capaz de imprimir un duplicado de pantalla en AS ABAP. También debe poder explicar la diferencia entre las órdenes SPOOL y las solicitudes de salida. Imprima una lista simple y genere una solicitud de salida desde una orden SPOOL. Imprima la lista de procesos de trabajo. 1. Llame la transacción SM50. Imprima la lista. a) Llame la transacción SM50; alternativamente, seleccione Herramientas → Administración → Monitor → Supervisor de sistema → Resumen de usuario y seleccione Imprimir (Ctrl + P). b) Utilice la ayuda F4 para seleccionar un Dispositivo de salida, tal como LP01, y seleccione Continuar. c) Seleccione Continuar para confirmar su configuración en la ventana de diálogo visualizada. 2. Visualice sus propias órdenes SPOOL y genere una orden de salida a partir de la orden SPOOL. a) En la pantalla SAP Easy Access, seleccione Sistema → Órdenes SPOOL propias. Verifique el status el número de páginas de su orden SPOOL. b) Seleccione su orden SPOOL y elija directamente Imprimir para crear una orden de salida para la orden SPOOL seleccionada. c) Seleccione su orden SPOOL y elija Órdenes de salida para visualizar las órdenes de salida. Se visualiza el texto de status Esperando formato de salida. Dado que no existe ninguna impresora conectada al sistema de formación, no podrá imprimir.
128
© Copyright . Reservados todos los derechos.
Lección: Explicación de procesos AS ABAP
Ejecución en proceso de fondo
Figura 46: Planificación de tareas de fondo (jobs)
La ejecución en proceso de fondo de SAP es un método para automatizar las tareas rutinarias y optimizar el uso de los recursos informáticos de SAP de su organización. Las características del proceso de fondo son las siguientes: ● Puede utilizar el proceso de fondo para iniciar automáticamente los programas planificados para usted. ●
●
Puede utilizar la ejecución en proceso de fondo para ejecutar programas largos o que requieren muchos recursos en horas valle. Puede utilizarlo para asignar la tarea para ejecutar informes y programas al sistema. No existe ninguna presión en los recursos de diálogo y los informes que se ejecutan en proceso de fondo no están sujetos a las restricciones de tiempo de ejecución del procesamiento de diálogo (finalización del programa tras un tiempo de ejecución de 10 minutos).
La separación de la ejecución en proceso de fondo en procesos de trabajo especiales ofrece una dimensión adicional para separar la ejecución en proceso de fondo y el trabajo interactivo. La ejecución en proceso de fondo y el trabajo interactivo del sistema tienen lugar a distintas horas. Por ejemplo, el sistema se utiliza interactivamente durante el día, y la ejecución en proceso de fondo tiene lugar durante la noche. Puede utilizar los procesos de trabajo de fondo para separar el proceso de fondo y el trabajo interactivo por servidores. Esto se debe a que los jobs de fondo se ejecutan únicamente en servidores que ofrecen proceso de fondo. Ejecución de programas en el fondo La ejecución de un programa en proceso de fondo sucede de la siguiente manera:
© Copyright . Reservados todos los derechos.
129
Capítulo 3: El núcleo del sistema
●
●
●
●
Un usuario final puede planificar que el programa se inicie en proceso de fondo como job de la transacción de aplicación. Entonces, el job espera el momento de ejecución planificado en la tabla de planificación de jobs. Si llega la hora de ejecución planificada y existen procesos de trabajo de fondo disponibles, el planificador de procesos de fondo distribuye el job a un proceso de trabajo de fondo y lo ejecuta. Los usuarios pueden visualizar el resultado en la transacción de aplicación o, en caso de programas de generación de listas, visualizar la orden SPOOL correspondiente al job (véase la sección Impresión). Para visualizar sus propios jobs, seleccione Sistema → Jobs propios en la pantalla SAP Easy Access (código de transacción SMX).
La gestión de sistema y la preparación de trabajo tienen acceso a una herramienta para planificar varias tareas de fondo con la transacción SM36 ( Herramientas → CCMS → Proceso de fondo → Definir Jobs). La supervisión de jobs en todo el sistema tiene lugar con la transacción SM37 (Herramientas → CCMS → Proceso de fondo → Jobs: Resumen y gestión). Para la planificación y la supervisión de tareas de fondo de todo el sistema, utilice la Planificación central de procesos SAP (SAP CPS) y otros productos con licencia de los interlocutores de SAP. Course ADM100 provides further insight into background processing.
How to Schedule a Program in the Background 1. Show how an ABAP program is executed in the dialog. a) Run transaction code SA38. Run the program RSUSR0000. You see a list of all users who are logged on (see also AL08). b) Run transaction code SA38 to schedule the same program in the background. c) Display the job by using System → Own Jobs and then display the spool list for the job.
130
© Copyright . Reservados todos los derechos.
Capítulo 3 Ejercicio 8 119
Planificación de un informe simple en el fondo
Ejemplo empresarial Como administrador del sistema o usuario final, debe planificar la ejecución de un informe en proceso de fondo. Planificación y supervisión de jobs. Diferenciación entre ejecutar un informe en modo de diálogo y en modo de fondo. Planificación de la ejecución de un job simple. 1. En la pantalla SAP Easy Access, ejecute el código de transacción SA38 (Sistema → Servicios → Informes) y seleccione el informe RSUSR000 en el modo de diálogo. 2. Llame la transacción SA38 para ejecutar el informe RSUSR000 en el fondo. Visualice el resultado del job.
© Copyright . Reservados todos los derechos.
131
Capítulo 3 Solución 8 120
Planificación de un informe simple en el fondo
Ejemplo empresarial Como administrador del sistema o usuario final, debe planificar la ejecución de un informe en proceso de fondo. Planificación y supervisión de jobs. Diferenciación entre ejecutar un informe en modo de diálogo y en modo de fondo. Planificación de la ejecución de un job simple. 1. En la pantalla SAP Easy Access, ejecute el código de transacción SA38 (Sistema → Servicios → Informes) y seleccione el informe RSUSR000 en el modo de diálogo. a) En la pantalla SAP Easy Access, ejecute el código de transacción SA38. b) En la pantalla Editor ABAP: Pantalla inicial, indique el nombre del informe RSUSR000 en el campo Programa y seleccione el botón Ejecutar . Se muestra una lista de usuarios que han iniciado sesión. 2. Llame la transacción SA38 para ejecutar el informe RSUSR000 en el fondo. Visualice el resultado del job. a) En la pantalla SAP Easy Access, ejecute el código de transacción SA38. b) En la pantalla ABAP: Ejecución de programa, indique el nombre del informe RSUSR000 en el campo Programa. c) Seleccione el botón Fondo. d) Seleccione el botón Ejecutar inmed.. También puede seleccionar el botón Planificar. Asegúrese de haber indicado el Nombre del job y el Tiempo de ejecución. Asegúrese de que el tiempo de ejecución no se extienda demasiado (alrededor de 2 minutos estaría bien). De otra manera, no podrá ver enseguida el resultado del job. e) A continuación, seleccione Planificar una vez. f) En la pantalla Informe de planificación, seleccione Sistema → Jobs propios. Verá el job que acaba de planificar en la lista visualizada. Si el job se marca como "liberado", debe esperar hasta que pase el tiempo de ejecución que seleccionó. Si el job se marca como "finalizado", ha finalizado y puede visualizar el resultado en forma de una lista de SPOOL. Para visualizar el resultado, seleccione el job, y a continuación el botón Spool. Seleccione la orden SPOOL y el botón Visualizar contenidos. Puede ver una lista de todos los usuarios registrados en el momento de la ejecución del job.
132
© Copyright . Reservados todos los derechos.
Lección: Explicación de procesos AS ABAP
Comunicación mediante el gateway
Figura 47: Comunicación por gateway
Cada instancia de un sistema AS ABAP contiene un gateway. El gateway se utiliza para la comunicación entre los procesos de trabajo de varias instancias o sistemas SAP. El gateway se utiliza también para la comunicación entre los procesos de trabajo y los programas externos. El lector de gateway (generalmente denominado gateway) es el proceso principal del sistema de gateway. El despachador inicia el gateway y lo verifica periódicamente. The figure illustrates the possible communication channels. The figure can also be interpreted to show a non-SAP system starting a business process and querying data from the SAP Customer Relationship Management (CRM) system. The SAP CRM system, in turn, queries the data from an SAP Enterprise Core Component. The response from the SAP Enterprise Core Component to the non-SAP system is returned the same way through the SAP CRM system. Durante la comunicación entre instancias de un sistema o varios sistemas mediante una llamada de función remota (RFC) o una interfaz de programación común (CPIC), el gateway siempre está implicado. Si un proceso de trabajo de diálogo debe establecer una conexión RFC a un sistema remoto en el contexto de una solicitud, por ejemplo, para traer datos de cliente, utiliza el gateway. El gateway se encarga, entonces, de la comunicación con el sistema remoto. A continuación, el gateway reenvía la solicitud al gateway del sistema remoto. El gateway remoto transfiere la solicitud al despachador, el cual a su vez reenvía la solicitud a uno de sus procesos de trabajo. A continuación, los procesos de trabajo se comunican en forma directa con el gateway del despachador. Por este motivo, es el gateway el que siempre recibe las conexiones RFC de entrada. Las conexiones de salida son iniciadas por el proceso de trabajo.
© Copyright . Reservados todos los derechos.
133
Capítulo 3: El núcleo del sistema
In transaction SMGW, the connections of the gateway can be monitored. Installing a standalone gateway is also possible. This is sometimes required for integrating non-SAP applications with SAP applications or solutions.
Procesamiento de solicitudes web
Figura 48: Procesamiento de una solicitud web para 7.0x o versión anterior
El Internet Communication Manager permite que los sistemas SAP se comuniquen mediante los protocolos HTTP, HTTPS y SMTP. El ICM puede procesar órdenes de Internet que incluyen su combinación de servidor/puerto en sus URL. Las solicitudes HTTP(S) pueden procesarse o bien en el proceso de trabajo ABAP (por ejemplo, aplicaciones Web Dynpro ABAP) o bien reenviarse a AS Java (por ejemplo, aplicaciones Web Dynpro Java). El ICM puede utilizar la URL para decidir hacia dónde reenviar la solicitud, si es una pila doble. Si se requieren datos de base de datos para AS ABAP, se crea una conexión a un proceso de trabajo mediante memory pipes. Si la solicitud está dirigida a AS Java, se envía al despachador Java (2b) para SAP NetWeaver 7.0 o una versión anterior, el cual la reenvía a un proceso de servidor Java (3b). El despachador Java es reemplazado por ICM en SAP NetWeaver 7.1x o una versión posterior. A continuación, el proceso de servidor Java consulta el esquema Java de la base de datos, si procede, y envía la respuesta de nuevo al ICM. Finalmente, el ICM envía la respuesta desde el sistema SAP al usuario que envió la solicitud (5). In contrast to ABAP, where there are different types of work processes (dialog, update, and background) for different types of tasks, the Java server process offers several services simultaneously (for example, HTTP Provider Service, JDBC Connector Service, and Locking Adapter Service). If, at this point, the participants ask whether several server/port combinations must also be released for external access in the case of several instances, you can refer to the SAP Web Dispatcher. The SAP Web Dispatcher (or another load balancer) is used to distribute HTTP requests across all instances of an SAP system. The SAP Web Dispatcher is the central point of entry to the SAP system from the Internet. For each incoming request, the SAP Web
134
© Copyright . Reservados todos los derechos.
Lección: Explicación de procesos AS ABAP
Dispatcher must decide the instance to which it forwards the request. The architecture and configuration of the SAP Web Dispatcher are discussed in course ADM103.
How to Process a Web Request 1. Demonstrate the following process in system PSM. The URL is http://:, for example, http://twdf1928.wdf.sap.corp:8080. By default, the ICM HTTP port is 80$$, where $$ is the instance number. You can check the port under parameter icm/server_port_0 by running transaction code SMICM by choosing Goto → Parameter → Display on the ICM Monitor screen. Call the URL http://:/sap/public/info (calls an ABAP function module) and then http://: (calls the AS Java homepage). This is an easy way to demonstrate the distribution of requests through the ICM.
© Copyright . Reservados todos los derechos.
135
Capítulo 3: El núcleo del sistema
RESUMEN DE LA LECCIÓN Ahora podrá:
136
●
Describir el procesamiento de transacciones en AS ABAP
●
Explicar los procesos ABAP y sus fines
© Copyright . Reservados todos los derechos.
Capítulo 3
125
Evaluación de la formación
1. Java es un lenguaje de programación orientado a objetos e independiente de la plataforma. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
2. En una configuración cliente/servidor de dos capas, cada capa se ejecuta en sus propios hosts. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
3. ¿Cuáles son las ventajas de una configuración cliente/servidor de tres capas, en comparación con una configuración de una capa o de dos capas? Seleccione las respuestas correctas. X
A Escalabilidad simplificada
X
B Administración simplificada
X
C Ajuste de carga
X
D Ninguno de los anteriores
4. The Software Deployment Manager (SDM) es la herramienta estándar utilizada para instalar los componentes de software ABAP. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
© Copyright . Reservados todos los derechos.
137
Capítulo 3: Evaluación de la formación
5. El lector de gateway permite la comunicación entre sistemas SAP o entre sistemas SAP y sistemas de aplicación externos. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
6. Los datos no necesitan ser leídos desde la base de datos cada vez que se requiera en una instancia. Pero los datos pueden llamarse rápidamente desde la memoria intermedia. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
7. __________________________ se utiliza para gestionar cantidades considerables de datos. Seleccione la respuesta correcta. X
A Interfaz gráfica de usuario (GUI)
X
B Sistema de gestión de bases de datos relacionales
X
C Un procesador dynpro
X
D Un despachador ABAP
8. Identifique los tipos de procesos de trabajo en un sistema AS ABAP. Seleccione las respuestas correctas.
138
X
A Proceso de trabajo de diálogo
X
B Proceso del servidor de mensajes
X
C Proceso de trabajo de actualización
X
D Proceso de Internet Communication Manager (ICM)
X
E Proceso de trabajo de fondo
X
F Proceso de trabajo de encolamiento
X
G Proceso de trabajo SPOOL
© Copyright . Reservados todos los derechos.
Capítulo 3: Evaluación de la formación
9. En ___________, varios usuarios pueden acceder al mismo tiempo a la lectura de los datos de bloqueo. Seleccione la respuesta correcta. X
A Bloqueos contra escritura
X
B Bloqueos contra lectura
X
C Bloqueos contra escritura ampliados
X
D Bloqueos optimistas
© Copyright . Reservados todos los derechos.
139
Capítulo 3
128
Respuestas a la Evaluación de la formación
1. Java es un lenguaje de programación orientado a objetos e independiente de la plataforma. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
El lenguaje de programación Java fue introducido por primera vez por Sun Microsystems Inc.™ en el año 1995. Java es un lenguaje de programación orientado a objetos e independiente de la plataforma, que se ha extendido por distintas áreas. 2. En una configuración cliente/servidor de dos capas, cada capa se ejecuta en sus propios hosts. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
En una configuración de tres niveles, cada capa se ejecuta en sus propios hosts. Muchos servidores de aplicación pueden trabajar simultáneamente con los datos de un servidor de base de datos. 3. ¿Cuáles son las ventajas de una configuración cliente/servidor de tres capas, en comparación con una configuración de una capa o de dos capas? Seleccione las respuestas correctas. X
A Escalabilidad simplificada
X
B Administración simplificada
X
C Ajuste de carga
X
D Ninguno de los anteriores
En una configuración de tres capas, la implementación de una capa adicional de hardware para los procesos de aplicación simplifican la adaptación de un sistema SAP, si se modifica el número de usuarios (escalabilidad). La capa adicional también facilita asignar grupos de usuarios para servidores de aplicación específicos (vista orientada al software) (ajuste de carga). Sin embargo, la capa de hardware adicional no reduce la carga de trabajo administrativa.
140
© Copyright . Reservados todos los derechos.
Capítulo 3: Respuestas a la Evaluación de la formación
4. The Software Deployment Manager (SDM) es la herramienta estándar utilizada para instalar los componentes de software ABAP. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
El SDM es la herramienta estándar utilizada para instalar componentes de software SAP NetWeaver AS Java. 5. El lector de gateway permite la comunicación entre sistemas SAP o entre sistemas SAP y sistemas de aplicación externos. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
El lector de gateway permite la comunicación entre sistemas SAP o entre sistemas SAP y sistemas de aplicación externos. Hay un lector de gateway por cada despachador. 6. Los datos no necesitan ser leídos desde la base de datos cada vez que se requiera en una instancia. Pero los datos pueden llamarse rápidamente desde la memoria intermedia. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
Los datos que se leen, pero que raramente se modifican (por ejemplo, programas o datos de Customizing como mandantes, monedas o sociedades) se pueden mantener como copia del contenido de la base de datos en la memoria compartida del servidor de aplicación. Esto significa que los datos no necesitan ser leídos desde la base de datos cada vez que se requieran. Pero pueden llamarse rápidamente desde la memoria intermedia. Cada instancia dispone de sus propias memorias intermedias. 7. __________________________ se utiliza para gestionar cantidades considerables de datos. Seleccione la respuesta correcta. X
A Interfaz gráfica de usuario (GUI)
X
B Sistema de gestión de bases de datos relacionales
X
C Un procesador dynpro
X
D Un despachador ABAP
Para gestionar cantidades considerables de datos se utilizan sistemas de gestión de bases de datos relacionales.
© Copyright . Reservados todos los derechos.
141
Capítulo 3: Respuestas a la Evaluación de la formación
8. Identifique los tipos de procesos de trabajo en un sistema AS ABAP. Seleccione las respuestas correctas. X
A Proceso de trabajo de diálogo
X
B Proceso del servidor de mensajes
X
C Proceso de trabajo de actualización
X
D Proceso de Internet Communication Manager (ICM)
X
E Proceso de trabajo de fondo
X
F Proceso de trabajo de encolamiento
X
G Proceso de trabajo SPOOL
En un sistema AS ABAP se presentan los procesos de diálogo, de actualización, de cola y de trabajo SPOOL. 9. En ___________, varios usuarios pueden acceder al mismo tiempo a la lectura de los datos de bloqueo. Seleccione la respuesta correcta. X
A Bloqueos contra escritura
X
B Bloqueos contra lectura
X
C Bloqueos contra escritura ampliados
X
D Bloqueos optimistas
En los bloqueos de lectura, varios usuarios pueden acceder al mismo tiempo a la lectura de los datos de bloqueo.
142
© Copyright . Reservados todos los derechos.
CAPÍTULO 4
Tecnologías de la comunicación y la integración
Lección 1 Integración de aplicaciones existentes a aplicaciones SAP Ejercicio 9: Utilizar una Business Application Programming Interface
144 151
Lección 2 Procesos empresariales de vinculación de todo el sistema
154
Lección 3 Trabajo con servicios web en el servidor de aplicación de SAP NetWeaver
158
Lección 4 Explicación de arquitectura orientada al servicio
162
OBJETIVOS DEL CAPÍTULO ●
Explicar las RFCs, el Business Object Repository (BOR), y las BAPIs
●
Describir ALE
●
Trabajar con servicios web en SAP NetWeaver AS
●
Describir SOA en el contexto de SAP
●
Diferenciar entre Web y servicios empresariales para SOA
© Copyright . Reservados todos los derechos.
143
Capítulo 4 Lección 1 132
Integración de aplicaciones existentes a aplicaciones SAP
RESUMEN DE LA LECCIÓN Este módulo ofrece una vista general de las tecnologías de interfaz disponibles en un sistema SAP, mientras se concentra en el significado de una llamada de función remota (RFC) y Business Application Programming Interfaces (BAPIs). Ejemplo empresarial Necesita integrar aplicaciones existentes con aplicaciones SAP. Las interfaces estándar son especialmente interesantes en la integración. Por este motivo, se requieren los siguientes conocimientos: ●
Comprensión de varias tecnologías de interfaz utilizadas por los sistemas SAP
●
Comprensión sobre cómo crear una RFC
●
Comprensión de la utilización de objetos empresariales y sus BAPIs This lesson gives the participants an overview of the various interface technologies available. You need a thorough understanding of RFCs (transactions SE37 and SM59), Business Object Repository (BOR), and BAPIs.
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
144
Explicar las RFCs, el Business Object Repository (BOR), y las BAPIs
© Copyright . Reservados todos los derechos.
Lección: Integración de aplicaciones existentes a aplicaciones SAP
Resumen de interfaces
Figura 49: Tecnologías de interfaz utilizadas en sistemas SAP
Los sistemas SAP poseen interfaces en varios niveles de comunicación, que cubren desde opciones de conexión altamente técnicas, por ejemplo, utilizando el protocolo TCP/IP o CPIC, hasta interfaces altamente especializadas diseñadas para objetos empresariales, como las BAPIs o la interfaz IDoc utilizadas en el entorno de Application Link Enabling (ALE). Las interfaces superiores que acceden a objetos o a procesos empresariales utilizan la misma tecnología: RFC. Los sistemas SAP utilizan las siguientes tecnologías de interfaz enumeradas en la figura: ALE
●
●
BAPIs
●
Common Program Interface Communication (CPI-C)
●
Electronic Data Interchange (EDI)
●
HyperText Transfer Protocol (HTTP(S))
●
Unidad lógica 6.2 (LU 6.2)
●
RFC
●
Object Linking and Embedding (OLE)
●
Simple Mail Transfer Protocol (SMTP)
●
Simple Object Access Protocol (SOAP)
●
Transmission Control Protocol / Internet Protocol (TCP/IP)
●
Extensible Markup Language (XML)
© Copyright . Reservados todos los derechos.
145
Capítulo 4: Tecnologías de la comunicación y la integración
Remote Function Call
Figura 50: Opciones para conexiones mediante Remote Function Call
La interfaz RFC es un protocolo de interfaz de SAP basado en CPI-C y TCP/IP y simplifica la programación de los procesos de comunicación entre varios sistemas. Las RFCs le permiten llamar y ejecutar funciones definidas previamente en un sistema remoto, o dentro del mismo sistema. Las RFC gestionan el proceso de comunicación, la transferencia de parámetros dentro de un sistema o entre sistemas y el tratamiento de los errores. RFC describe una interfaz, no el lenguaje de programación en el que se ejecuta la función. Si la comunicación RFC es utilizada entre dos sistemas SAP, el sistema que llama utiliza una definición RFC en el otro sistema para tener acceso a una función específica. También puede utilizar RFCs para llamar funciones en sistemas externos. Si desea iniciar programas externos de manera remota, necesita una interfaz RFC fuera del sistema SAP. Podría ser, por ejemplo, un fichero (DLL). Cada interfaz RFC es bidireccional, la cual permite a los programas externos utilizar RFC para tener acceso a funciones en sistemas SAP.
Nota: Todos los módulos de funciones (incluidos aquellos que tienen capacidad remota) se crean junto con sus parámetros de importación y exportación, mediante el Function Builder. Para llamar el Function Builder, seleccione Herramientas → Workbench ABAP → Desarrollo → Function Builder o utilice el código de transacción SE37. Para llamar un módulo RFC de un sistema SAP, debe conocer los parámetros de importación y exportación (definido en el Function Builder). También debe haber una conexión técnica entre los dos sistemas. Esta conexión se conoce como conexión RFC o destino RFC. Puede gestionar las conexiones RFC seleccionando Tecnologías de comunicación e integración → Destinos RFC (Visualizar/Actualizar) o mediante la transacción SM59.
146
© Copyright . Reservados todos los derechos.
Lección: Integración de aplicaciones existentes a aplicaciones SAP
Remote Function Call en detalle
Figura 51: Remote Function Call en detalle
La figura muestra el sistema que llama, en el cual se creó un destino RFC denominado DEST. No confunda un destino RFC en la transacción SM59 con un sistema SAP, ya que una conexión RFC puede apuntar solo a un mandante en un sistema SAP. Estas conexiones también se conocen como conexiones entre sistemas lógicos. Puede tener al menos tantas conexiones RFC entre dos sistemas como mandantes en el sistema destino. Dado que puede especificar un usuario de inicio para el destino en cada conexión RFC, también puede tener acceso a mandantes en el sistema destino varias veces, por ejemplo con un usuario de entrada al sistema diferente cada vez. Si necesita una conexión RFC bidireccional entre dos sistemas, es decir, necesita que el sistema llamado también pueda ejecutar módulos RFC en el sistema que llama, entonces debe configurar una conexión RFC equivalente en el sistema llamado. Al definir destinos RFC en los sistemas SAP, basados en AS ABAP, las conexiones RFC siempre tratan un mandante, cuando etiquetan un sistema SAP, basado en AS ABAP. Las conexiones se pueden usar desde todos los mandantes dentro del sistema (siempre y cuando las autorizaciones lo permitan). En ABAP, utiliza RFC para llamar a un módulo de funciones en otro sistema. El llamado del módulo de funciones se realiza de la siguiente manera: CALL FUNCTION DESTINATION EXPORTING ... IMPORTING ... Se nombra la función que se debe ejecutar en el sistema destino. El nombre del destino debe hacer referencia a una de las conexiones RFC disponibles. Al crear una conexión RFC, debe especificar los datos de inicio de sesión para el sistema destino o introducir los parámetros de inicio de sesión, cuando inicie la RFC. IMPORTING y EXPORTING se utilizan para pasar
© Copyright . Reservados todos los derechos.
147
Capítulo 4: Tecnologías de la comunicación y la integración
parámetros a la función destino y recibir los parámetros de retorno de la función destino. La función llamada en el sistema destino se ejecuta utilizando el ID de usuario indicado para la conexión.
Nota: También puede crear conexiones RFC para las cuales el usuario que realiza la llamada, se utiliza en el sistema destino. Esto significa que hay varios usuarios que pueden utilizar la misma conexión en el sistema destino. Este procedimiento también se denomina RFC de confianza. Es un requisito previo, que se creen usuarios idénticos en los sistemas fuente y destino. La RFC se ha convertido en la interfaz más importante del entorno SAP. Algunos módulos RFC especiales que siguen ciertas convenciones también se conocen como BAPIs.
Business Object Repository y Business Application Programming Interfaces
Figura 52: Business Object Repository y Business Application Programming Interfaces
Una BAPI es una interfaz de programación estandarizada que facilita el acceso interno y externo a procesos y datos empresariales en sistemas SAP. Una BAPI se utiliza con SAP Business Workflow. Las BAPIs se definen en el BOR como métodos de objetos empresariales SAP, y permiten una vista orientada a objetos de los datos empresariales en un sistema SAP. Las funciones que pueden llamarse mediante BAPI se implementan y almacenan en el Function Builder (de Workbench ABAP) como módulos de funciones habilitadas para RFC. Puede visualizar un resumen de las BAPIs disponibles en el BOR, por ejemplo, al activar el botón de Business Object Repository en el Business Object Builder. Para tener acceso al Business Object Builder, seleccione Herramientas → Workbench ABAP → Desarrollo → Business Object Builder o utilice la transacción SWO1. Puede tener acceso directo al BOR utilizando el código de transacción BAPI. Las BAPIs se utilizan en varios contextos para:
148
© Copyright . Reservados todos los derechos.
Lección: Integración de aplicaciones existentes a aplicaciones SAP
●
Enlazar procesos empresariales entre límites de sistema (por ejemplo, utilizando ALE)
●
Integrar varias soluciones en el framework de SAP Business Suite
●
Conectar un sistema SAP a Internet
●
Conectar a programas externos
Nota: Las BAPIs se crean y verifican de la misma forma que los otros módulos de función, utilizando el Function Builder o la transacción SE37. Las BAPIs se definen, entonces, como BAPIs en el BOR.
How to Search for and Test a BAPI Before demonstrating how to search for and test a BAPI, make sure that you are familiar with the following demonstration. If possible, avoid executing the demonstration by using the dummy RFC connection NONE. Instead, create a connection in transaction SM59 with the participants. 1. Present BOR by using a documentation call for a BAPI as an example. a) On the SAP Easy Access screen, choose Tools → ABAP Workbench → Development → Business Object Builder or run transaction BAPI directly. b) On the Alphabetical tab page, search for business object USER. c) From the BAPIs available for this business object, choose Change BAPI. Display the documentation for this BAPI. d) Switch to the business object USER. Display the BAPI. 2. Introduce the use of BAPI with the Function Builder. a) Go to the Tools tab page and choose Function Builder. b) Choose the Display pushbutton. The source code for the BAPI is displayed in the Function Builder. c) Choose the Test/Execute pushbutton, and specify NONE as the RFC target system entry (which refers to your system). d) Enter your user name and choose the Execute pushbutton. Your user data, requested by the RFC from the BAPI, is displayed. After the data is displayed, the result screen for the query is displayed. You can view the return code and the response time for your query. This response time includes the time you took to view the displayed user data.
© Copyright . Reservados todos los derechos.
149
Capítulo 4: Tecnologías de la comunicación y la integración
150
© Copyright . Reservados todos los derechos.
Capítulo 4 Ejercicio 9 137
Utilizar una Business Application Programming Interface
Ejemplo empresarial Necesita datos de usuario de otro sistema SAP. Utilice una BAPI para visualizar los datos de dirección para su usuario en el sistema. 1. Iniciar la transacción de resumen para el BOR. 2. Busque el método USER.Change. Visualice la documentación para este método. 3. Llame el Function Builder para el método USER.Display. Ahora puede ver el código fuente para la BAPI en el Function Builder. 4. Ejecute esta BAPI para su usuario con el destino RFC NONE. 5. Una vez que confirma la ventana de diálogo, se muestra la imagen de resultados para la consulta. Puede ver el código de retorno y el tiempo de respuesta para su consulta.
© Copyright . Reservados todos los derechos.
151
Capítulo 4 Solución 9 138
Utilizar una Business Application Programming Interface
Ejemplo empresarial Necesita datos de usuario de otro sistema SAP. Utilice una BAPI para visualizar los datos de dirección para su usuario en el sistema. 1. Iniciar la transacción de resumen para el BOR. a) En la pantalla SAP Easy Access seleccione Herramientas → Workbench ABAP → Desarrollo → Business Object Builder o indique la transacción SWO1. Si sigue el acceso vía menús Business Object Builder, seleccione BAPI en la ventana de diálogo. 2. Busque el método USER.Change. Visualice la documentación para este método. a) Seleccione la etiqueta Alfabético. En la pantalla BAPI Explorer, busque el business object User. Entre las BAPIs disponibles para este objeto empresarial, seleccione la BAPI USER.Change. Utilice la etiqueta apropiada a fin de visualizar la documentación para esta BAPI en la parte derecha de la pantalla BAPI Explorer. 3. Llame el Function Builder para el método USER.Display. Ahora puede ver el código fuente para la BAPI en el Function Builder. a) Cambie a la BAPI USER.Display. b) En la etiqueta Herramientas, seleccione Function Builder. c) Seleccione el botón Visualizar. 4. Ejecute esta BAPI para su usuario con el destino RFC NONE. a) En la pantalla Function Builder, seleccione el botón Verificar/Ejecutar. b) En Test Function Module: Pantalla inicial, introduzca NONE en el campo entrada a sistema destino RFC (que hace referencia a su sistema). c) Indique su nombre de usuario en la pantalla de consultas (por ejemplo, SAPTEC-04). d) Seleccione el botón Ejecutar. Se muestran sus datos de usuario, solicitados por la BAPI a través de RFC. 5. Una vez que confirma la ventana de diálogo, se muestra la imagen de resultados para la consulta. Puede ver el código de retorno y el tiempo de respuesta para su consulta. a) El código de retorno para su consulta se visualiza como valor para el parámetro de exportación Retorno en la pantalla Módulo de funciones de test: Resultado.
152
© Copyright . Reservados todos los derechos.
Lección: Integración de aplicaciones existentes a aplicaciones SAP
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Explicar las RFCs, el Business Object Repository (BOR), y las BAPIs
© Copyright . Reservados todos los derechos.
153
Capítulo 4 Lección 2 140
Procesos empresariales de vinculación de todo el sistema
RESUMEN DE LA LECCIÓN Este módulo trata los puntos básicos del concepto de Application Link Enabling (ALE). Ejemplo empresarial Su empresa desea implementar las funciones de comercio electrónico de SAP Customer Relationship Management (CRM) para vender productos a sus clientes a través de Internet. Por este motivo, se requieren los siguientes conocimientos: ●
Comprensión de los procesos empresariales en todo el sistema
●
Comprensión del concepto ALE This lesson is aimed at giving the participants an understanding of the significance of crosssystem business processes and the need to link them by using ALE.
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Describir ALE
Importancia de los procesos empresariales de todo el sistema Permitamos comenzar definiendo los procesos empresariales de todo el sistema, utilizando situaciones comunes como ejemplos. Por ejemplo, en una compañía, el sistema de recursos humanos se puede separar del resto del sistema de software empresarial, pero los sistemas no pueden separarse por completo, debido a que el sistema contable necesita los datos de nómina de los empleados. En esta situación, necesita procesos empresariales de todo el sistema para intercambiar los datos relevantes. Ejemplo de cuando los procesos empresariales de todo el sistema se utilizan, si dos empresas colaboran estrechamente y mandan órdenes conjuntas a un proveedor. Los sistemas IT empresariales de las empresas necesitan comunicarse entre sí para consolidar las cantidades que quieren ordenar. En este caso, el proceso empresarial no solo va más allá de los límites del sistema, sino de los límites de la empresa. Un ejemplo adicional de cuándo se utilizan los procesos empresarias en todo el sistema es en la transferencia de una cantidad limitada de datos específicos, por ejemplo, la transferencia electrónica de datos de extractos de cuenta desde un banco a una empresa. Los desarrollos del pasado sugieren que la importancia de los procesos empresariales entre varios sistemas seguirá creciendo rápidamente.
154
© Copyright . Reservados todos los derechos.
Lección: Procesos empresariales de vinculación de todo el sistema
Application Link Enabling (ALE)
Figura 53: Distribución de los procesos empresariales mediante la utilización de la Application Link Enabling
ALE es una manera de crear y operar aplicaciones distribuidas. El concepto básico de ALE es garantizar el funcionamiento de una infraestructura de sistema distribuida e integrada. Esto implica un intercambio de mensajes controlados empresarialmente, utilizando datos consistentes entre sistemas de aplicación sin conexión fija. La integración de las aplicaciones no se efectúa mediante una base de datos central, sino mediante la comunicación sincrónica y asincrónica. Los sistemas que utilizan ALE para intercambiar datos pueden pertenecer a la misma empresa o pueden pertenecer a empresas separadas. Una de las características de ALE es que distintos sistemas se enlazan en términos empresariales a través de una transferencia de datos segura y consistente. También puede describir ALE en términos de los elementos: quién intercambia datos, qué datos son intercambiados, con quién intercambia datos y por qué medios. Implementación de la Application Link Enabling Para implementar ALE, aclare los siguientes puntos: Identificación del proceso empresarial y de los objetos involucrados.
●
●
Identificación de la información que se quiere transmitir.
●
Especificación del formato de los datos que van a transferirse.
●
Decida la tecnología a utilizar para la transferencia.
●
Decida el tipo de transferencia.
●
Especificación del destino de la transferencia de datos.
La siguiente tabla contiene un ejemplo de sincronización de datos en un proceso empresarial:
© Copyright . Reservados todos los derechos.
155
Capítulo 4: Tecnologías de la comunicación y la integración
Proceso
Comercio electrónico para consumidores que utilizan SAP CRM
Identificación de la información que se quiere Secuencia de datos desde el sistema SAP transmitir CRM, que es pasar a una ERP posterior final Especificación del formato de los datos que van a transferirse
Formato IDoc
Decida la tecnología para la transferencia
Mediante Remote Function Call (RFC)
Decida el tipo de transferencia
Asincrónicamente, cada 60 segundos
Decida el objetivo de la transferencia
Suministro de bienes o servicios para la venta en Internet
Identificamos los datos dentro de un sistema SAP utilizando un objeto empresarial y sus Business Application Programming Interfaces (BAPIs). Una BAPI es un método de un objeto empresarial, por ejemplo, el registro maestro de materiales. Un método permitido podría ser la creación o modificación de los datos maestros de material. Las BAPIs permiten tratar todos los datos que pertenecen a un objeto. El formato IDoc describe la estructura de documentos intermedios. Hay varios tipos de formatos IDoc para diferentes tipos de datos por intercambiar. También puede utilizar ALE para transferir datos en un formato XML autorizado. Puede seleccionar su tecnología de transferencia de datos preferida en las restricciones impuestas por un sistema. Por ejemplo, puede transferir datos mediante RFC o utilizando HTTP o HTTPS. Tipos de transferencias Los siguientes son los tipos básicos de transferencia: ● Sincrónica ●
Asincrónica
La transferencia sincrónica significa que los datos se transfieren al crearse o al modificarse. Puede iniciar transferencias asincrónicas en intervalos de su elección. Existen pocas restricciones al tratar de vincular sistemas. Los sistemas implicados deben tener la capacidad técnica de recibir las comunicaciones (habilitado para RFC y para HTTP) e interpretar el formato transferido (IDoc o XML). Los sistemas SAP de distintas liberaciones se pueden enlazar mediante ALE.
DISCUSIÓN CON MODERADOR ¿Qué procesos empresariales de todo el sistema utiliza?
Nota: BIT300 y BIT350 son cursos de formación más avanzados sobre ALE.
156
© Copyright . Reservados todos los derechos.
Lección: Procesos empresariales de vinculación de todo el sistema
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Describir ALE
© Copyright . Reservados todos los derechos.
157
Capítulo 4 Lección 3 143
Trabajo con servicios web en el servidor de aplicación de SAP NetWeaver
RESUMEN DE LA LECCIÓN Esta lección introduce el tema de los servicios web y sus gestiones. Ejemplo empresarial Su empresa desea implementar servicios online mediante los servicios Web. Por este motivo, se requieren los siguientes conocimientos: ●
Comprensión de los servicios web
●
Comprensión del SAP NetWeaver Application Server (SAP NetWeaver AS) Web services are modular function programs that can be combined flexibly. Web services, together with Web Services Description Language (WSDL), can be described as software interfaces, rather than Web capable applications. However, Web services can also be used from a Web browser, but this on its own is not the main characteristic of Web services. In the instructor demonstration, the Web service system information, for example, is called in an ABAP program. SAP prefers the development of enterprise services that can be a combination of Web services. Flexible, modular programming will complement monolithic software architectures to a great extent in the future, at least according to consultancies based on current surveys.
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Trabajar con servicios web en SAP NetWeaver AS
Servicios web fundamentales SAP NetWeaver AS es una plataforma de desarrollo para servicios web, que es una utilidad que brinda una application programming interface (API). En la práctica, el servicio web se encuentra disponible a través de un protocolo de Internet y la aplicación que utiliza el servicio se opera con un navegador web. Observe que no es la definición actual de un servicio web. Los servicios Web son la base técnica para hacer directamente disponibles funciones de una aplicación. La función existente de una aplicación puede dirigirse a través de protocolos de acceso estandarizados, y el contenido se puede intercambiar de forma estructurada. Las funciones para todas las aplicaciones también se pueden desarrollar en forma flexible. La combinación de varios servicios granulares, en el sentido de escenarios empresariales autocontenidos, se llama servicio empresarial. Los siguientes estándares básicos para los servicios web se implementan en SAP NetWeaver AS: ● Extensible Markup Language (XML)
158
© Copyright . Reservados todos los derechos.
Lección: Trabajo con servicios web en el servidor de aplicación de SAP NetWeaver
●
Simple Object Access Protocol (SOAP) SOAP describe un protocolo que se puede utilizar para llamar servicios Web en infraestructuras distribuidas de sistemas. SOAP utiliza HTTP como protocolo de transporte. Los mensajes SOAP tienen una cabecera con información específica y un cuerpo con el mensaje real.
●
Web Services Description Language (WSDL) WSDL es un metalenguaje utilizado para describir la función de un servicio Web. Las funciones, los parámetros, y en particular los códigos de retorno, se describen en forma legible por máquina. WSDL es estandarizado por el World Wide Web Consortium (W3C). Para más información en la estandarización de WSDL, consulte la siguiente URL: http:// www.w3.org/TR/wsdl.html.
●
Universal Description, Discovery, and Integration (UDDI) UDDI es un servicio de directorio para servicios web dinámicos. A través de una interfaz SOAP se proporciona un directorio de servicios Web. La información está resaltada en páginas blancas, amarillas y verdes. Para obtener más información sobre UDDI, consulte http://www.uddi.xml.org. SAP mismo opera el servidor UDDI. Encontrará información sobre UDDI en SAP aquí: http://scn.sap.com/docs/DOC-18439. (Panel de navegación: Arquitectura orientada al servicio ES Workplace o Panel de navegación: Arquitectura orientada al servicio Discovery System). Aquí precisa información sobre qué servicios web se puede registrar y encontrar. SAP NetWeaver AS incluye Repository de servicios empresariales basados en UDDI y registro de servicios, que se pueden utilizar para el control de servicio en toda la empresa.
Servicios web y servidor de aplicación SAP NetWeaver
Figura 54: Esquema de un escenario de servicio Web
Con SAP NetWeaver, las herramientas de desarrollo y de configuración para los servicios web se ampliaron considerablemente para SAP NetWeaver AS ABAP como también para SAP NetWeaver AS Java. Mediante SAP NetWeaver podemos lograr el escenario mostrado en la figura como sigue a continuación:
© Copyright . Reservados todos los derechos.
159
Capítulo 4: Tecnologías de la comunicación y la integración
●
●
●
Un servicio web provisto o implementado en SAP NetWeaver AS se puede publicar en el registro de servicios, donde un potencial consumidor puede encontrarlo. El uso de los servicios web admite varias aplicaciones de SAP NetWeaver. La implementación de los servicios web es compatible en su totalidad con las herramientas de desarrollo ABAP y Java. Los consumidores de servicio web pueden llamar el servicio web en el sistema del proveedor. El contrato para los parámetros a aprobar y el resultado para el retorno es el WSDL del servicio web. El proveedor publica WSDL y es la base tanto para la implementación del servicio web en sí mismo como para el llamado del servicio.
Para implementar los servicios web se utilizan los siguientes enfoques: Enfoque de adentro hacia afuera
●
Una funcionalidad existente se expone como un servicio web. Esta funcionalidad puede ser un módulo existente capaz de funcionar con RFC en ABAP o una clase de Enterprise Bean o de Java existente de parte de Java. ●
Enfoque de afuera hacia adentro El servicio web se crea mediante un WSDL existente como base. Las interfaces de servicio web que representa WSDL, pueden ser diseñadas por instancias en el repository de servicios empresariales siguiendo las directrices de control de servicio web y utilizando los tipos de datos predefinidos. Desde el punto de vista de la gobernabilidad, este enfoque es el camino recomendado para la implementación de servicios web.
Para los consumidores de servicio web, WSDL siempre necesita generar las clases proxy según la interfaz de servicio web.
Herramientas para la configuración de servicios web
Figura 55: Puerto lógico (consumidor) – Punto de acceso al servicio (proveedor)
Antes de que pueda llamar a un servicio web, se debe configurar la parte del proveedor y la parte del consumidor. Para hacer que un servicio sea llamado, los puntos de acceso necesitan ser configurados. Un punto de acceso determina las parametrizaciones de configuración del tiempo de ejecución (por ejemplo, mensajería segura y fiable), que son impuestos en la comunicación consumidor-proveedor. Un servicio puede contar con varios puntos de acceso. La configuración de los puntos finales también se aplica al consumidor. En la parte del consumidor, necesita asignar las parametrizaciones de configuración del tiempo de
160
© Copyright . Reservados todos los derechos.
Lección: Trabajo con servicios web en el servidor de aplicación de SAP NetWeaver
ejecución. Un consumidor puede contar con varios puertos lógicos. Una llamada de servicio web se puede realizar con éxito solo si los puertos lógicos y los puntos finales coinciden con sus parametrizaciones. Por ejemplo, no es posible llamar un servicio web con autentificación de usuario y clave de acceso si se permiten solo los tickets Single Sign-On en la configuración de punto de acceso. La configuración se puede realizar mediante las siguientes herramientas: ● AS ABAP (código de transacción SOAMANAGER) ●
AS Java (SAP NetWeaver Administrator → SOA)
Tanto en el lado del consumidor como en el del proveedor, los proveedores y los consumidores se configuran utilizando la misma herramienta.
DISCUSIÓN CON MODERADOR ¿Tiene la intención de utilizar los servicios web pronto? ¿Qué opciones de implementación ve para los servicios web en su empresa?
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Trabajar con servicios web en SAP NetWeaver AS
© Copyright . Reservados todos los derechos.
161
Capítulo 4 Lección 4 147
Explicación de arquitectura orientada al servicio
RESUMEN DE LA LECCIÓN Este módulo analiza un resumen de los principios de la arquitectura orientada al servicio (SOA) y explica la infraestructura de SOA en el contexto de SAP. You should be familiar with all links (and their content) on SAP Service Marketplace mentioned in this lesson. Ejemplo empresarial Para explicar los principios y la infraestructura de SOA, desea implementar una compleja infraestructura de sistema, que ofrece una solución utilizando SOA con SAP. Por este motivo, se requieren los siguientes conocimientos: ●
Una comprensión de SOA en el contexto de SAP
●
Una comprensión de la diferencia entre servicios web y servicios empresariales
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Describir SOA en el contexto de SAP
●
Diferenciar entre Web y servicios empresariales para SOA
Resumen SOA es un plano para una arquitectura IT adaptable, flexible y abierta para el desarrollo de soluciones modulares empresariales basadas en el servicio. Anteriormente, las soluciones IT y los sistemas de aplicación eran homomórficas. Siempre que solo un sistema de aplicación sirva de una solución IT para sus necesidades empresariales, no hay demanda para SOA. Una demanda para SOA está disponible con infraestructuras de sistemas complejos para una solución. SOA se basa en la capacidad de acoplar sistemas de aplicación. El objetivo de acople es respaldar procesos que interactúan en los sistemas de una infraestructura de aplicación, la cual puede abrirse. El acople debe poder instalarse mediante un mecanismo que sea independiente de la tecnología de los sistemas de aplicación sobre los cuales se encuentre la infraestructura. De otro modo, las futuras inversiones podrían volverse más dependientes de las tecnologías en las cuales están basadas las soluciones existentes. Los mecanismos y estándares para acoplamiento surgen con la evolución de Internet. Además, las innovaciones tecnológicas y los nuevos estándares, tal como servicios web, modelo de procesos de información, reingeniería empresarial y transformación empresarial son los conductores claves para SOA.
162
© Copyright . Reservados todos los derechos.
Lección: Explicación de arquitectura orientada al servicio
El cambio en arquitectura a empresa SOA es comparable a cambios anteriores de arquitectura, tal como la transición de arquitectura de unidad central a arquitectura de servidor de mandante. Una breve historia de arquitectura orientada al servicio
Figura 56: Una breve historia de arquitectura orientada al servicio
Las aplicaciones SOA permiten a una organización aprovechar sus inversiones de IT existentes. La funcionalidad se puede exponer desde las aplicaciones existentes de una manera estándar y se pueden utilizar nuevamente en aplicaciones SOA. SOA es una arquitectura no relacionada a una tecnología específica y puede implementarse utilizando un amplio rango de tecnologías, tal como el Distributed Component Object Model (DCOM), el Common Object Request Broker Architecture (CORBA) y los servicios web. SOA es una arquitectura que utiliza servicios sin conexión fija para soportar los requisitos de procesos empresariales. Es un entorno, donde los recursos se disponen como servicios independientes, a los que se puede acceder sin conocer la implementación de plataforma subyacente. SOA está basada en los siguientes principios rectores: ● Reutilización de granularidad, modularidad, componentización e interoperabilidad ●
Cumplimiento con estándares (estándares comunes y específicos de la industria)
SOA proporciona un modo uniforme de manejar funciones, porque utiliza estándares web conocidos y ampliamente aceptados. Los estándares web son los siguientes: Web Service Definition Language (WSDL)
●
●
Simple Object Access Protocol (SOAP)
●
Universal Description, Discovery, and Integration (UDDI)
© Copyright . Reservados todos los derechos.
163
Capítulo 4: Tecnologías de la comunicación y la integración
Arquitectura orientada al servicio en el contexto de SAP
Figura 57: Arquitectura orientada al servicio en el contexto de SAP
SAP permite a sus clientes estandarizar e innovar sobre una plataforma de la siguiente manera: ● SAP Business Suite proporciona procesos empresariales listos para funcionar para 24 industrias. Continuamente se añaden nuevas características y soporte para los procesos empresariales nuevos con paquetes de ampliación que entregan innovación sin interrupción. SAP Business Suite es el servicio habilitado para el envío de más de 2.800 servicios empresariales. Los clientes pueden aprovechar los servicios empresariales utilizando SAP NetWeaver Process Integration (SAP NetWeaver PI). ●
El SAP NetWeaver Composition Environment (SAP NetWeaver CE) es un tipo de uso del SAP NetWeaver Application Server (AS) Java y ayuda a la creación de procesos flexibles específicos de la compañía, que SAP todavía no trata con software estándar. Aquí es donde SAP NetWeaver CE juega un rol importante. SAP NetWeaver CE es un conjunto de herramientas que otorga a la compañía la capacidad de componer procesos nuevos y de extender procesos empresariales núcleo. Significa que estos procesos de compuestos se construyen en el extremo de SAP Business Suite y son extensiones de la misma. Estos procesos son típicamente ágiles y tienden a cambiar con frecuencia.
Tipos de procesos empresariales compuestos Los procesos empresariales compuestos son como se describe a continuación: ● Centrados en las personas En los procesos empresariales compuestos, las actividades importantes son impulsadas por actividades humanas. Aquí es donde las nuevas ofertas de SAP se adaptan, tales como SAP NetWeaver Business Process Management (SAP NetWeaver BPM) y SAP NetWeaver Business Rules Management (SAP NetWeaver BRM). Ambas ofertas son parte integral de SAP NetWeaver CE. ●
164
Centrados en los sistemas
© Copyright . Reservados todos los derechos.
Lección: Explicación de arquitectura orientada al servicio
Los procesos centrados en los sistemas se concentran en integrar los procesos de aplicación centrales con sistemas de terceros. Los procesos típicos centrados en los sistemas también se producen en casos de business-to-business (B2B), por ejemplo, para la integración con proveedores y clientes. Esto se cubre con SAP NetWeaver PI. Servicios web y empresariales SAP permite a las empresas adoptar SOA como parte de la implementación de las soluciones SAP. En el centro del enfoque de estándares abiertos de SAP a SOA se encuentra el concepto de servicios empresariales. Los servicios empresariales son servicios web altamente integrados, los cuales son diseñados con lógica empresarial y armonizados de manera semántica, a los que puede accederse y utilizarse repetidamente para permitir procesos empresariales completos. También en el centro del enfoque de estándares abiertos de SAP a SOA se encuentra el concepto de interfaces de servicios empresariales. Estas interfaces proporcionan procesos empresariales o pasos de proceso empresarial, que pueden utilizarse para componer escenarios empresariales mientras se asegura la integridad empresarial y la facilidad de la reutilización. SAP diseña e implementa servicios empresariales de tal manera que protege la armonización semántica y la importancia empresarial. Utilizando los servicios empresariales, puede aprovechar las soluciones SAP con soluciones de colaboradores e infraestructuras de soluciones de desarrollo para construir soluciones nuevas, flexibles e innovadoras, basadas en un concepto de integración consistente. Los servicios empresariales le permiten aprovechar las soluciones SAP para incluir un amplio rango de aplicaciones compuestas suministradas por clientes y colaboradores de SAP. SAP publica todos los servicios empresariales que soportan funciones de SAP Business Suite en el sitio Enterprise Services Workplace (ES Workplace en la SAP Community Network (SCN). Diferencia entre servicios web y servicios empresariales Las siguientes características distinguen a los servicios empresariales de los servicios web regulares: ● Semántica empresarial Los servicios empresariales se estructuran de acuerdo a un modelo empresarial armonizado en objetos empresariales, componentes de proceso y tipos de datos globales (GDT). Se definen mediante un enfoque ●
Calidad y estabilidad Los servicios empresariales protegen una interfaz estable para las versiones futuras (compatibilidad regresiva). Su comportamiento, sus requisitos previos, sus dependencias de uso y las posibilidades de configuración se encuentran bien documentados.
●
Normas Los servicios empresariales se basan en estándares abiertos. Las interfaces se describen según WSDL y se crean mediante GTDs basados en UN/CEFACT Core Component Technical Specification (CCTS). Los servicios empresariales B2B se definen en conformidad con los estándares de e-business, siempre que sean aplicables.
Existen varias aplicaciones para los servicios empresariales, por ejemplo, aplicación a aplicación (A2A) e integración B2B o interfaces de usuario. Los servicios empresariales se identifican a un nivel empresarial, que soporta procesos empresariales. Con la Enterprise Services Community (ES Community), SAP compromete activamente sus clientes y colaboradores en el proceso de identificar y definir servicios empresariales. A este respecto, SAP analiza continuamente todos los procesos
© Copyright . Reservados todos los derechos.
165
Capítulo 4: Tecnologías de la comunicación y la integración
empresariales desde la perspectiva de los principales dirigentes para SOA, tal como automatización e innovación del proceso empresarial, eficiencia de usuario y flexibilidad de despliegue. SAP define y desarrolla productos para una configuración comprensiva de servicios empresariales para ayudar a clientes, colaboradores y programadores a construir aplicaciones flexibles en SAP Business Suite. Estos servicios se publican en ES Workplace. Para más información acerca de SOA y de ES Workplace, consulte http://scn.sap.com/comunity/soa and http://scn.sap.com/docs/DOC-25499. RESUMEN DE LA LECCIÓN Ahora podrá:
166
●
Describir SOA en el contexto de SAP
●
Diferenciar entre Web y servicios empresariales para SOA
© Copyright . Reservados todos los derechos.
Capítulo 4
153
Evaluación de la formación
1. _____________ facilita el acceso interno y externo a los procesos y datos empresariales en sistemas SAP. Seleccione la respuesta correcta. X
A El Business Object Repository (BOR)
X
B Una Business Application Programming Interface (BAPI)
X
C Application Link Enabling (ALE)
2. Identificar las interfaces y las opciones de comunicación que son compatibles con los sistemas SAP. Seleccione las respuestas correctas. X
A HyperText Transfer Protocol (HTTP)
X
B Simple Mail Transfer Protocol (SMTP)
X
C Remote Function Call (RFC)
X
D Business Application Programming Interfaces (BAPI)
X
E Extended Data Transfer Protocol
X
F SAP Transfer Protocol
3. ¿Para cuáles de las siguientes funciones se pueden utilizar las Business Application Programming Interfaces (BAPIs)? Seleccione las respuestas correctas. X
A Solicitar datos desde un sistema SAP
X
B Transmitir datos a un sistema SAP
X
C Transferir imágenes de pantalla SAP a aplicaciones de terceros (como Microsoft Word)
X
D Acceder a procesos empresariales en sistemas SAP
© Copyright . Reservados todos los derechos.
167
Capítulo 4: Evaluación de la formación
4. Business __________ Programming Interfaces (BAPIs) son módulos ___________ especializados. Se tiene acceso a ellos utilizando la ____________ interfaz. Se crean y gestionan utilizando el ___________ Builder. Seleccione la respuesta correcta. X
A Aplicación, función, Remote Function Call, Función
X
B Aplicación, Remote Function Call, Función, función
X
C Aplicación, Función, Remote Function Call, función
X
D Función, Remote Function Call, función, Aplicación
5. ¿Qué acción puede realizar con Application Link Enabling (ALE)? Seleccione las respuestas correctas. X
A Intercambiar datos exclusivamente entre sistemas SAP de la misma liberación
X
B Intercambiar datos más allá de los límites del sistema, pero solo entre aplicaciones SAP
X
C Intercambiar datos entre empresas colaboradoras, utilizando ciertos formatos y tecnologías
X
D Comunicar entre sistemas de su infraestructura de sistema
X
E Actualizar sus datos de orden utilizando la Business Application Programming Interface (BAPI) apropiada (solo una vez cada 24 horas)
6. Los procesos compuestos son extensiones de SAP Business Suite. Indique si esta afirmación es verdadera o falsa.
168
X
Verdadero
X
Falso
© Copyright . Reservados todos los derechos.
Capítulo 4
155
Respuestas a la Evaluación de la formación
1. _____________ facilita el acceso interno y externo a los procesos y datos empresariales en sistemas SAP. Seleccione la respuesta correcta. X
A El Business Object Repository (BOR)
X
B Una Business Application Programming Interface (BAPI)
X
C Application Link Enabling (ALE)
2. Identificar las interfaces y las opciones de comunicación que son compatibles con los sistemas SAP. Seleccione las respuestas correctas. X
A HyperText Transfer Protocol (HTTP)
X
B Simple Mail Transfer Protocol (SMTP)
X
C Remote Function Call (RFC)
X
D Business Application Programming Interfaces (BAPI)
X
E Extended Data Transfer Protocol
X
F SAP Transfer Protocol
3. ¿Para cuáles de las siguientes funciones se pueden utilizar las Business Application Programming Interfaces (BAPIs)? Seleccione las respuestas correctas. X
A Solicitar datos desde un sistema SAP
X
B Transmitir datos a un sistema SAP
X
C Transferir imágenes de pantalla SAP a aplicaciones de terceros (como Microsoft Word)
X
D Acceder a procesos empresariales en sistemas SAP
© Copyright . Reservados todos los derechos.
169
Capítulo 4: Respuestas a la Evaluación de la formación
4. Business __________ Programming Interfaces (BAPIs) son módulos ___________ especializados. Se tiene acceso a ellos utilizando la ____________ interfaz. Se crean y gestionan utilizando el ___________ Builder. Seleccione la respuesta correcta. X
A Aplicación, función, Remote Function Call, Función
X
B Aplicación, Remote Function Call, Función, función
X
C Aplicación, Función, Remote Function Call, función
X
D Función, Remote Function Call, función, Aplicación
5. ¿Qué acción puede realizar con Application Link Enabling (ALE)? Seleccione las respuestas correctas. X
A Intercambiar datos exclusivamente entre sistemas SAP de la misma liberación
X
B Intercambiar datos más allá de los límites del sistema, pero solo entre aplicaciones SAP
X
C Intercambiar datos entre empresas colaboradoras, utilizando ciertos formatos y tecnologías
X
D Comunicar entre sistemas de su infraestructura de sistema
X
E Actualizar sus datos de orden utilizando la Business Application Programming Interface (BAPI) apropiada (solo una vez cada 24 horas)
6. Los procesos compuestos son extensiones de SAP Business Suite. Indique si esta afirmación es verdadera o falsa.
170
X
Verdadero
X
Falso
© Copyright . Reservados todos los derechos.
CAPÍTULO 5
Flujo de un programa ABAP
Lección 1 Describir el procesamiento de los programas ABAP
172
OBJETIVOS DEL CAPÍTULO ●
●
Describir la arquitectura del Servidor de aplicación SAP NetWeaver Describir la ejecución de un programa de diálogo simple mediante el sistema de tiempo de ejecución ABAP
© Copyright . Reservados todos los derechos.
171
Capítulo 5 Lección 1 158
Describir el procesamiento de los programas ABAP
RESUMEN DE LA LECCIÓN En este módulo se explica cómo el servidor de aplicaciones (AS) SAP NetWeaver ejecuta el programa de diálogo simple. Ejemplo empresarial Su tarea es explicar la arquitectura del AS SAP NetWeaver y la ejecución de programas ABAP. Por ello, debe conocer lo siguiente: ●
●
Comprender la arquitectura del AS SAP NetWeaver Comprender cómo el sistema de tiempo de ejecución ABAP ejecuta un programa de diálogo simple The idea is to use two demonstration programs to give participants the first impression of how the ABAP runtime system works. Also, explain at what time during the course the individual aspects should be discussed in more detail.
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
●
172
Describir la arquitectura del Servidor de aplicación SAP NetWeaver Describir la ejecución de un programa de diálogo simple mediante el sistema de tiempo de ejecución ABAP
© Copyright . Reservados todos los derechos.
Lección: Describir el procesamiento de los programas ABAP
Arquitectura del sistema ABAP
Figura 58: Arquitectura de cliente/servidor del Servidor de aplicación SAP NetWeaver
El Servidor de aplicación SAP NetWeaver posee una arquitectura modular que sigue el principio mandante/servidor orientado al software. En el Servidor de aplicación SAP NetWeaver, es posible asignar presentaciones, lógica de aplicación y almacenamiento de datos a distintos sistemas. Sirve de base para la posibilidad de ampliar del sistema. Las capas de la Arquitectura del Servidor de aplicación SAP NetWeaver Estas son los varias capas de la Arquitectura del Servidor de aplicación SAP NetWeaver: ● Capa de base de datos La capa de base de datos es la capa más baja en la Arquitectura del Servidor de aplicación SAP NetWeaver. En esta capa, los datos se gestionan con la ayuda de un sistema de gestión de base de datos relacional (RDBMS). Además de los datos de aplicación, incluye programas y los metadatos que el sistema SAP requiere para el funcionamiento. ●
Capa de servidor de aplicación La capa del servidor de aplicación es la capa intermedia en la Arquitectura del Servidor de aplicación SAP NetWeaver. En esta capa, los programas ABAP, como las aplicaciones que provee SAP y cualquier aplicación personalizada, se ejecutan en el servidor de aplicación. Los programas ABAP leen datos de la base de datos, los procesan y, si es necesario, almacenan datos nuevos en la base de datos.
●
Capa de servidor de presentación La capa del servidor de presentación es la tercera capa en la Arquitectura del Servidor de aplicación SAP NetWeaver. Esta capa contiene la interfaz de usuario, desde donde
© Copyright . Reservados todos los derechos.
173
Capítulo 5: Flujo de un programa ABAP
cualquier usuario puede acceder al programa, introducir datos nuevos y recibir los resultados de un proceso de trabajo. La distribución técnica del software es independiente de su ubicación física en el hardware. Verticalmente, todas las capas se pueden instalar encima de otros en el mismo equipo, o en cada capa en un equipo independiente. Horizontalmente, puede dividir las capas de servidores de presentación y aplicación en cualquier cantidad de equipos. La distribución horizontal de componentes de base de datos depende del tipo de base de datos instalada. Extracto de un programa ABAP
Figura 59: Extracto de un programa ABAP
Nota: Puede simplificar la figura para la mayoría de los temas que se tratarán durante este curso. Este curso se centra en la interacción entre un usuario y un programa ABAP. Comprender cómo escribe un programa ABAP es más importante que comprender los procesos exactos que participan en el servidor de aplicación. Por este motivo, trabajará con una figura simplificada que no muestra explícitamente el dispatcher ni el proceso de trabajo. Sin embargo, ampliaremos algunas diapositivas para incluir estos detalles en el caso de que sean relevantes para la programación ABAP. Los programas ABAP se procesan en el servidor de aplicación. El diseño de diálogos de usuario y de accesos a base de datos tiene una especial importancia a la hora de escribir programas de aplicación.
How to Run an ABAP Program Run transaction BC400RCAR. Do not discuss the source code of the underlying program BC400_GSD_CARRIER now.
174
© Copyright . Reservados todos los derechos.
Lección: Describir el procesamiento de los programas ABAP
Resumen del flujo del programa
Figura 60: Visualización para el usuario
Nota: En esta sección se explica el proceso básico que se inicia cuando se ejecuta un programa ABAP. Para ello, utilice un programa con el que el usuario puede introducir el ID de una compañía aérea (por ejemplo, LH) y ver la información detallada de la compañía aérea que se muestra como resultado. El sistema SAP representa una caja negra para la mayoría de los usuarios. No es necesario que los usuarios conozcan el flujo de proceso concreto de un programa ABAP. La mayoría de los usuarios únicamente están interesados en el proceso empresarial y en cómo introducir o visualizar los datos. Los aspectos técnicos del programa tienen menos importancia para la mayoría de los usuarios. Por el contrario, los programadores deben comprender la interacción entre los niveles de servidor y el flujo de proceso, cuando se ejecutan programas para poder desarrollar sus propios programas.
© Copyright . Reservados todos los derechos.
175
Capítulo 5: Flujo de un programa ABAP
Interacción entre niveles de servidor y flujo de programa
Figura 61: Interacción entre niveles de servidor y flujo de programa
Después de que el usuario realice una acción, como seleccionar Intro, una tecla de función, una función de menú o un pulsador, el control pasa del servidor de presentación al servidor de aplicación. Si se activa otro diálogo de usuario desde el programa ABAP, el sistema transmite la pantalla y el control vuelve al servidor de presentación. Un programa no está formado por un único bloque, sino por varias unidades. Esto se conoce como modularización. Puede utilizar la mayoría de estas unidades de modularización en más de un programa. Por ello, suelen denominarse unidades de reutilización. Un buen programa debe tener los accesos a la base de datos encapsulados en dichas unidades de reutilización. La unidad de reutilización crea una división entre el diseño del diálogo de usuario y los accesos a la base de datos, por lo que es posible utilizar los mismos accesos a bases de datos para diferentes diálogos de usuario.
How to Navigate Through the Source Coding Demonstrate the source code for program BC400_GSD_CARRIER. Point out the method call, double-click to navigate to the method and demonstrate the SELECT statement there.
176
© Copyright . Reservados todos los derechos.
Lección: Describir el procesamiento de los programas ABAP
Flujo de programa en detalle: pantalla de selección y lista
Figura 62: Inicio de programa
Siempre que un usuario inicia sesión en el sistema, aparece una pantalla. Desde esta pantalla, el usuario puede iniciar un programa ABAP mediante el acceso vía menús.
Figura 63: El sistema carga el contexto de programa
En este caso, el sistema carga primero el contexto de programa en el servidor de aplicación. El contexto de programa contiene áreas de memoria para variables y objetos de datos complejos, información acerca de las pantallas de diálogos de usuario y bloques de procesamiento ABAP. El sistema de tiempo de ejecución obtiene toda esta información de programa desde el Repository, que es una parte especial de la base de datos. El programa de muestra contiene una pantalla de selección como el diálogo de usuario, una variable y una estructura como objetos de datos, y un bloque de procesamiento ABAP. La lista que muestra
© Copyright . Reservados todos los derechos.
177
Capítulo 5: Flujo de un programa ABAP
los datos se crea dinámicamente durante el tiempo de ejecución. El sistema de tiempo de ejecución ABAP controla el flujo de programa subsiguiente.
Figura 64: El sistema de tiempo de ejecución envía la pantalla de selección
Como el programa contiene una pantalla de selección, el sistema de tiempo de ejecución ABAP lo envía al servidor de presentación. El servidor de presentación controla el flujo de programa mientras el usuario no ha terminado de introducir los datos en los campos de entrada. Las pantallas de selección permiten a los usuarios introducir los criterios de selección requeridos para que el programa continúe.
Figura 65: Los valores de entrada se insertan en objetos de datos
Cuando el usuario finaliza la introducción de datos en la pantalla de selección, puede seguir desencadenando el procesamiento del programa mediante la selección de Ejecutar.
178
© Copyright . Reservados todos los derechos.
Lección: Describir el procesamiento de los programas ABAP
Los datos introducidos se colocan automáticamente en sus objetos de datos correspondientes del programa, y el sistema de tiempo de ejecución ABAP continúa con el control. En nuestro ejemplo simple del programa sólo existe un bloque de procesamiento ABAP. El sistema de tiempo de ejecución ABAP desencadena el procesamiento secuencial de este bloque de procesamiento ABAP. Si las entradas realizadas por el usuario no son del tipo correcto, se desencadena automáticamente un mensaje de error. El usuario deberá corregir sus entradas.
Figura 66: Se carga la unidad de reutilización
Se realiza la llamada a una unidad de reutilización en el bloque de procesamiento que encapsula el acceso a la base de datos. La unidad de reutilización es un bloque de procesamiento especial en un programa individual. El ejemplo real muestra un método en una clase global. Cuando se llama la unidad de reutilización, el programa que la contiene también se lee desde el Repository y se carga en el servidor de aplicación.
© Copyright . Reservados todos los derechos.
179
Capítulo 5: Flujo de un programa ABAP
Figura 67: Se llama la unidad de reutilización
En la llamada, los datos requeridos se transfieren al programa llamado y, después, se ejecuta la unidad de reutilización. La ejecución es sincrónica, es decir que el programa que llama se espera hasta que la unidad de reutilización se haya procesado completamente.
Figura 68: El programa solicita registros de datos de la base de datos
En el programa de ejemplo, se ha programado acceso de sólo lectura en la unidad de reutilización. Asimismo, la información acerca de la tabla de base de datos a la que se debe acceder y la fila de la tabla que se debe leer se pasan a la base de datos.
180
© Copyright . Reservados todos los derechos.
Lección: Describir el procesamiento de los programas ABAP
Figura 69: La base de datos proporciona los registros de datos
La base de datos devuelve al programa el registro de datos solicitado y el sistema de tiempo de ejecución se encarga de colocar los datos en los objetos de datos adecuados. Si se accede a un registro individual, generalmente el objeto de datos es una estructura que contiene componentes relevantes para todos los campos requeridos de la base de datos.
Figura 70: La unidad de reutilización devuelve los datos
Esta acción concluye el procesamiento de la unidad de reutilización y el control se devuelve al programa de llamada, que se reanuda inmediatamente después de la llamada. Cuando el sistema abandona la unidad de reutilización, los datos leídos anteriormente de la base de datos se escriben en un objeto de datos correspondiente al programa de llamada, desde donde se podrán seguir procesando.
© Copyright . Reservados todos los derechos.
181
Capítulo 5: Flujo de un programa ABAP
Figura 71: El sistema de tiempo de ejecución envía la lista
Después de la llamada a la unidad de reutilización, el bloque de procesamiento ABAP recibe sentencias de estructuración de la lista en la que se visualizará el resultado. Al finalizar el bloque de procesamiento, el sistema de tiempo de ejecución envía la lista en forma de pantalla al servidor de presentación.
How to Navigate Through Different UI Technologies Demonstrate the source code for program BC400_GSD_CARRIER again and point out how the user dialogs are structured with the PARAMETERS and WRITE statements. Depending on the level of knowledge the participants already have, you could demonstrate dialog transaction BC400MCAR here too (module pool SAPBC400_GSD_CARRIER). This transaction implements the same business application, but with the aid of a screen. Although the user dialog is structured in a different way, the fundamental principle remains the same. The reuse unit for the database access is the same. Demonstrate the source code for the PAI module in Screen 100 for this.
Estructura del curso La tabla de contenidos para el curso es la siguiente:
182
●
Unidad 1: Flujo de un programa ABAP
●
Unidad 2: Introducción al Workbench ABAP
●
Unidad 3: Elementos básicos del lenguaje ABAP
●
Unidad 4: Modularización
●
Unidad 5: Objetos de datos complejos
●
Unidad 6: Modelado y obtención de datos
© Copyright . Reservados todos los derechos.
Lección: Describir el procesamiento de los programas ABAP
●
Unidad 7: Informe ABAP clásico
●
Unidad 8: Pantalla
●
Unidad 9: SAP List Viewer
●
Unidad 10: Web Dynpro ABAP
●
Unidad 11: Programar la herramienta de análisis
●
Unidad 12: Ajustes del software SAP estándar
El programa que ya se analizó muestra varios de los conceptos que conforman el contenido de este curso. La tabla de contenido, en la que se muestran todos los temas tratados y las unidades correspondientes, le servirá para orientarse en el resto de secciones de este curso. RESUMEN DE LA LECCIÓN Ahora podrá: ●
●
Describir la arquitectura del Servidor de aplicación SAP NetWeaver Describir la ejecución de un programa de diálogo simple mediante el sistema de tiempo de ejecución ABAP
© Copyright . Reservados todos los derechos.
183
Capítulo 5: Flujo de un programa ABAP
184
© Copyright . Reservados todos los derechos.
Capítulo 5
171
Evaluación de la formación
1. ¿Cuál de los siguientes niveles contiene la interfaz de usuario, desde donde cualquier usuario puede acceder a un programa, introducir datos nuevos y recibir los resultados de un proceso de trabajo? Seleccione la respuesta correcta. X
A Nivel de servidor de aplicación
X
B Nivel de servidor de presentación
X
C Nivel lógico de aplicación
X
D Aplicación SAP NetWeaver
2. Cuando los programas no están formados por un único bloque, sino por varias unidades, el concepto se conoce como ______. Seleccione la respuesta correcta. X
A Aislamiento
X
B Modularidad
X
C Universalidad
X
D Multiplicidad
© Copyright . Reservados todos los derechos.
185
Capítulo 5
172
Respuestas a la Evaluación de la formación
1. ¿Cuál de los siguientes niveles contiene la interfaz de usuario, desde donde cualquier usuario puede acceder a un programa, introducir datos nuevos y recibir los resultados de un proceso de trabajo? Seleccione la respuesta correcta. X
A Nivel de servidor de aplicación
X
B Nivel de servidor de presentación
X
C Nivel lógico de aplicación
X
D Aplicación SAP NetWeaver
2. Cuando los programas no están formados por un único bloque, sino por varias unidades, el concepto se conoce como ______. Seleccione la respuesta correcta.
186
X
A Aislamiento
X
B Modularidad
X
C Universalidad
X
D Multiplicidad
© Copyright . Reservados todos los derechos.
CAPÍTULO 6
Introducción al Workbench ABAP
Lección 1 Introducción del entorno de desarrollo de ABAP
188
Lección 2 Organizar desarrollos ABAP Ejercicio 10: Crear un paquete
198 205
Lección 3 Desarrollar programas Ejercicio 11: Desarrollar un programa ABAP sencillo
208 217
Lección 4 Finalizar desarrollo Ejercicio 12: Crear una transacción
221 225
OBJETIVOS DEL CAPÍTULO ●
Describir la estructura del ABAP Repository
●
Usar las herramientas de búsqueda del ABAP Repository
●
Utilizar el Object Navigator para visualizar objetos de Repository
●
Describir la infraestructura de los desarrollos ABAP
●
Crear paquetes
●
Crear programas ABAP
●
Usar del Editor ABAP
●
Activar programas ABAP
●
Crear transacciones
●
Liberar órdenes de modificación
© Copyright . Reservados todos los derechos.
187
Capítulo 6 Lección 1 174
Introducción del entorno de desarrollo de ABAP
RESUMEN DE LA LECCIÓN En este módulo se presenta un resumen del ABAP Repository y los componentes del Workbench ABAP. Asimismo, presenta el Object Navigator como una herramienta de desarrollo central. Ejemplo empresarial Debe describir la estructura del Repository, utilizar las herramientas adecuadas para buscar objetos de Repository y analizar su estructura. Por este motivo, se requieren los siguientes conocimientos: ●
Comprender la estructura del Repository
●
Comprender cómo nombrar y utilizar las herramientas de búsqueda del Repository
●
Comprender cómo utilizar el Object Navigator para visualizar objetos de Repository In this lesson, consider that participants are confronted by many new SAP-specific terms while learning how to handle the search tools of the ABAP Workbench. Terms and working techniques are frequent subjects of discussion.
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá:
188
●
Describir la estructura del ABAP Repository
●
Usar las herramientas de búsqueda del ABAP Repository
●
Utilizar el Object Navigator para visualizar objetos de Repository
© Copyright . Reservados todos los derechos.
Lección: Introducción del entorno de desarrollo de ABAP
ABAP Repository
Figura 72: Capacidad del Repository para todos los mandantes
El Repository consiste en todos los objetos de desarrollo del sistema, como programas, módulos de funciones, definiciones de tablas de base de datos, etc. El Repository contiene objetos proporcionados por SAP, así como objetos definidos por el cliente. El Repository se encuentra en la base de datos y es independiente de mandante. Esto significa que se puede acceder a un objeto del Repository desde cualquier mandante y tiene la misma apariencia en cada mandante en el sistema. La base de datos también contiene datos de aplicación y Customizing, que suele ser dependiente del mandante. Esto significa que cada registro de datos se asigna a un mandante particular y solo pueden leerlo y modificarlo los usuarios que han entrado al sistema en este mandante concreto.
© Copyright . Reservados todos los derechos.
189
Capítulo 6: Introducción al Workbench ABAP
Estructura del Repository
Figura 73: Estructura del Repository
El sistema subdivide el Repository de acuerdo con los componentes de aplicación. Un componente de aplicación, por ejemplo, gestión de materiales (MM), consiste en varios paquetes que contienen objetos relevantes para una subdivisión lógica más detallada. Siempre que se crea un objeto de Repository, debe asignarse a un paquete. Es posible que algunos objetos de Repository tengan subobjetos que, a su vez, sean objetos de Repository. Además, los objetos de Repository pueden hacer referencia a otros objetos de Repository.
190
© Copyright . Reservados todos los derechos.
Lección: Introducción del entorno de desarrollo de ABAP
Herramientas de búsqueda del ABAP Repository
Figura 74: Sistema de Información del Repository
El Sistema de Información del Repository es adecuado para la búsqueda (es decir, no específica de aplicación) aleatoria de objetos del Repository, por ejemplo, todos los programas de un programador determinado o todos los módulos de funciones modificados después de una fecha concreta. Para acceder al Sistema de información del Repository, siga los pasos siguientes: 1. En el menú SAP Easy Access, seleccione Herramientas → Workbench ABAP → Resumen → Sistema de información. 2. Haga doble clic en tipo de objeto. Una pantalla de selección aparece y le permite limitar su búsqueda.
© Copyright . Reservados todos los derechos.
191
Capítulo 6: Introducción al Workbench ABAP
Jerarquía de aplicaciones SAP
Figura 75: Jerarquía de aplicaciones SAP
Utilice la jerarquía de aplicaciones para la búsqueda específica de aplicación para los objetos de Repository. La jerarquía de los componentes de aplicación se encuentra representada en forma de estructura de árbol. Para acceder a la jerarquía de aplicación de SAP, siga los pasos siguientes: 1. En el menú SAP Easy Access, seleccione Herramientas → Workbench ABAP → Resumen → Jerarquía de aplicación → SAP. 2. Expanda el nodo de componente para visualizar todos los paquetes asignados a dicho componente. 3. Presione el pulsador Seleccionar para seleccionar cualquier subárbol y navegue hasta el Sistema de Información del Repository mediante el pulsador Sistema de Información. El sistema recuerda todos los paquetes relevantes de los subárboles seleccionados y los introduce en la pantalla de selección del sistema de información. Esto permite realizar una búsqueda en las aplicaciones seleccionadas previamente.
How to Search for Repository Objects Demonstrate the steps to the class.
192
© Copyright . Reservados todos los derechos.
Lección: Introducción del entorno de desarrollo de ABAP
Object Navigator
Figura 76: Herramientas de Workbench ABAP
El Workbench ABAP incluye todas las herramientas necesarias para crear y tratar objetos de Repository. Estas herramientas cubren todo el ciclo de desarrollo del software. Estas son algunas de las herramientas de Workbench ABAP: ● El Editor ABAP para tratar el código fuente ●
El Dictionary ABAP para tratar definiciones de tabla de base de datos, tipos de datos, etc.
●
El Screen Painter para configurar pantallas junto con funciones para diálogos de usuario
●
El Menu Painter para diseñar interfaces de usuario: barra de menú, barra de herramientas estándar, barra de herramientas de aplicación y opciones de teclas de función
●
La Biblioteca de funciones para actualizar módulos de funciones
●
El Generador de clases para actualizar clases e interfaces globales
Puede llamar cada una de estas herramientas explícitamente y, a continuación, cargar un objeto del Repository para el procesamiento, pero es más conveniente acceder a ellas mediante el Object Navigator. Puede hacer que los objetos del Repository solicitados se enumeren en esta herramienta de desarrollo central. Para tratar uno de los objetos del Repository, haga doble clic sobre este. Automáticamente se llamará a la herramienta correspondiente, que incluirá el Repository seleccionado para visualizar o tratar.
© Copyright . Reservados todos los derechos.
193
Capítulo 6: Introducción al Workbench ABAP
Disposición de pantalla del Object Navigator
Figura 77: Disposición de pantalla del Object Navigator
La pantalla del Object Navigator está dividida en las siguientes áreas: ● El área de navegación para visualizar una lista de objetos jerárquica ●
Un área de herramientas para visualizar y tratar un objeto de desarrollo mediante la herramienta adecuada
Puede visualizar u ocultar el área de navegación (Pantalla completa activa/desactivada). En ambas áreas, puede elegir las funciones mediante un menú contextual, al cual accede con el botón derecho del ratón. El menú contextual ofrece solamente las funciones diseñadas para el objeto correspondiente.
194
© Copyright . Reservados todos los derechos.
Lección: Introducción del entorno de desarrollo de ABAP
Trabajar con el área de navegación
Figura 78: Trabajo con el área de navegación
El sistema visualiza las listas de objeto en el área de navegación. Por ejemplo, si elige visualizar un paquete, se mostrarán todos los objetos de Repository que pertenezcan al paquete especificado. Si hace doble clic en un objeto, podrá visualizarlo o tratarlo. Puede navegar entre las listas de objetos que se han visualizado anteriormente en la sesión de Object Navigator actual (flechas azules). Puede añadir objetos de uso frecuente a sus favoritos.
© Copyright . Reservados todos los derechos.
195
Capítulo 6: Introducción al Workbench ABAP
Funciones del área de herramientas
Figura 79: Funciones del área de herramientas
En el área de herramientas se muestra un objeto de Repository en la herramienta correspondiente. Puede navegar entre los objetos que se han visualizado anteriormente en la sesión de Object Navigator actual (flechas azules). También puede visualizar una subventana con el historial de navegación previa. Al hacer doble clic en un objeto en el historial de navegación, el objeto se visualizará en el área de herramientas.
196
© Copyright . Reservados todos los derechos.
Lección: Introducción del entorno de desarrollo de ABAP
Sincronización de las áreas de navegación y de herramientas
Figura 80: Sincronización de las áreas de navegación y de herramientas
La navegación en el área de navegación es independiente de la navegación en el área de herramientas. Esto permite utilizar ambas áreas de forma flexible. En caso necesario, puede sincronizar ambas áreas como se describe a continuación: ● Puede visualizar un objeto en el área de herramientas haciendo doble clic en el área de navegación o utilizando la función correspondiente del menú contextual del objeto. ●
Puede visualizar la lista de objetos de un objeto que se esté tratando en el área de herramientas mediante el pulsador Visualizar lista de objetos en el área de navegación.
Para crear un objeto nuevo, use el menú contextual para un tipo de objeto de la lista de objetos correspondiente. Como alternativa, use el pulsador Tratar objeto u Otro objeto para crear un objeto.
How to Work with the Object Navigator Demonstrate the steps of the section in the class.
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Describir la estructura del ABAP Repository
●
Usar las herramientas de búsqueda del ABAP Repository
●
Utilizar el Object Navigator para visualizar objetos de Repository
© Copyright . Reservados todos los derechos.
197
Capítulo 6 Lección 2 184
Organizar desarrollos ABAP
RESUMEN DE LA LECCIÓN En este módulo se explica cómo crear nuevos objetos de Repository, paquetes, programas y códigos de transacción. En este módulo también se explica cómo se usan las órdenes de modificación del Workbench ABAP en el entorno SAP para organizar proyectos de desarrollo y garantizar el transporte consistente de modificaciones a los sistemas productivos. Ejemplo empresarial Como parte de un proyecto de desarrollo, debe crear un nuevo paquete y un programa ABAP, y ponerlo a disposición de los usuarios a modo de código de transacción. Por este motivo, se requieren los siguientes conocimientos: ●
●
Comprender cómo nombrar y utilizar las utilidades para el desarrollo de software de manera ordenada Comprender cómo crear paquetes, programas y transacciones Tell participants that they will learn how to work with the development environment most effectively by doing actual development.
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá:
198
●
Describir la infraestructura de los desarrollos ABAP
●
Crear paquetes
© Copyright . Reservados todos los derechos.
Lección: Organizar desarrollos ABAP
Transporte de objetos de desarrollo
Figura 81: Transporte de objetos de desarrollo
Los proyectos de desarrollo se llevan a cabo en un sistema de desarrollo. Los objetos de desarrollo tratados o creados en un proyecto se transportan a sistemas subsiguientes (sistema de test y/o producción) al finalizar el proyecto. Al inicio de un proyecto de desarrollo, el gestor de proyectos crea una orden de modificación, en la cual nombra a los empleados del proyecto en el Transport Organizer o directamente en el Workbench ABAP. A continuación, el Transport Organizer crea una tarea para cada empleado del proyecto en la orden de modificación. Al tratar o crear un objeto de desarrollo, el empleado relevante lo asigna a la orden de transporte. El objeto se indica en la tarea del empleado. Todos los objetos de Repository en los que trabaja un empleado durante un proyecto de desarrollo se recopilan en su tarea.
© Copyright . Reservados todos los derechos.
199
Capítulo 6: Introducción al Workbench ABAP
Organización de los proyectos de desarrollo
Figura 82: Organización de un proyecto de desarrollo en una orden de modificación
La organización de un proyecto de desarrollo mediante una orden de transporte ofrece las siguientes ventajas: ● Los empleados pueden supervisar las actividades específicas del proyecto. ●
●
Los empleados encargados del proyecto pueden procesar todos los objetos de repository asignados al proyecto. Para los programadores que no pertenecen al equipo del proyecto, los objetos de Repository permanecen bloqueados hasta la finalización del proyecto (cuando se libera la orden de modificación). Si se asignan los objetos a la solicitud de modificación se garantiza que todos los objetos de desarrollo creados o modificados durante el proyecto se transportan automáticamente al momento de la finalización del proyecto (por ejemplo, cuando se libera la solicitud de modificación). La ruta de transporte de los paquetes implicados (en los que ha tenido lugar el desarrollo) especifica a qué sistema subsiguiente se transportan.
A diferencia de los paquetes, que distinguen entre objetos de Repository de una forma lógica y funcional, las órdenes de modificación hacen referencia al proyecto y, por este motivo, delimitan los objetos durante un tiempo. Aunque un programa siempre pertenece solo a un paquete, puede pertenecer a distintos proyectos en momentos distintos.
How to Use a Change Request Demonstrate the request that was created for the course.
200
© Copyright . Reservados todos los derechos.
Lección: Organizar desarrollos ABAP
Creación de paquetes
Figura 83: Parametrizar atributos de paquete (ejemplo)
Los atributos del paquete tienen el significado siguiente (puede obtener información detallada mediante el campo de ayuda, F1): ● Componente de aplicación Determine la ubicación del paquete dentro de la jerarquía de aplicaciones especificando el componente de aplicación correspondiente. ●
Componente de software Para los desarrollos de cliente, indique HOME como componente de software.
●
Capa de transporte La capa de transporte determina si los objetos del paquete se deben transportar a un sistema subsiguiente y, si es así, a cuál. Para los desarrollos de cliente debe especificar la capa de transporte que su administrador de sistema fijó para este fin.
●
Tipo de paquete Seleccione entre los tres tipos de paquetes: paquete estándar (puede contener objetos del Repository y otros paquetes), paquete principal (solo puede contener otros paquetes) y paquete de estructura (solo puede contener los paquetes principales).
© Copyright . Reservados todos los derechos.
201
Capítulo 6: Introducción al Workbench ABAP
Especificar una ruta de transporte
Figura 84: Especificar una ruta de transporte
Incluso en una infraestructura de sistema simple necesita al menos dos capas de transporte diferente para distinguir entre los desarrollos de cliente y las modificaciones a los objetos SAP. En una infraestructura de sistema más compleja pueden existir capas de transporte adicionales con diferentes sistemas de destino. Asignar una orden de transporte
Figura 85: Asignar una orden de transporte
202
© Copyright . Reservados todos los derechos.
Lección: Organizar desarrollos ABAP
Puede visualizar todas las órdenes de transporte en las que tiene una tarea mediante el pulsador Mis tareas. Para seleccionar la orden relevante, haga doble clic en la orden de transporte.
Nota: El sistema se encarga de la asignación de su tarea.
Consejo: Debe asignar los objetos de Repository que se crean o se modifican a la orden de modificación del proyecto correspondiente.
A change request has already been created for the “Exercises for Training Participants BC400” project in this training course. Each group of the course has a task within this change request.
Para crear un paquete 1. Navegue hasta Object Navigator. Dispone de las opciones siguientes: a) En el área de navegación, seleccione el tipo de objeto Paquete e indique el nombre del paquete en el campo de entrada debajo, asegurándose de que cumpla con las convenciones del cliente para fijar nombres. Pulse INTRO. Si el paquete especificado no existe todavía, el sistema abrirá un diálogo para crear un paquete. b) Seleccione el pulsador Tratar objeto en la pantalla inicial del Object Navigator. En la ventana de diálogo, busque la opción de especificar un paquete e indique el nombre del paquete. Para crear el objeto, presione F5. 2. Fije los atributos del paquete que se deben crear. 3. Asigne el paquete a una orden de modificación.
How to Create a Package Create a package with the name ZBC400_00 and assign it to a new change request with two tasks. Then, perform the corresponding exercise.
© Copyright . Reservados todos los derechos.
203
Capítulo 6: Introducción al Workbench ABAP
204
© Copyright . Reservados todos los derechos.
Capítulo 6 Ejercicio 10 189
Crear un paquete
Ejemplo empresarial Usted es el programador de un grupo de líneas aéreas y se le ha encargado la tarea de desarrollar programas de evaluación para varias compañías aéreas. Para agrupar los objetos de Repository de forma lógica y transportarlos, debe crear un paquete. Crear un paquete. Tarea 1 Entre al sistema de formación. 1. Entre al sistema de formación. Utilice el mandante, el nombre de usuario y la clave de acceso inicial que le ha proporcionado el instructor. 2. Indique una nueva clave de acceso personal. Tarea 2 Cree un paquete con el nombre ZBC400_##, en el que ## representa el número de grupo que le ha proporcionado su instructor. 1. Abra el Object Navigator y cree un paquete allí. 2. En la ventana de diálogo que aparece, escriba una breve descripción del paquete. Asigne el paquete al componente de aplicación CA y al componente de software HOME. Acepte el valor por defecto de todos los otros campos de entrada de la ventana de diálogo. 3. En la siguiente ventana de diálogo, asigne el paquete a una orden de transporte. Utilice la orden de transporte en la que el instructor ha creado una tarea para su usuario. Consejo: Para determinar la orden, seleccione el pulsador Órdenes propias.
Ha creado correctamente su propio paquete. Asigne todos los objetos de Repository que cree en los siguientes ejercicios a este paquete. Utilice la misma orden de modificación en cada caso.
© Copyright . Reservados todos los derechos.
205
Capítulo 6 Solución 10 190
Crear un paquete
Ejemplo empresarial Usted es el programador de un grupo de líneas aéreas y se le ha encargado la tarea de desarrollar programas de evaluación para varias compañías aéreas. Para agrupar los objetos de Repository de forma lógica y transportarlos, debe crear un paquete. Crear un paquete. Tarea 1 Entre al sistema de formación. 1. Entre al sistema de formación. Utilice el mandante, el nombre de usuario y la clave de acceso inicial que le ha proporcionado el instructor. 2. Indique una nueva clave de acceso personal. Tarea 2 Cree un paquete con el nombre ZBC400_##, en el que ## representa el número de grupo que le ha proporcionado su instructor. 1. Abra el Object Navigator y cree un paquete allí. a) Abra el Object Navigator mediante la transacción SE80. b) En el menú desplegable, seleccione Paquete e introduzca ZBC400_## en el próximo campo y regrese. 2. En la ventana de diálogo que aparece, escriba una breve descripción del paquete. Asigne el paquete al componente de aplicación CA y al componente de software HOME. Acepte el valor por defecto de todos los otros campos de entrada de la ventana de diálogo. a) Introduzca una descripción para el paquete y seleccione Continuar. 3. En la siguiente ventana de diálogo, asigne el paquete a una orden de transporte. Utilice la orden de transporte en la que el instructor ha creado una tarea para su usuario. Consejo: Para determinar la orden, seleccione el pulsador Órdenes propias.
Ha creado correctamente su propio paquete. Asigne todos los objetos de Repository que cree en los siguientes ejercicios a este paquete. Utilice la misma orden de modificación en cada caso.
206
© Copyright . Reservados todos los derechos.
Lección: Organizar desarrollos ABAP
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Describir la infraestructura de los desarrollos ABAP
●
Crear paquetes
© Copyright . Reservados todos los derechos.
207
Capítulo 6 Lección 3 192
Desarrollar programas
RESUMEN DE LA LECCIÓN En este módulo se explica cómo crear programas ABAP. También presenta el lenguaje y la sintaxis de programación ABAP. Ejemplo empresarial Debe crear un nuevo paquete y un nuevo programa ABAP como parte de un proyecto de desarrollo. Debe poner este programa a disposición de los usuarios con un código de transacción. Por este motivo, se requieren los siguientes conocimientos: ●
Comprender cómo crear programas ABAP
●
Comprender el Editor ABAP
●
Comprender cómo activar programas ABAP
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá:
208
●
Crear programas ABAP
●
Usar del Editor ABAP
●
Activar programas ABAP
© Copyright . Reservados todos los derechos.
Lección: Desarrollar programas
Creación de programas ABAP
Figura 86: Creación de un programa ABAP
En la figura se muestra la creación de un programa ABAP sin un include top y los atributos del programa creado. Aprenderá a crear programas y transacciones en el Workbench ABAP. Para crear un programa ABAP 1. Navegar hacia el Object Navigator mediante alguna de estas opciones: a) En el área de navegación, seleccione el tipo de objeto Programa e indique el nombre del programa en el campo de entrada, asegurándose de que cumpla con las convenciones del cliente para fijar nombres. Pulse INTRO. Si el programa no existe, el sistema abre el diálogo que le permite crear un programa. b) Visualice el paquete en el que desea crear el programa. Puede pasar al diálogo para crear un programa mediante el menú contextual del paquete o el nodo Programas. c) Seleccione el pulsador Tratar objeto en la pantalla inicial del Object Navigator. En la ventana de diálogo, seleccione la etiqueta Programa e indique el nombre del programa. Para crear el objeto, presione F5. 2. Elimine la marca de Con include TOP, para evitar que su código fuente se distribuya en varios programas. 3. Cambie el título por un texto breve autoexplicativo y, en este curso, seleccione Programa ejecutable como tipo de programa. El resto de atributos de programa son opcionales. Para acceder a la ayuda u obtener más detalles, presione F1.
© Copyright . Reservados todos los derechos.
209
Capítulo 6: Introducción al Workbench ABAP
Principios básicos de ABAP Estas son las características del lenguaje de programación de ABAP: ●
Se tipifica.
●
Permite aplicaciones multilingües.
●
Permite el acceso SQL.
●
Se ha ampliado como lenguaje orientado a objetos.
●
Es independiente de la plataforma.
●
Es compatible con versiones posteriores.
El lenguaje de programación ABAP está diseñado para aplicaciones empresariales basadas en diálogo. Para admitir el procesamiento de datos específico de tipo, se admiten las conversiones de tipo y el casting de tipo. Si utiliza elementos de texto traducibles, podrá desarrollar aplicaciones multilingüe. El Open SQL estándar incrustado en ABAP permite el acceso directo a la base de datos. Objeto ABAP es la ampliación del lenguaje de programación ABAP orientado a objetos. La sintaxis ABAP es independiente de la plataforma. Esto significa que la sintaxis ABAP siempre tiene el mismo significado o función, independientemente del sistema de base de datos relacional y del sistema operativo de la aplicación y del servidor de presentación. Las aplicaciones implementadas en ABAP también funcionarán en versiones futuras debido a la compatibilidad ascendente del lenguaje. Sintaxis ABAP general I
Figura 87: Sintaxis ABAP general I
210
© Copyright . Reservados todos los derechos.
Lección: Desarrollar programas
Características de la sintaxis ABAP: Los programas ABAP consisten en sentencias individuales.
●
●
La primera palabra de una sentencia se llama palabra clave ABAP.
●
Cada sentencia finaliza con un punto.
●
Las palabras siempre deben estar separadas por un espacio.
●
Las sentencias pueden tener sangría.
●
El sistema de tiempo de ejecución ABAP no distingue entre mayúsculas y minúsculas en palabras clave, adiciones y operandos.
Consejo: Aunque el sistema de tiempo de ejecución ABAP no distingue entre mayúsculas y minúsculas, se ha establecido la escritura de las palabras clave y sus adiciones en mayúsculas, y de los operandos en minúsculas. Este curso utilizará esta forma de representación. Para las sangrías y para convertir las letras mayúsculas o minúsculas, utilice Pretty Printer en el Editor ABAP. Utilice el siguiente acceso vía menús en el Object Navigator para fijar una opción específica de usuario para el Pretty Printer: Utilidades → Opciones → Editor ABAP → Pretty Printer. Sintaxis ABAP general II
Figura 88: Sintaxis ABAP general II
Características adicionales de la sintaxis ABAP: ● Las sentencias pueden ocupar más de una línea. ●
Pueden existir múltiples sentencias en una sola línea (aunque no se recomienda).
© Copyright . Reservados todos los derechos.
211
Capítulo 6: Introducción al Workbench ABAP
●
●
El sistema de tiempo de ejecución ABAP reconoce las líneas que comienzan con un asterisco * en la primera columna como líneas de comentario y las ignora. Las comillas dobles (") indican que el resto de la línea es un comentario.
Puede combinar varias sentencias consecutivas con un inicio idéntico en una sentencia encadenada de la siguiente manera: ● Escriba la parte inicial idéntica de las sentencias, seguida por dos puntos. ●
●
Realice una lista de las partes finales de las sentencias, separadas por comas. Puede usar espacios en blanco y saltos de línea antes y después de los separadores; es decir, dos puntos, comas y puntos.
Consejo: Esta forma breve representa una forma de sintaxis simplificada y no proporciona ninguna mejora en el rendimiento. El sistema de tiempo de ejecución procesa cada una de las sentencias individuales. Documentación de palabras clave en el Editor ABAP
Figura 89: Documentación de palabras clave en el Editor ABAP
Puede navegar hacia la documentación para una sentencia ABAP en las siguientes maneras: ● Utilice F1 para navegar directamente a la documentación para la sentencia donde se encuentra el cursor. ●
212
Seleccione el pulsador “i” con la descripción Ayuda de ... para navegar a una ventana de diálogo, donde puede introducir la palabra clave ABAP requerida.
© Copyright . Reservados todos los derechos.
Lección: Desarrollar programas
How to Write a 'Hello World' Program Create a small WRITE 'Hello World' program. Assign it to your demonstration package and to the demonstration request. Use this program to demonstrate topics such as active/inactive source.
Editor ABAP
Figura 90: Editor ABAP anterior
Puede utilizar varios editores para desarrollar programas ABAP, dependiendo del release y del nivel de support package. El usuario puede seleccionar el editor y se puede modificar (en el Object Navigator, seleccione Utilidades → Opciones → Editor ABAP). El Editor ABAP más reciente (nuevo editor front-end) ofrece varias opciones nuevas y funciones adicionales fáciles de utilizar en comparación con el Editor ABAP clásico (editor front-end anterior). Se desarrolló para SAP NetWeaver 7.0. También se puede usar en versiones anteriores que sean posteriores a cierto nivel de paquete de soporte: SAP NetWeaver AS 6.40 (SP18) y SAP Web Application Server 6.20 (SP59).
© Copyright . Reservados todos los derechos.
213
Capítulo 6: Introducción al Workbench ABAP
Nuevo Editor ABAP
Figura 91: Nuevo Editor ABAP
Estas son algunas de las opciones importantes que ofrece el nuevo Editor ABAP: ● Puede elegir varios colores de visualización para distintos objetos del código fuente. ●
●
●
●
●
●
214
Cada usuario puede fijar las fuentes y los tamaños de fuente. Puede comprimir diferentes bloques de código de fuente, como loops y bifurcaciones condicionales, para obtener un mejor resumen. Puede utilizar marcadores para encontrar más fácilmente los puntos relevantes del código fuente. Puede visualizar los números de línea y el anidamiento actual para mejorar la orientación. El Editor ABAP puede sugerirle palabras completas cuando escribe los primeros caracteres de las palabras clave y los objetos de dato de ABAP. El nuevo Editor ABAP puede generar una pequeña lista emergente con sugerencias pertinentes para la posición actual del cursor (desde NetWeaver 7.0 EhP2) cuando pulse CTRL + BARRA ESPACIADORA.
© Copyright . Reservados todos los derechos.
Lección: Desarrollar programas
Activación de programas
Figura 92: Objetos de desarrollo activos e inactivos
Siempre que cree o modifique un objeto de desarrollo y lo grabe, el sistema almacena solo una versión inactiva en el Repository. Dispone de una versión activa y una versión inactiva del objeto. Cuando complete el desarrollo del objeto, debe activar la versión inactiva (versión de tratamiento) del objeto. Esta versión se convierte entonces en la nueva versión activa del objeto.
Nota: La liberación de la orden y el transporte de los objetos desarrollados solo son posibles si se han activado todos los objetos de la orden. Si el programa está disponible en las versiones activa e inactiva, puede cambiar entre las visualizaciones de las dos versiones mediante el botón correspondiente del Editor ABAP. Al activar un programa, el sistema visualiza una lista de los objetos inactivos que ha procesado. Esta es su lista de trabajo. Seleccione los objetos que desee activar con la transacción de activación actual. La activación de un objeto incluye las siguientes funciones: ● Grabar el objeto como versión inactiva ●
●
●
Verificación de la sintaxis o consistencia de la versión inactiva Sobrescribir la versión activa anterior con la versión inactiva (sólo después de una comprobación positiva) Generar el objeto de tiempo de ejecución relevante para ejecuciones posteriores, si el objeto es un programa.
© Copyright . Reservados todos los derechos.
215
Capítulo 6: Introducción al Workbench ABAP
Generación de objetos de tiempo de ejecución
Figura 93: Generación de objetos de tiempo de ejecución
Al generar un objeto de desarrollo, el sistema crea un objeto de tiempo de ejecución independiente (compilación LOAD) y lo almacena en el Repository. Esta versión generada es la versión que se ejecuta o interpreta en tiempo de ejecución. Si el programa dispone tanto de una versión inactiva como de una versión activa, puede hacer que ambas versiones se ejecuten de la forma siguiente: ● Si inicia el programa mediante el menú contextual del área de navegación o a través de una transacción, se utilizará la versión activa. Esto significa que se ejecutará el LOAD generado para la última activación. ●
Si inicia la versión inactiva cargada en el Editor ABAP mediante la tecla F8, se generará y ejecutará un objeto de tiempo de ejecución temporal.
De este modo, es posible continuar con el desarrollo de un objeto de Repository sin modificar el status de sistema actual. Todas las modificaciones en el objeto de desarrollo se visualizan a través del sistema solo después de activar el objeto.
How to Create a Simple ABAP Program Demonstrate the above content with the program you created earlier and have participants do the corresponding exercise.
216
© Copyright . Reservados todos los derechos.
Capítulo 6 Ejercicio 11 201
Desarrollar un programa ABAP sencillo
Ejemplo empresarial Desea crear un programa ABAP que reciba la entrada de usuario simple, modifique los datos y devuelva información a una pantalla. En el paquete, cree un programa ejecutable con el nombre ZBC400_##_HELLO. Permitir que el usuario indique un nombre en la pantalla de selección, que aparecerá posteriormente en la lista, junto con el texto 'Hello'. 1. Cree el programa ZBC400_##_HELLO sin Include TOP. 2. En la siguiente ventana de diálogo, asegúrese de que el tipo de programa sea Programa ejecutable. Fije el status del programa en un valor significativo. 3. Definir el campo de entrada pa_name en la pantalla de selección con el tipo string. 4. Implemente la salida del texto Hello World!. Para ello, utilice la sentencia de ABAP WRITE. 5. Asegúrese de que el siguiente resultado aparezca en una línea nueva. Para ello, utilice la sentencia NEW-LINE. 6. Mediante una sentencia encadenada, implemente el texto de salida 'Hello', junto con el nombre de entrada desde la pantalla de selección. 7. Verifique si existen errores de sintaxis en el programa. Efectúe un test del programa y actívelo.
© Copyright . Reservados todos los derechos.
217
Capítulo 6 Solución 11 202
Desarrollar un programa ABAP sencillo
Ejemplo empresarial Desea crear un programa ABAP que reciba la entrada de usuario simple, modifique los datos y devuelva información a una pantalla. En el paquete, cree un programa ejecutable con el nombre ZBC400_##_HELLO. Permitir que el usuario indique un nombre en la pantalla de selección, que aparecerá posteriormente en la lista, junto con el texto 'Hello'. 1. Cree el programa ZBC400_##_HELLO sin Include TOP. a) Abra el Object Navigator mediante la transacción SE80. b) En el menú desplegable, seleccione Paquete e introduzca ZBC400_## en el campo siguiente. c) Debajo del Nombre de objeto, haga clic con el botón derecho del ratón en ZBC400_## y seleccione Crear → Programa. d) Indique ZBC400_##_HELLO en el campo Programa. Destilde la opción Con INCL TOP. e) Seleccione Continuar. 2. En la siguiente ventana de diálogo, asegúrese de que el tipo de programa sea Programa ejecutable. Fije el status del programa en un valor significativo. a) Seleccione Programa ejecutable desde la lista desplegable Tipo. b) Seleccione Programa de test desde la lista desplegable Status y seleccione Grabar. c) En la siguiente ventana de diálogo, indique el nombre de su paquete y seleccione el pulsador Grabar (Intro). 3. Definir el campo de entrada pa_name en la pantalla de selección con el tipo string. a) Indique el siguiente código en el Editor ABAP: PARAMETERS: pa_name TYPE string. 4. Implemente la salida del texto Hello World!. Para ello, utilice la sentencia de ABAP WRITE. a) Indique el siguiente código en el Editor ABAP: WRITE 'Hello World!’. 5. Asegúrese de que el siguiente resultado aparezca en una línea nueva. Para ello, utilice la sentencia NEW-LINE. a) Indique el siguiente código en el Editor ABAP: NEW-LINE.
218
© Copyright . Reservados todos los derechos.
Lección: Desarrollar programas
6. Mediante una sentencia encadenada, implemente el texto de salida 'Hello', junto con el nombre de entrada desde la pantalla de selección. a) Indique el siguiente código en el Editor ABAP: WRITE: 'Hello', pa_name. 7. Verifique si existen errores de sintaxis en el programa. Efectúe un test del programa y actívelo. a) Seleccione los pulsadores Verificar (Ctrl+F2), Dirigir (F8) y Activar (Ctrl+F3). Completar el código fuente *&- - - - - - - - -- - - - - - - - - - - - - - - - - - - - -* *& Report BC400_GSS_HELLO *&- - - - - - - - -- - - - - - - - - - - - - - - - - - - - -* REPORT
bc400_gss_hello.
PARAMETERS: pa_name TYPE string. WRITE 'Hello World!'. NEW-LINE. WRITE: 'Hello', pa_name.
© Copyright . Reservados todos los derechos.
219
Capítulo 6: Introducción al Workbench ABAP
RESUMEN DE LA LECCIÓN Ahora podrá:
220
●
Crear programas ABAP
●
Usar del Editor ABAP
●
Activar programas ABAP
© Copyright . Reservados todos los derechos.
Capítulo 6 Lección 4 205
Finalizar desarrollo
RESUMEN DE LA LECCIÓN En este módulo se explica cómo crear transacciones y liberar órdenes de modificación. Ejemplo empresarial Necesita crear transacciones y liberar órdenes de modificación. Por este motivo, se requieren los siguientes conocimientos: ●
Comprender cómo crear transacciones
●
Comprender cómo liberar órdenes de modificación
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Crear transacciones
●
Liberar órdenes de modificación
Creación de transacciones
Figura 94: Creación de una transacción
Solo se pueden incluir transacciones en un menú de rol y en los favoritos de usuario. Si desea colocar un programa en un menú de rol o en los favoritos de usuario, debe crear una transacción que represente el programa e integre la transacción en el menú. También puede iniciar el programa indicando el código de transacción en el campo de comandos.
© Copyright . Reservados todos los derechos.
221
Capítulo 6: Introducción al Workbench ABAP
Para crear una transacción 1. En el Object Navigator, visualice la lista de objetos del programa. 2. En el área de navegación, seleccione su programa y, a continuación, Crear → Transacción desde el menú contextual. 3. Indique el código de transacción requerido. Asegúrese de respetar las convenciones del área de nombres del cliente. Asígnele un texto breve y seleccione el pulsador de opción Programa e imagen de selección ((transacción de report). 4. En la pantalla siguiente, indique el nombre del programa y seleccione Transacción de usuario profesional. En GUI activado, fije el indicador SAP GUI para Windows. 5. Grabe la transacción. 6. Asigne la transacción a un paquete y a una orden de modificación en las siguientes pantallas. Nota: Cada transacción es un objeto de Repository.
Inserción de una transacción en los Favoritos personales
Figura 95: Inserción de una transacción en los Favoritos personales
Para agregar una transacción en los Favoritos personales 1. Navegue hasta la pantalla inicial, la pantalla SAP Easy Access.
222
© Copyright . Reservados todos los derechos.
Lección: Finalizar desarrollo
2. En el menú contextual Favoritos, seleccione Insertar transacción. 3. En la ventana de diálogo, indique el código de transacción requerido. El texto breve de la transacción ahora aparece debajo del menú contextual Favoritos. Puede iniciar el programa correspondiente haciendo doble clic en él.
How to Create a Transaction and Add it to Personal Favorites Create a transaction for your example program and add it to your personal favorites. Have participants do the corresponding exercise.
© Copyright . Reservados todos los derechos.
223
Capítulo 6: Introducción al Workbench ABAP
224
© Copyright . Reservados todos los derechos.
Capítulo 6 Ejercicio 12 209
Crear una transacción
Ejemplo empresarial Los usuarios de su empresa deben poder iniciar sus programas ABAP como transacciones o definirlos como favoritos personales. Cree una transacción del report. Incluya la nueva transacción en sus favoritos personales en el menú SAP Easy Access. Tarea 1 Cree una transacción de report (nombre sugerido: ZBC400_##_HELLO) que puede utilizar para iniciar su programa ejecutable ZBC400_##_HELLO. 1. Cree la nueva transacción en el paquete. Haga una breve descripción y seleccione el tipo de transacción adecuado (iniciar objeto). 2. Consulte el programa que se va a ejecutar. Seleccione la clasificación de transacción correcta y asegúrese de que esté activada para GUI. 3. Grabe la transacción y verifíquela. 4. Confirme que el programa se puede iniciar indicando el código de transacción en el campo de comandos.
Tarea 2 Incluya la nueva transacción en sus favoritos personales en el menú SAP Easy Access. 1. Abra el menú SAP Easy Access, seleccione la función Insertar transacción en Favoritos e indique el código de transacción. 2. Haga doble clic en la nueva entrada de favorito y ejecute el programa.
© Copyright . Reservados todos los derechos.
225
Capítulo 6 Solución 12 210
Crear una transacción
Ejemplo empresarial Los usuarios de su empresa deben poder iniciar sus programas ABAP como transacciones o definirlos como favoritos personales. Cree una transacción del report. Incluya la nueva transacción en sus favoritos personales en el menú SAP Easy Access. Tarea 1 Cree una transacción de report (nombre sugerido: ZBC400_##_HELLO) que puede utilizar para iniciar su programa ejecutable ZBC400_##_HELLO. 1. Cree la nueva transacción en el paquete. Haga una breve descripción y seleccione el tipo de transacción adecuado (iniciar objeto). a) Asegúrese de seleccionar el pulsador de opción Programa e imagen de selección (transacción de report) como el objeto inicial. 2. Consulte el programa que se va a ejecutar. Seleccione la clasificación de transacción correcta y asegúrese de que esté activada para GUI. a) Realice este paso como se describe en el Manual de participantes. Asegúrese de que la transacción esté clasificada como Transacción de usuario profesional y fíjela como activada para GUI para SAP GUI para Windows. 3. Grabe la transacción y verifíquela. a) Seleccione Grabar y Verificar para este propósito 4. Confirme que el programa se puede iniciar indicando el código de transacción en el campo de comandos.
Tarea 2 Incluya la nueva transacción en sus favoritos personales en el menú SAP Easy Access. 1. Abra el menú SAP Easy Access, seleccione la función Insertar transacción en Favoritos e indique el código de transacción. a) Realice este paso como se describe en el manual de participantes. 2. Haga doble clic en la nueva entrada de favorito y ejecute el programa. a) Realice este paso de la forma habitual.
226
© Copyright . Reservados todos los derechos.
Lección: Finalizar desarrollo
Liberación de órdenes de modificación
Figura 96: El programador libera su tarea
Después de que un empleado de proyecto haya completado la tarea de desarrollo requerida, realiza un control de calidad y libera la tarea dentro de la orden de modificación. El sistema transfiere las entradas del objeto correspondiente y los bloqueos de modificación del objeto por parte de terceros que se establecieron automáticamente al inicio del proyecto, de la tarea a la orden. Todos los empleados del proyecto podrán seguir tratando estos objetos. Después de que liberen todas las tareas de una orden de modificación, el gestor de proyectos lleva a cabo el último control de calidad de los objetos y libera la orden de modificación. Así se concluye el proyecto.
© Copyright . Reservados todos los derechos.
227
Capítulo 6: Introducción al Workbench ABAP
Cierre del proyecto liberando la orden (gestor de proyectos)
Figura 97: Cierre del proyecto liberando la orden (gestor de proyectos)
Al liberar la orden, se eliminan todos los bloqueos de objetos que pertenecen a la orden. Se exportan las copias de los objetos desarrollados al directorio de transporte propio del sistema, donde permanecerán hasta que el administrador del sistema las importe a su sistema destino. Se guarda otra copia de los objetos de desarrollo exportados en la base de datos de versión propia del sistema.
How to Release a Change Request Release your change request.
228
© Copyright . Reservados todos los derechos.
Lección: Finalizar desarrollo
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Crear transacciones
●
Liberar órdenes de modificación
© Copyright . Reservados todos los derechos.
229
Capítulo 6: Introducción al Workbench ABAP
230
© Copyright . Reservados todos los derechos.
Capítulo 6
215
Evaluación de la formación
1. ¿Cuál de los siguientes objetos de desarrollo del sistema se incluyen en el Repository? Seleccione las respuestas correctas. X
A Programas
X
B Módulos de funciones
X
C Object Navigator
X
D Definiciones de tablas de base de datos
2. ¿Cuál de las siguientes herramientas de Workbench ABAP se utilizan para tratar el código de fuente? Seleccione la respuesta correcta. X
A Editor ABAP
X
B Dictionary ABAP
X
C Sistema de Información del Repository
X
D Menu Painter
3. ¿Cuáles de las siguientes opciones son tipos de paquetes? Seleccione las respuestas correctas. X
A Componente de aplicación
X
B Paquete estándar
X
C Paquete principal
X
D Componente de software
© Copyright . Reservados todos los derechos.
231
Capítulo 6: Evaluación de la formación
4. ¿Cuándo se desencadena el transporte de objetos de desarrollo para una orden de transporte? Seleccione la respuesta correcta. X
A Al grabar un objeto
X
B Al activar un objeto
X
C Al liberar una tarea
X
D Al liberar una orden
5. Siempre que cree o modifique un objeto de desarrollo y lo grabe, el sistema almacena dos versiones inactivas en el Repository. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
6. ¿Cuáles de las siguientes afirmaciones relativas al lenguaje de programación de ABAP son verdaderas? Seleccione las respuestas correctas. X
A Permite aplicaciones multilingües.
X
B Permite el acceso SQL.
X
C Es dependiente de la plataforma.
X
D Se tipifica.
7. Objeto ABAP es la ampliación del lenguaje de programación ABAP orientado a objetos. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
8. ¿Cómo incluye líneas de comentario? Seleccione la respuesta correcta.
232
X
A Comience la línea con un numeral # en la primera columna.
X
B Comience la línea con un asterisco * en la primera columna.
X
C Finalice la línea con un asterisco * en la última columna.
X
D Finalice la línea con un numeral # en la última columna.
© Copyright . Reservados todos los derechos.
Capítulo 6: Evaluación de la formación
9. Después de que un empleado del proyecto haya completado la tarea de desarrollo requerida, debe realizar lo siguiente: Seleccione la respuesta correcta. X
A Transferir la tarea al sistema de producción
X
B Liberar la tarea dentro de la orden de modificación
X
C Desbloquear y exportar la tarea al Directorio de transporte
X
D Exportar la orden de proyecto
© Copyright . Reservados todos los derechos.
233
Capítulo 6
218
Respuestas a la Evaluación de la formación
1. ¿Cuál de los siguientes objetos de desarrollo del sistema se incluyen en el Repository? Seleccione las respuestas correctas. X
A Programas
X
B Módulos de funciones
X
C Object Navigator
X
D Definiciones de tablas de base de datos
2. ¿Cuál de las siguientes herramientas de Workbench ABAP se utilizan para tratar el código de fuente? Seleccione la respuesta correcta. X
A Editor ABAP
X
B Dictionary ABAP
X
C Sistema de Información del Repository
X
D Menu Painter
3. ¿Cuáles de las siguientes opciones son tipos de paquetes? Seleccione las respuestas correctas.
234
X
A Componente de aplicación
X
B Paquete estándar
X
C Paquete principal
X
D Componente de software
© Copyright . Reservados todos los derechos.
Capítulo 6: Respuestas a la Evaluación de la formación
4. ¿Cuándo se desencadena el transporte de objetos de desarrollo para una orden de transporte? Seleccione la respuesta correcta. X
A Al grabar un objeto
X
B Al activar un objeto
X
C Al liberar una tarea
X
D Al liberar una orden
5. Siempre que cree o modifique un objeto de desarrollo y lo grabe, el sistema almacena dos versiones inactivas en el Repository. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
6. ¿Cuáles de las siguientes afirmaciones relativas al lenguaje de programación de ABAP son verdaderas? Seleccione las respuestas correctas. X
A Permite aplicaciones multilingües.
X
B Permite el acceso SQL.
X
C Es dependiente de la plataforma.
X
D Se tipifica.
7. Objeto ABAP es la ampliación del lenguaje de programación ABAP orientado a objetos. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
© Copyright . Reservados todos los derechos.
235
Capítulo 6: Respuestas a la Evaluación de la formación
8. ¿Cómo incluye líneas de comentario? Seleccione la respuesta correcta. X
A Comience la línea con un numeral # en la primera columna.
X
B Comience la línea con un asterisco * en la primera columna.
X
C Finalice la línea con un asterisco * en la última columna.
X
D Finalice la línea con un numeral # en la última columna.
9. Después de que un empleado del proyecto haya completado la tarea de desarrollo requerida, debe realizar lo siguiente: Seleccione la respuesta correcta.
236
X
A Transferir la tarea al sistema de producción
X
B Liberar la tarea dentro de la orden de modificación
X
C Desbloquear y exportar la tarea al Directorio de transporte
X
D Exportar la orden de proyecto
© Copyright . Reservados todos los derechos.
CAPÍTULO 7
Elementos básicos del lenguaje ABAP
Lección 1 Definir los objetos de datos elementales
238
Lección 2 Uso de sentencias ABAP básicas Ejercicio 13: Usar sentencias ABAP básicas
249 257
Lección 3 Trabajar con el ABAP Debugger Ejercicio 14: Depurar sentencias en objetos de datos elementales
264 271
OBJETIVOS DEL CAPÍTULO ●
Conocer las diferencias entre los tipos y las variables, y cómo usarlos
●
Utilizar los conceptos básicos de la sintaxis ABAP
●
Utilizar el ABAP Debugger para analizar los valores de los objetos de datos elementales durante la ejecución del programa.
© Copyright . Reservados todos los derechos.
237
Capítulo 7 Lección 1 222
Definir los objetos de datos elementales
RESUMEN DE LA LECCIÓN En esta lección se explica la diferencia entre tipos de datos y objetos de datos, y cómo definir y utilizarlos en un programa. También aprenderá algunas sentencias ABAP básicas. Después de esta lección, aprenderá cómo utilizar el ABAP Debugger para analizar el flujo de un programa. Ejemplo empresarial Desea utilizar variables simples en sus programas y tratarlos con sentencias simples. Además, desea utilizar el ABAP Debugger para buscar los errores semánticos de sus programas. Por ello, necesita saber lo siguiente: ●
La definición de objetos de datos elementales
●
Cómo utilizar sentencias ABAP básicas con objetos de datos elementales
●
Cómo ejecutar y analizar programas en modo debugging Although this lesson discusses basic terms and concepts that are the same in all modern programming languages, the aim is to emphasize the ABAP-specific aspects. If participants’ level of knowledge is less than required, you may have to proceed more slowly in this lesson. This lesson offers a basic introduction to working with the ABAP Debugger, knowledge of which is then gradually supplemented with other aspects (such as modularization, call stack, structure contents, and internal tables).
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
238
Conocer las diferencias entre los tipos y las variables, y cómo usarlos
© Copyright . Reservados todos los derechos.
Lección: Definir los objetos de datos elementales
Tipos de datos y objetos de datos
Figura 98: Utilización de los tipos de datos
La descripción de variable formal se declara como tipo de datos. Una variable o constante que se define concretamente por el tipo de dato se llama un objeto de datos. La figura muestra cómo se pueden utilizar los tipos de datos. Puede utilizar los tipos de datos en las siguientes maneras: ● Para definir objetos de datos El tipo de un objeto de datos define sus propiedades técnicas. ●
Para definir los parámetros de interfaz El tipo de un parámetro de interfaz determina el tipo del parámetro real que se transfiere al llamar la unidad de modularización.
●
Para definir campos de entrada/salida El tipo de un campo de entrada/salida puede proporcionar información adicional a las características técnicas, como la ayuda de entrada de valor y de campo.
En esta lección nos centraremos en la utilización de tipos de datos para definir variables internas de programa.
Tipos de datos estándar ABAP Los tipos de datos estándar ABAP (tipos de datos integrados) se dividen en dos grupos: ● Completo ●
Incompleto
Tipos de datos estándar ABAP completos Los tipos de datos estándar ABAP integrados que ya contienen una especificación según el tipo y de longitud fija se consideran un tipo de datos completo.
© Copyright . Reservados todos los derechos.
239
Capítulo 7: Elementos básicos del lenguaje ABAP
Tabla 1: Tipos de datos estándar ABAP completos Tipos estándar
Descripción
D
Tipo para fecha (D), formato: AAAAMMDD, longitud 8 (fija)
T
Tipo para hora (T), formato: HHMMSS, longitud 6 (fija)
I
Tipo para entero (I), longitud 4 (fija)
F
Tipo para número de punto flotante (F), longitud 8 (fija)
STRING
Tipo para cadena de caracteres de longitud dinámica
XSTRING
Tipo para secuencia de bytes de longitud dinámica (cadena heXadecimal)
DECFLOAT16
Tipo para grabar números (puntos DECIMALES FLOTANTE) con mantisa y exponente, longitud 8 bytes con 16 lugares decimales (fijo) (desde 7.0 EhP2)
DECFLOAT34
Tipo para grabar números (puntos DECIMALES FLOTANTE) con mantisa y exponente, longitud 16 bytes con 34 lugares decimales (fijo) (desde 7.0 EhP2)
Tipos de datos estándar ABAP incompletos Los tipos estándar que no contienen una longitud fija se consideran un tipo de datos incompleto. Si se utilizan para definir objetos de datos, será necesario especificar la longitud de la variable. Tabla 2: Tipos de datos estándar ABAP incompletos
240
Tipos estándar
Descripción
C
Tipo para cadena de caracteres (Carácter) para la que se debe especificar la longitud
N
Tipo para cadena de caracteres numérica (carácter Numérico) para la que se debe especificar la longitud
X
Tipo para secuencia de bytes (cadena heXadecimal) para la que se debe especificar la longitud
P
Tipo de número empaquetado (número Empaquetado) para la que se debe especificar la longitud (En la definición de un número empaquetado, el número de puntos decimales también puede especificarse).
© Copyright . Reservados todos los derechos.
Lección: Definir los objetos de datos elementales
Para obtener más información acerca de tipos ABAP predefinidos, consulte la documentación de palabras clave de las sentencias TYPES o DATA.
Nota: Los tipos de datos DECFLOAT16 y DECFLOAT34 se introdujeron en NetWeaver 7.0 EhP2. Combinan las ventajas de los tipos de datos clásicos P (cálculo exacto en modo decimal) y F (rango de valor extenso), mientras que evitan las desventajas de cada tipo de datos clásico.
Tipos de datos locales
Figura 99: Declaración de tipos locales
Mediante los tipos estándar, puede declarar tipos de datos locales en el programa, que pueden ser más completos o más complejos que los tipos de datos estándar subyacentes. Los tipos de datos locales solo existen en el programa en cuestión y, por consiguiente, solo se pueden utilizar allí. La declaración se realiza mediante la sentencia TYPES.
Consejo: Existe una sintaxis alternativa para especificar la longitud con el suplemento LENGTH que encontrará en programas antiguos. La longitud se especifica entre paréntesis directamente después del nombre del tipo como en el siguiente ejemplo: TYPES gty_c_type(3) TYPE c. TYPES gty_p_type(3) TYPE p DECIMALS 2. Para mejorar la legibilidad del programa, no utilice más esta sintaxis obsoleta.
© Copyright . Reservados todos los derechos.
241
Capítulo 7: Elementos básicos del lenguaje ABAP
Tipos de datos globales
Figura 100: Tipos de datos globales del Dictionary
Un tipo de datos definido en el Dictionary ABAP se llama global, ya que puede utilizarse en todo el sistema SAP en cuestión. En esta lección, solo aprenderá cómo los elementos de datos se usan como tipos de datos para los objetos de datos elementales. Definición de objetos de datos variables
Figura 101: Definición de objetos de datos
Categorías de tipos de datos:
242
© Copyright . Reservados todos los derechos.
Lección: Definir los objetos de datos elementales
●
Integrado
●
Local
●
Global
Estos tipos se utilizarán para definir variables (objetos de datos). Los objetos de datos siempre se definen con la palabra clave DATA. Puede utilizar un tipo estándar, un tipo local o un tipo global ABAP para definir un objeto de datos. Puede consultar un objeto de datos ya definido al definir variables adicionales (suplemento LIKE).
Nota: Para que su código sea más legible, SAP recomienda utilizar convenciones para fijar nombres para los nombres de los tipos autodefinidos (declarados con la sentencia TYPES) o de las variables (declaradas con la sentencia DATA). En todo este módulo, utilizaremos la siguiente convención para fijar nombres: Utilización
Prefijo
Tipo Global*
gty_
Variable Global*
gv_
Tipo Local**
lty_
Variable Local**
lv_
* Nota: program Global en este caso significa un tipo o una variable que es visible globalmente dentro de su programa. Sin embargo, se define localmente en su programa. También puede definir tipos como sistema global (por medio de entradas en el Diccionario de datos). Estas definiciones de tipos están visibles (y se pueden utilizar) dentro de todos programas ABAP de su sistema SAP. ** Nota: local en este caso significa local a una subrutina.
© Copyright . Reservados todos los derechos.
243
Capítulo 7: Elementos básicos del lenguaje ABAP
Ejemplos de definición de objetos de datos elementales
Figura 102: Ejemplos de definición de objetos de datos elementales
Puede utilizar el suplemento VALUE para asignar previamente el valor de un objeto de datos elemental.
Consejo: En la sentencia DATA, también tiene la opción de especificar la longitud entre paréntesis después del nombre de la variable, como en el siguiente ejemplo: DATA gv_myvar(15) TYPE c. DATA gv_myvar_p(4) TYPE p DECIMALS 2. Sin embargo, para que el código de su programa sea más legible, le recomendamos utilizar el suplemento LENGTH. Si falta la especificación de longitud de una definición de variable, se utiliza una longitud por defecto para el tipo estándar (incompleto) (longitud 1 para los tipos C, N y X, y longitud 8 para el tipo P). Si falta el tipo de datos, también se utiliza el tipo estándar C. Por ejemplo, la sentencia DATA gv_myvar. no tiene especificación de tipo y longitud, entonces, se define una variable de tipo C con una longitud 1).
Consejo: Para mejorar la legibilidad, siempre debe especificar el tipo de datos y la longitud. Para obtener más información, consulte la documentación de palabra clave de la sentencia TYPES o DATA.
244
© Copyright . Reservados todos los derechos.
Lección: Definir los objetos de datos elementales
Literales, constantes y símbolos de texto
Figura 103: Literales y constantes (objetos de datos fijos)
Los objetos de datos fijos tienen un valor fijo que se define al escribir el texto fuente y no se puede modificar durante el tiempo de ejecución. Los literales y los constantes pertenecen a los objetos de datos fijos.
Nota: Para los nombres de los objetos de datos fijos (constantes), agregamos las siguientes definiciones a nuestra convención para fijar nombres: Utilización
Prefijo
Program global* constant
gc_
* Nota: program Global en este caso significa un tipo o una variable que es visible globalmente dentro de su programa. Sin embargo, se define localmente en su programa. También puede definir tipos como sistema global (por medio de entradas en el Diccionario de datos ABAP). Estas definiciones de tipos están visibles (y se pueden utilizar) dentro de todos programas ABAP de su sistema SAP. Puede utilizar los literales para especificar valores fijos en sus programas. Existen literales numéricos (especificados sin comillas) y literales de texto (especificados con comillas). En la figura "Símbolos de texto", hay un ejemplo de un literal de texto (tercera línea de la sentencia WRITE). Los constantes se definen mediante la sentencia CONSTANTS. La adición TYPE se usa de modo similar al uso en DATA. El suplemento VALUE es obligatorio para los constantes. Con ella define el valor de las constantes.
© Copyright . Reservados todos los derechos.
245
Capítulo 7: Elementos básicos del lenguaje ABAP
Consejo: Si es posible, evite completamente el uso de literales al usar sentencias. En su lugar, utilice constantes y símbolos de texto. Esto facilitará considerablemente la actualización del programa. Símbolos de texto
Figura 104: Símbolos de texto
Un principio muy importante en el desarrollo ABAP es el plurilingüismo. Esto significa que el idioma de trabajo del usuario actual se tiene en cuenta cuando se visualizan textos en la interfaz de usuario. La utilización de literales de texto en este contexto es crítica, puesto que el literal solo existe en una versión del código fuente y es independiente del lenguaje. Cree únicamente textos dependientes del idioma como literales de texto con finalidad de test. Para programas productivos que pueden ejecutarse en varios idiomas de trabajo, el lenguaje de programación ABAP proporciona los llamados símbolos de texto. Cada símbolo de texto se utiliza en el programa particular al cual pertenece. Estos símbolos están almacenados fuera del código fuente en su propio objeto de Repository, el pool de textos del programa. Los símbolos de texto se pueden traducir a varios idiomas y cada uno de ellos se puede almacenar con un indicador de idioma en el pool de textos, como se muestra en la figura anterior. Si el programa accede a un símbolo de texto durante su ejecución, el sistema considera el idioma de trabajo del usuario y suministra el texto en el idioma correspondiente. Un símbolo de texto se identifica mediante un ID alfanumérico de tres caracteres, '-xxx'. Para utilizar un símbolo de texto en su programa, debe asignarlo como TEXT-xxx, donde xxx representa los tres caracteres del ID de símbolo de texto.
246
© Copyright . Reservados todos los derechos.
Lección: Definir los objetos de datos elementales
Para especificar un símbolo de texto de forma más intuitiva, también puede utilizar la siguiente sintaxis en lugar de TEXT-xxx: '...'(xxx). Aquí, '...' debe ser el texto del símbolo de texto en el idioma original del programa. Opciones para definir los símbolos de texto para su programa: ● En el Editor ABAP, seleccione Pasar a → Elementos de texto → Símbolos de texto. ●
Asigne el símbolo de texto en su código de fuente mediante la sintaxis TEXT-xxx: '...'(xxx) y haga doble clic en su ID (Navegación hacia adelante).
Para traducir los símbolos de texto de su programa, seleccione Pasar a → Traducción desde el menú en el Editor ABAP.
Consejo: Recuerde que también debe activar los elementos de texto.
Comparación: tipos de datos locales y globales
Figura 105: Tipos de datos locales en comparación con globales
Los tipos de datos locales solo se pueden utilizar en el programa en el que están definidos. Los tipos de datos globales, por el contrario, se pueden utilizar en todo el sistema. Los tipos de datos globales tienen las siguientes ventajas: Los tipos de datos globales pueden utilizarse en todo el sistema, lo que aumenta la consistencia del sistema. El hecho de que puedan volver a utilizarse reduce la cantidad de esfuerzos de mantenimiento requeridos.
●
●
Los tipos de datos globales pueden tener una referencia de utilización en el Dictionary ABAP. En la referencia de utilización se incluyen los objetos de Repository que utilizan el tipo de datos en cuestión.
© Copyright . Reservados todos los derechos.
247
Capítulo 7: Elementos básicos del lenguaje ABAP
●
Los tipos de datos globales pueden contener la información semántica correspondiente a las descripciones empresariales de los objetos que se van a definir, además de la información técnica. También se pueden utilizar para diseñar visualizaciones de pantalla (por ejemplo, la descripción breve de la izquierda del campo de entrada).
Los tipos de datos locales se deben definir si solo se necesitan en un programa y solo si la información semántica no influye en la definición de los objetos de datos correspondientes. RESUMEN DE LA LECCIÓN Ahora podrá: ●
248
Conocer las diferencias entre los tipos y las variables, y cómo usarlos
© Copyright . Reservados todos los derechos.
Capítulo 7 Lección 2 233
Uso de sentencias ABAP básicas
RESUMEN DE LA LECCIÓN En este módulo se explica cómo rellenar objetos de datos elementales con valores y cómo realizar cálculos en ABAP. También verá una introducción a las construcciones que puede utilizar para controlar el flujo del programa dependiendo del contenido de los objetos de datos. Ejemplo empresarial Se dispone a crear un programa ABAP simple para los tipos básicos de cálculo. Debe poder indicar los valores y el operador aritmético. Por ello, necesita saber lo siguiente: ●
Cómo rellenar los objetos de datos elementales con valores
●
Cómo realizar cálculos en ABAP
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Utilizar los conceptos básicos de la sintaxis ABAP
Asignaciones de valor
Figura 106: Asignaciones de valor
© Copyright . Reservados todos los derechos.
249
Capítulo 7: Elementos básicos del lenguaje ABAP
Al iniciar un programa, se carga el contexto del programa en una memoria del servidor de aplicación y se pone la memoria a disposición de los objetos de datos definidos en el programa. Cada objeto de datos elemental se preasigna al valor inicial específico del tipo, excepto si se ha fijado un valor distinto mediante el suplemento VALUE. Puede utilizar la sentencia MOVE para transferir el contenido de un objeto de datos a otro objeto de datos. Las siguientes variantes de sintaxis tienen el mismo efecto: MOVE gv_var1 TO gv_var2.
●
●
gv_var2 = gv_var1.
Si ambos objetos de datos gv_var1 y gv_var2 son de tipos diferentes, existe un conflicto de tipos. En este caso, si existe una regla de conversión, se realiza automáticamente una conversión de tipo de datos. Para obtener información detallada acerca de las copias y las reglas de conversión, consulte la documentación de palabras clave de la sentencia MOVE. La sentencia CLEAR reinicializa el contenido de un objeto de datos al valor inicial ligado al tipo. Para obtener información detallada acerca de los valores iniciales de un tipo en particular, consulte la documentación de palabras clave de la sentencia CLEAR.
Cálculos y expresiones aritméticas
Figura 107: Cálculos
En ABAP, puede programar expresiones aritméticas hasta cualquier nivel de anidamiento. Operadores válidos: ● + (suma)
250
●
- (resta)
●
* (multiplicación)
●
/ (división)
●
** (Potencia)
© Copyright . Reservados todos los derechos.
Lección: Uso de sentencias ABAP básicas
●
DIV (división integral sin resto)
●
MOD (Resto después de la división integral) Parentheses and operators are ABAP keywords; therefore, you must separate them from other words or symbols by at least one space.
Varias funciones de distintos tipos de datos están predefinidas en el entorno de tiempo de ejecución ABAP. Por ejemplo, la siguiente sentencia proporciona la longitud real del contenido de una variable de carácter. gv_length = STRLEN (gd_cityfrom). En el caso de las funciones, el paréntesis de apertura es parte del nombre de la función. El resto debe estar separado por un espacio como mínimo. Las reglas algebraicas se aplican a la secuencia de procesamiento. Primero vienen las expresiones entre paréntesis, a continuación las funciones, las potencias, las multiplicaciones y divisiones, y al final las sumas y restas. Para obtener información detallada acerca de las operaciones y funciones disponibles, consulte la documentación de palabras clave de la sentencia COMPUTE.
Condicionales y expresiones lógicas
Figura 108: Condicionales
ABAP ofrece los siguientes modos de ejecutar diferentes secuencias de código dependiendo de las condiciones: ● En la construcción IF, puede definir cualquier expresión lógica como condición de verificación. Si se cumple la condición, el sistema ejecuta el bloque de sentencias correspondiente. De lo contrario, se verifica la condición especificada en la siguiente bifurcación ELSEIF (es posible incluir varias bifurcaciones). Si no se cumple ninguna de las condiciones especificadas, se ejecuta la bifurcación ELSE, si es que existe. Las bifurcaciones ELSEIF y ELSE son opcionales. Para obtener más información acerca de
© Copyright . Reservados todos los derechos.
251
Capítulo 7: Elementos básicos del lenguaje ABAP
cómo formular una expresión lógica, consulte la documentación de palabras clave de la sentencia IF. ●
En la construcción CASE, puede distinguir casos de forma clara. El contenido del campo especificado en la parte CASE se verifica con respecto a los objetos de datos listados en la bifurcación WHEN para comprobar si coinciden. Si el contenido del campo coincide, se procesa el bloque de sentencias correspondiente. Si ninguna comparación coincide, el sistema ejecuta la bifurcación OTHERS si está disponible. Excepto la primera bifurcación WHEN, todas las otras bifurcaciones son opcionales.
En ambos escenarios, la verificación de condiciones o de coincidencias se produce secuencialmente de forma descendente. Tan pronto como se ejecute el bloque de secuencias de una bifurcación, el sistema pasará inmediatamente a ENDIF o ENDCASE.
Consejo: Si desea implementar verificaciones de semejanza entre un campo y distintos valores, es preferible utilizar la construcción CASE antes que la sentencia IF, puesto que es más transparente y rinde mejor. Sentencia IF
Figura 109: Ejemplos: sentencia IF
En la figura se muestran varios ejemplos simples (negación, enlaces AND y OR con paréntesis, y negación antes de condiciones lógicas) de utilizar la sentencia IF. Puede formular negaciones situando el operador NOT antes de la expresión lógica. Cuando niegue la consulta IS INITIAL, puede utilizar la consulta especial IS NOT INITIAL.
252
© Copyright . Reservados todos los derechos.
Lección: Uso de sentencias ABAP básicas
Consejo: Una sentencia "IF NOT var IS INITIAL" es una sentencia válida también (sintaxis correcta). Sin embargo, para mejorar la legibilidad del código de programación, SAP recomienda no utilizar esta sentencia/sintaxis. Puede anidar las estructuras IF y CASE de cualquier forma, pero asegúrese de que la lógica de cada estructura sea correcta aquí. Cada estructura debe estar cerrada, por ejemplo: IF . ... IF . .. . ENDIF. ENDIF.
How to Use Basic ABAP Statements Demonstrate the steps of the exercise.
Loops
Figura 110: Loops
Existen cuatro construcciones de loop en ABAP. El campo del sistema tendrá sentido solo si se consulta dentro de un loop. En los loops anidados, sy-index contiene siempre el número de la iteración de loop del loop en el que está situado. En los loops DO y WHILE, el campo de sistema sy-index contiene el número de iteración de loop actual. Por ello, solo debe consultar este campo de sistema dentro de un loop. Construcciones de loop: Loops incondicionales y controlados por índice
●
© Copyright . Reservados todos los derechos.
253
Capítulo 7: Elementos básicos del lenguaje ABAP
El bloque de sentencia entre DO y ENDDO se ejecuta de forma continua hasta que se abandona el loop mediante sentencias de terminación como EXIT. Especifique el número máximo de transferencias de loop; de lo contrario, puede obtener un loop interminable. ●
Loops controlados por la cabecera El bloque de sentencia entre WHILE y ENDWHILE se ejecuta de forma continua hasta que no se cumpla la condición especificada. Siempre se verifica la condición antes de ejecutar el bloque de sentencias.
●
Loops de lectura El loop SELECT lee varias entradas de una tabla de bases de datos sucesivamente. En una tabla interna (variable de tabla en el programa), la misma función de lectura se implementa con el LOOP.
Campos de sistema (extracto) Tabla 3: Algunos campos de sistema interesantes Campo de sistema
Significado
sy-mandt
Mandante de trabajo
sy-uname
Nombre de inicio de sesión del usuario
sy-langu
Idioma de inicio de sesión del usuario
sy-datum
Fecha local del sistema ABAP
sy-uzeit
Hora local del sistema ABAP
sy-tcode
Código de transacción actual
sy-repid
Nombre del programa ABAP actual
sy-index
Contador de loops DO y WHILE
En el código fuente ABAP, puede usar varios objetos de datos sin declararlos explícitamente antes (por ejemplo, sy-datum y sy-index). El sistema de tiempo de ejecución utiliza estos campos de sistema para suministrar información al programa de aplicación acerca del status de sistema real. En la tabla se muestran varios campos de sistema. Encontrará una lista completa de los campos de sistema en la documentación de palabras clave bajo el término Campos de sistema. Para acceder a los campos de sistema de sus programas, utilice el acceso de solo lectura. El acceso de escritura puede causar pérdidas de información importante de algunas partes del programa que requieren esta información. Además, el sistema de tiempo de ejecución puede modificar nuevamente el contenido del campo. Por ello, SAP recomienda solo leer estos campos.
254
© Copyright . Reservados todos los derechos.
Lección: Uso de sentencias ABAP básicas
Código de retorno de una sentencia ABAP
Figura 111: Código de retorno de una sentencia ABAP
Uno de los campos de sistema más importantes es el campo sy-subrc. Con muchas sentencias, el sistema de tiempo de ejecución ABAP suministra este campo con el código de retorno correspondiente para indicar si la sentencia se ha ejecutado correctamente. El valor cero significa que la secuencia se ha ejecutado correctamente. Lea la documentación de palabras clave de las sentencias correspondientes para averiguar si se fija este valor de retorno y cómo se lleva a cabo en casos individuales.
© Copyright . Reservados todos los derechos.
255
Capítulo 7: Elementos básicos del lenguaje ABAP
256
© Copyright . Reservados todos los derechos.
Capítulo 7 Ejercicio 13 241
Usar sentencias ABAP básicas
Ejemplo empresarial Se dispone a crear un programa ABAP simple para los cuatro tipos básicos de cálculo. Debe poder indicar los valores y el operador aritmético en una pantalla de selección. El resultado debe visualizarse en una lista. Modelo Ninguno Solución BC400_DOS_COMPUTE Tarea 1 Cree un programa. 1. Cree el programa ejecutable ZBC400_##_COMPUTE sin ningún Include TOP y asígnelo a su paquete.
Tarea 2 Defina una pantalla de selección con tres parámetros de entrada. 1. Defina dos parámetros de entrada de tipo enteros como operandos (nombres sugeridos: pa_int1, pa_int2) y un operador aritmético de tipo alfanumérico de un carácter de longitud (nombre sugerido: pa_op). Utilice la palabra clave PARAMETERS de ABAP para ello.
Tarea 3 Implemente los tipos de cálculo básicos y emita el resultado en una lista. 1. Cree un objeto de datos elemental (nombre sugerido: gv_result) mediante la sentencia DATA para el resultado de cálculos. Defínalo como un tipo de número empaquetado de 16 dígitos de longitud y dos posiciones decimales. 2. Calcule el resultado según el operador aritmético especificado. Utilice la sentencia CASE para distinguir los casos. 3. Presente el resultado en una lista mediante la sentencia WRITE. Si desea presentar textos durante el proceso, asegúrese de que esos textos se puedan traducir y se visualicen como dependientes de idioma.
© Copyright . Reservados todos los derechos.
257
Capítulo 7: Elementos básicos del lenguaje ABAP
Consejo: Cree símbolos de texto y utilícelos en lugar de literales.
Tarea 4 Corrija los errores que puedan surgir. 1. Visualice un mensaje de error en la lista si el usuario especifica un operador aritmético no válido. Utilice la sentencia IF para verificar. Utilice un texto traducible. 2. Visualice un mensaje de error en la lista si el usuario intenta dividir por cero.
Tarea 5 Active y realice un test del programa. 1. Active su programa. 2. Realice un test de su programa.
258
© Copyright . Reservados todos los derechos.
Capítulo 7 Solución 13 243
Usar sentencias ABAP básicas
Ejemplo empresarial Se dispone a crear un programa ABAP simple para los cuatro tipos básicos de cálculo. Debe poder indicar los valores y el operador aritmético en una pantalla de selección. El resultado debe visualizarse en una lista. Modelo Ninguno Solución BC400_DOS_COMPUTE Tarea 1 Cree un programa. 1. Cree el programa ejecutable ZBC400_##_COMPUTE sin ningún Include TOP y asígnelo a su paquete. a) Realice este paso del mismo modo que en los ejercicios anteriores.
Tarea 2 Defina una pantalla de selección con tres parámetros de entrada. 1. Defina dos parámetros de entrada de tipo enteros como operandos (nombres sugeridos: pa_int1, pa_int2) y un operador aritmético de tipo alfanumérico de un carácter de longitud (nombre sugerido: pa_op). Utilice la palabra clave PARAMETERS de ABAP para ello. a) Consulte el extracto del código fuente de la solución modelo a continuación.
Tarea 3 Implemente los tipos de cálculo básicos y emita el resultado en una lista. 1. Cree un objeto de datos elemental (nombre sugerido: gv_result) mediante la sentencia DATA para el resultado de cálculos. Defínalo como un tipo de número empaquetado de 16 dígitos de longitud y dos posiciones decimales. a) Consulte el extracto del código fuente de la solución modelo a continuación. 2. Calcule el resultado según el operador aritmético especificado. Utilice la sentencia CASE para distinguir los casos. a) Consulte el extracto del código fuente de la solución modelo a continuación.
© Copyright . Reservados todos los derechos.
259
Capítulo 7: Elementos básicos del lenguaje ABAP
3. Presente el resultado en una lista mediante la sentencia WRITE. Si desea presentar textos durante el proceso, asegúrese de que esos textos se puedan traducir y se visualicen como dependientes de idioma. Consejo: Cree símbolos de texto y utilícelos en lugar de literales.
a) Consulte el extracto del código fuente de la solución modelo a continuación.
Tarea 4 Corrija los errores que puedan surgir. 1. Visualice un mensaje de error en la lista si el usuario especifica un operador aritmético no válido. Utilice la sentencia IF para verificar. Utilice un texto traducible. a) Consulte el extracto del código fuente de la solución modelo a continuación. 2. Visualice un mensaje de error en la lista si el usuario intenta dividir por cero. a) Consulte el extracto del código fuente de la solución modelo a continuación.
Tarea 5 Active y realice un test del programa. 1. Active su programa. a) En la barra de herramientas Editor ABAP, seleccione
(Activar).
2. Realice un test de su programa. a) En la barra de herramientas Editor ABAP, seleccione
(Procesamiento directo).
b) Indique valores en los parámetros de la pantalla de selección y seleccione (Ejecutar). c) Verifique el resultado. Verifique también la emisión de mensaje en caso de error. Solución modelo: *&----------------------------------------* *& Report BC400_DOS_COMPUTE *&----------------------------------------* *& Simple calculator *&----------------------------------------* REPORT bc400_dos_compute. PARAMETERS: pa_int1 TYPE i, pa_op TYPE c LENGTH 1, pa_int2 TYPE i. DATA gv_result TYPE p LENGTH 16 DECIMALS 2.
260
© Copyright . Reservados todos los derechos.
Lección: Uso de sentencias ABAP básicas
IF ( pa_op pa_op pa_op pa_op
= = = =
'+' '-' '*' '/'
CASE pa_op. WHEN '+'. gv_result WHEN '-'. gv_result WHEN '*'. gv_result WHEN '/'. gv_result ENDCASE.
OR OR OR AND pa_int2 0 ).
= pa_int1 + pa_int2. = pa_int1 - pa_int2. = pa_int1 * pa_int2. = pa_int1 / pa_int2.
WRITE: 'Result'(res), gv_result. ELSEIF pa_op = '/' AND pa_int2 = 0. WRITE 'No division by zero!'(dbz). ELSE. WRITE 'Invalid operator!'(iop). ENDIF.
© Copyright . Reservados todos los derechos.
261
Capítulo 7: Elementos básicos del lenguaje ABAP
Mensajes de diálogo
Figura 112: Mensajes de diálogo
La sentencia MESSAGE se utiliza para enviar mensajes de diálogo a los usuarios de un programa. Especifique el número de mensaje de tres dígitos y la clase de mensaje cuando utilice la sentencia MESSAGE. El número y la clase de mensaje identifican claramente el mensaje que se debe visualizar. El tipo de mensaje se utiliza para especificar dónde desea que se visualice el mensaje. Puede realizar un test del comportamiento de visualización de los distintos tipos de mensaje mediante el programa de demostración DEMO_MESSAGES que se suministra con el sistema estándar SAP. Si el mensaje especificado contiene reserva-espacios, indíqueles valores de su programa mediante el suplemento WITH. En lugar de los reserva-espacios, aparecerán los valores transferidos en el texto de mensaje visualizado. Para obtener más información acerca de las alternativas sintácticas de la sentencia MESSAGE, consulte la documentación de palabras clave correspondiente.
How to Use Dialog Messages If you have used a WRITE statement to output an error message in one of the programs you created previously, you can now replace this with MESSAGE, with messages 050 and 051 from the message class BC400, for example. Use message type i and explain that this can be improved later using event control.
262
© Copyright . Reservados todos los derechos.
Lección: Uso de sentencias ABAP básicas
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Utilizar los conceptos básicos de la sintaxis ABAP
© Copyright . Reservados todos los derechos.
263
Capítulo 7 Lección 3 248
Trabajar con el ABAP Debugger
RESUMEN DE LA LECCIÓN En este módulo se explica cómo trabajar con el ABAP Debugger para los objetos de datos elementales. Ejemplo empresarial Como programador de ABAP, usted está desarrollando programas en ABAP. Se dispone a depurar los programas que desarrolla. Por este motivo, se requieren los siguientes conocimientos: ●
Comprender cómo trabajar con el ABAP Debugger para los objetos de datos elementales.
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Utilizar el ABAP Debugger para analizar los valores de los objetos de datos elementales durante la ejecución del programa.
ABAP Debugger
Figura 113: Ejecución de un programa en el modo debugging
264
© Copyright . Reservados todos los derechos.
Lección: Trabajar con el ABAP Debugger
Las dos formas de comenzar un programa en modo debugging desde el Object Navigator son las siguientes: ● En el área de navegación, abra el menú contextual del programa seleccionado y elija Ejecutar Depuración. ●
En el área del Editor ABAP, seleccione la línea de programa solicitada desde la cual desea realizar el proceso de depuración. Seleccione el pulsador Fijar o Borrar breakpoint. Inicie el programa pulsando F8 o abriendo el menú contextual en el área de navegación y eligiendo Ejecutar → Directo. La opción de un breakpoint descrita anteriormente en el Editor ABAP solo es posible para los códigos fuente activos.
Cambio al modo debugging en tiempo de ejecución
Figura 114: Cambio al modo debugging en tiempo de ejecución
Si desea depurar una función determinada de un programa, inicie el programa sin el ABAP Debugger y, a continuación, cambie al modo debugging inmediatamente antes de ejecutar la función (p. ej. pulsador). Formas de cambiar a modo debugging durante la ejecución: ● Seleccione Sistema → Utilidades → Debugging ABAP (o pantalla). ●
Indique /h en el campo de comandos en la barra de herramientas estándar y pulse INTRO.
© Copyright . Reservados todos los derechos.
265
Capítulo 7: Elementos básicos del lenguaje ABAP
ABAP Debugger: paso individual y contenidos de campo
Figura 115: ABAP Debugger: paso individual y contenidos de campo
En el ABAP Debugger, puede seleccionar el procesamiento en pasos individuales para ejecutar el programa sentencia por sentencia. Además, puede visualizar objetos de datos y su contenido actual en la pantalla de variables. Simplemente introduzca el nombre del objeto de datos en la pantalla de variables. También puede hacer doble clic en el nombre del objeto de datos en el código de fuente para transferir el nombre de la variable a la lista del campo del depurador.
Nota: En los sistemas de versiones anteriores a SAP NetWeaver AS 6.40, solo tiene que acceder al Depurador ABAP "clásico". En las versiones posteriores puede utilizar tanto el ABAP Debugger nuevo como el clásico. Puede cambiar fácilmente del ABAP Debugger nuevo al clásico seleccionando Debugger → Cambiar al ABAP Debugger clásico en el menú. En el ABAP Debugger clásico puede visualizar el contenido de hasta ocho objetos de datos. Para ello, proceda como lo haría con el nuevo ABAP Debugger. En el Object Navigator, puede definir qué ABAP Debugger desea utilizar de forma estándar seleccionando Utilidades → Opciones → Editor ABAP → Debugging.
266
© Copyright . Reservados todos los derechos.
Lección: Trabajar con el ABAP Debugger
ABAP Debugger: breakpoints
Figura 116: ABAP Debugger: breakpoints
En el nuevo ABAP Debugger, puede fijar un breakpoint con un solo clic antes de la línea en el código fuente (en el ABAP Debugger clásico, se realiza con un doble clic). También puede fijar un breakpoint para sentencias ABAP específicas seleccionando Breakpoints → Breakpoint en → Sentencia. Si selecciona Continuar, se ejecuta el programa hasta el siguiente breakpoint. Los breakpoints fijados son válidos únicamente para la sesión actual del ABAP Debugger. Sin embargo, si pulsa Grabar, los breakpoints permanecerán en su sitio durante la sesión SAP actual.
© Copyright . Reservados todos los derechos.
267
Capítulo 7: Elementos básicos del lenguaje ABAP
ABAP Debugger: seguimiento de las modificaciones de datos
Figura 117: ABAP Debugger: seguimiento de las modificaciones de datos
Los watchpoints son breakpoints que dependen del contenido del campo. Si fija un watchpoint sin especificar un operador relacional/valor comparativo en un campo y selecciona Continuar, el programa se ejecutará hasta que se modifique el contenido del campo. Si especifica el operador relacional y el valor comparativo, el programa se ejecuta hasta que se encuentre la condición especificada. En el ABAP Debugger clásico puede fijar un máximo de 10 watchpoints. Puede enlazar los watchpoints con un operador lógico (AND u OR) del mismo modo que en el nuevo ABAP Debugger.
268
© Copyright . Reservados todos los derechos.
Lección: Trabajar con el ABAP Debugger
ABAP Debugger: seguimiento de los contenidos de campo
Figura 118: ABAP Debugger: seguimiento de los contenidos de campo
Si desea modificar el contenido de un campo durante la depuración, haga doble clic en el icono del lápiz en la pantalla de variables. El valor estará listo para la entrada. Modifique el valor del campo y confírmelo pulsando INTRO. El valor se modifica mientras se ejecuta el ABAP Debugger. En el ABAP Debugger clásico, puede modificar el contenido directamente en la vista de campo. A continuación, debe hacer clic en el icono del lápiz para aceptar el valor modificado. Funciones del nuevo ABAP Debugger El nuevo ABAP Debugger permite las siguientes funciones adicionales: ●
ABAP Debugger en segunda sesión Entradas para el programa de aplicación visibles en paralelo
●
●
Opciones de visualización en paralelo mediante áreas de visualización configurables libremente Integración del nuevo Editor ABAP (A partir de SAP NetWeaver 7.0)
●
Quick info en el área de código fuente para la visualización del valor de objeto de datos (A partir de SAP NetWeaver 7.0)
●
Watchpoint en tablas internas y referencias de objetos (A partir de SAP NetWeaver 7.0)
●
Comparación de strings, estructuras y tablas internas
© Copyright . Reservados todos los derechos.
269
Capítulo 7: Elementos básicos del lenguaje ABAP
(A partir de SAP NetWeaver 7.0) En SAP NetWeaver 7.0 EhP2, se han agregado nuevas características y mejoras para el nuevo ABAP Debugger. Características de SAP NetWeaver 7.0 EhP2 El nuevo ABAP Debugger de SAP NetWeaver 7.0 EhP2 tiene las siguientes características: ●
Debbug en HTTP y RFC
●
Depuración sensible a los niveles del software (SLAD)
●
Depuración automática, scripting del depurador
●
Análisis del consumo de memoria
●
Herramienta ampliada de Web Dynpro
●
Herramienta ampliada de tabla
●
Depuración de sentencia: The participants should perform the ABAP Debugger exercise here.
How to Debug Statements on Elementary Data Objects The BC400_DED_DEBUGGER program from the BC400 package is a suitable choice for demonstrating debugging. Alternatively, you can also debug a program with a selection screen. To activate the ABAP Debugger after the selection screen enter /h in the command field.
270
© Copyright . Reservados todos los derechos.
Capítulo 7 Ejercicio 14 255
Depurar sentencias en objetos de datos elementales
Ejemplo empresarial Le suministran un programa y debe utilizar el ABAP Debugger para tratar el comportamiento semántico. Necesitará ejecutar un programa en el ABAP Debugger, fijar breakpoints en el ABAP Debugger, fijar breakpoints que dependen del contenido (watchpoints) y cambiar los contenidos de campo durante la depuración. Tarea 1 Ejecute el programa BC400_DED_DEBUG_EXERCISE en modo debugging y rastree el contenido de GV_COUNT. 1. Inicie el programa BC400_DED_DEBUG_EXERCISE en modo debugging mediante la lista de objetos del Object Navigator. 2. Verifique el contenido de los objetos de datos del programa en el inicio. Para ello, incluya todos los objetos de datos definidos en el programa y en el campo de sistema SY-INDEX en la vista variable. Observe también la escritura de los campos.
Tarea 2 Analice el loop WHILE fijando breakpoints y realizando un seguimiento del contenido de GV_COUNT y SY-INDEX. 1. Siga el flujo de programa en pasos individuales hasta haber pasado dos veces por el loop WHILE. En cada caso, realice un seguimiento de cómo cambia el contenido del campo. 2. Fije un breakpoint en la sentencia que asigne un nuevo valor al objeto de datos GV_COUNT. Seleccione (Continuar) para continuar el programa y observar los cambios en el contenido del campo. Repita el último paso hasta que el programa haya realizado su curso y se visualice la lista. 3. Ejecute el programa de nuevo en modo debugging. Analice las modificaciones del objeto de datos GV_COUNT creando un watchpoint para el campo. Seleccione Continuar para continuar el programa y observar los cambios en el contenido de los objetos de datos y del campo de sistema SY-INDEX.
Tarea 3 Analice el loop DO anidado fijando un breakpoint en las sentencias WRITE y EXIT. 1. Reinicie el programa en modo debugging. Fije breakpoints en todas las sentencias WRITE y EXIT del programa (seleccione Breakpoints → Breakpoint en → Breakpoint en
© Copyright . Reservados todos los derechos.
271
Capítulo 7: Elementos básicos del lenguaje ABAP
sentencia). Analice cómo se modifica el contenido de los contadores de loops GV_IDX_OUTER y GV_IDX_INNER, la información que se muestra y cuándo se muestra. 2. ¿Qué efecto tiene la sentencia EXIT en un loop?
Tarea 4 Utilice ABAP Debugger para modificar el flujo del programa de manera que también se ejecute la última sentencia del programa. 1. Haga que el programa ejecute la última sentencia. Utilice la opción de cambiar el contenido de objetos de datos en modo debugging.
272
© Copyright . Reservados todos los derechos.
Capítulo 7 Solución 14 257
Depurar sentencias en objetos de datos elementales
Ejemplo empresarial Le suministran un programa y debe utilizar el ABAP Debugger para tratar el comportamiento semántico. Necesitará ejecutar un programa en el ABAP Debugger, fijar breakpoints en el ABAP Debugger, fijar breakpoints que dependen del contenido (watchpoints) y cambiar los contenidos de campo durante la depuración. Tarea 1 Ejecute el programa BC400_DED_DEBUG_EXERCISE en modo debugging y rastree el contenido de GV_COUNT. 1. Inicie el programa BC400_DED_DEBUG_EXERCISE en modo debugging mediante la lista de objetos del Object Navigator. a) Visualice el programa en el Object Navigator, haga clic con el botón derecho en el programa y seleccione Ejecutar → Debugging. b) De forma alternativa, en el Editor ABAP, fije un breakpoint en la primera sentencia ejecutable del editor. 2. Verifique el contenido de los objetos de datos del programa en el inicio. Para ello, incluya todos los objetos de datos definidos en el programa y en el campo de sistema SY-INDEX en la vista variable. Observe también la escritura de los campos. a) En el código fuente del ABAP Debugger, haga doble clic en los campos GV_COUNT, GV_IDX_INNER, GV_IDX_OUTER y SY-INDEX. Desplácese hacia la derecha de la visualización variable para visualizar los tipos de campo.
Tarea 2 Analice el loop WHILE fijando breakpoints y realizando un seguimiento del contenido de GV_COUNT y SY-INDEX. 1. Siga el flujo de programa en pasos individuales hasta haber pasado dos veces por el loop WHILE. En cada caso, realice un seguimiento de cómo cambia el contenido del campo. a) Realice el análisis de pasos individuales seleccionando Debugger → Paso individual, (Paso individual) o F5. 2. Fije un breakpoint en la sentencia que asigne un nuevo valor al objeto de datos (Continuar) para continuar el programa y observar los GV_COUNT. Seleccione cambios en el contenido del campo. Repita el último paso hasta que el programa haya realizado su curso y se visualice la lista.
© Copyright . Reservados todos los derechos.
273
Capítulo 7: Elementos básicos del lenguaje ABAP
a) Haga clic una vez en la primera columna en frente de la asignación de valor para fijar un breakpoint aquí. b) Seleccione Debugger → Continuar del menú,
(Continuar) o F8.
3. Ejecute el programa de nuevo en modo debugging. Analice las modificaciones del objeto de datos GV_COUNT creando un watchpoint para el campo. Seleccione Continuar para continuar el programa y observar los cambios en el contenido de los objetos de datos y del campo de sistema SY-INDEX. a) Para acceder al ABAP Debugger, repita el primer paso en este ejercicio (consulte paso 1 de la Tarea 1). b) Coloque el cursor en el objeto de datos GV_COUNT del código fuente visualizado en el ABAP Debugger. Seleccione el pulsador Watchpoint y confirme el cuadro de diálogo que aparece con
.
c) Para reiniciar el programa, seleccione
(Continuar).
Tarea 3 Analice el loop DO anidado fijando un breakpoint en las sentencias WRITE y EXIT. 1. Reinicie el programa en modo debugging. Fije breakpoints en todas las sentencias WRITE y EXIT del programa (seleccione Breakpoints → Breakpoint en → Breakpoint en sentencia). Analice cómo se modifica el contenido de los contadores de loops GV_IDX_OUTER y GV_IDX_INNER, la información que se muestra y cuándo se muestra. a) Para acceder al ABAP Debugger, proceda de la forma anterior. b) En el ABAP Debugger, seleccione Breakpoints → Breakpoint en → Breakpoint en sentencia e indique la sentencia WRITE en la ventana de diálogo que aparece. Confirme la ventana de diálogo que aparece con c) Seleccione
.
(Continuar) y analice el flujo de programa.
2. ¿Qué efecto tiene la sentencia EXIT en un loop? La sentencia EXIT hace que el sistema deje de procesar el loop DO actual.
Tarea 4 Utilice ABAP Debugger para modificar el flujo del programa de manera que también se ejecute la última sentencia del programa. 1. Haga que el programa ejecute la última sentencia. Utilice la opción de cambiar el contenido de objetos de datos en modo debugging. a) Fije un breakpoint en la última sentencia IF y seleccione Continuar para ejecutar el programa hasta este punto. b) Incluya el campo GV_IDX_INNER en la vista variable. Haga doble clic en el icono de lápiz de la vista variable. Modifique el valor del campo de 6 a 5 y confirme el cambio seleccionando Intro.
274
© Copyright . Reservados todos los derechos.
Lección: Trabajar con el ABAP Debugger
c) Continúe el programa seleccionando Paso individual o Continuar. Nota: De forma alternativa, también puede ejecutar la última sentencia mediante la función Pasar a sentencia. En el modo debugging, sitúe el cursor en esta línea de cualquier evento y seleccione Debugger → Pasar a sentencia.
© Copyright . Reservados todos los derechos.
275
Capítulo 7: Elementos básicos del lenguaje ABAP
RESUMEN DE LA LECCIÓN Ahora podrá: ●
276
Utilizar el ABAP Debugger para analizar los valores de los objetos de datos elementales durante la ejecución del programa.
© Copyright . Reservados todos los derechos.
Capítulo 7
261
Evaluación de la formación
1. ¿Cuál de los siguientes tipos estándares ABAP son completos? Seleccione las respuestas correctas. X
A T (Tiempo)
X
B C (Carácter)
X
C N (Carácter numérico)
X
D D (Fecha)
2. En las sentencias IF, las negaciones se formulan generalmente situando el operador ______ antes de la expresión lógica. Seleccione la respuesta correcta. X
A AND
X
B OR
X
C END
X
D NOT
3. ¿Cuáles de las siguientes opciones se requieren en la sintaxis de la sentencia MESSAGE? Seleccione las respuestas correctas. X
A Número de mensaje
X
B Clase de mensaje
X
C Clase de mensaje
X
D Función de mensaje
© Copyright . Reservados todos los derechos.
277
Capítulo 7: Evaluación de la formación
4. En los loops anidados, ¿cuál de los siguientes contiene el número de la iteración de loop del loop en el que está situado? Seleccione la respuesta correcta. X
A sy-index
X
B sy-repid
X
C sy-uname
X
D sy-mandt
5. Para cambiar el modo debugging durante la ejecución, puede introducir _______ en el campo de comando. Seleccione la respuesta correcta.
278
X
A /d
X
B /h
X
C /i
X
D /a
© Copyright . Reservados todos los derechos.
Capítulo 7
263
Respuestas a la Evaluación de la formación
1. ¿Cuál de los siguientes tipos estándares ABAP son completos? Seleccione las respuestas correctas. X
A T (Tiempo)
X
B C (Carácter)
X
C N (Carácter numérico)
X
D D (Fecha)
2. En las sentencias IF, las negaciones se formulan generalmente situando el operador ______ antes de la expresión lógica. Seleccione la respuesta correcta. X
A AND
X
B OR
X
C END
X
D NOT
3. ¿Cuáles de las siguientes opciones se requieren en la sintaxis de la sentencia MESSAGE? Seleccione las respuestas correctas. X
A Número de mensaje
X
B Clase de mensaje
X
C Clase de mensaje
X
D Función de mensaje
© Copyright . Reservados todos los derechos.
279
Capítulo 7: Respuestas a la Evaluación de la formación
4. En los loops anidados, ¿cuál de los siguientes contiene el número de la iteración de loop del loop en el que está situado? Seleccione la respuesta correcta. X
A sy-index
X
B sy-repid
X
C sy-uname
X
D sy-mandt
5. Para cambiar el modo debugging durante la ejecución, puede introducir _______ en el campo de comando. Seleccione la respuesta correcta.
280
X
A /d
X
B /h
X
C /i
X
D /a
© Copyright . Reservados todos los derechos.
CAPÍTULO 8
Modularización
Lección 1 Introducir la modularización
283
Lección 2 Modularización con subrutinas Ejercicio 15: Implementar subrutinas
290 303
Lección 3 Modularizar con módulos de función Ejercicio 16: Uso de un módulo de funciones
309 319
Lección 4 Implementar módulos de funciones Ejercicio 17: Crear un grupo de funciones Ejercicio 18: Crear un módulo de funciones
326 329 335
Lección 5 Modularización con BAPI
342
Lección 6 Modularizar con clases globales Ejercicio 19: Utilizar un método global estático
347 359
Lección 7 Implementación de clases globales simples y métodos estáticos Ejercicio 20: Crear una clase global simple Ejercicio 21: Crear un método estático simple
365 369 371
Lección 8 Modularizar con clases locales
© Copyright . Reservados todos los derechos.
376
281
Capítulo 8: Modularización
OBJETIVOS DEL CAPÍTULO
282
●
Describir los conceptos básicos y un resumen de modularización
●
Modularizar con subrutinas
●
Usar módulos de funciones y grupos de funciones
●
Crear grupos de funciones
●
Crear módulos de funciones
●
Modularizar con BAPI
●
Describir la programación orientada a objetos
●
Utilizar los métodos de clases globales
●
Tratar instancias
●
Crear clases globales simples
●
Tratar clases locales
© Copyright . Reservados todos los derechos.
Capítulo 8 Lección 1 267
Introducir la modularización
RESUMEN DE LA LECCIÓN En esta lección se explica por qué puede ser razonable almacenar partes de los programas en unidades de modularización. También obtendrá un resumen de las opciones de modularización de los programas ABAP. Ejemplo empresarial Un empleado de gestión de calidad ha descubierto que muchas partes del programa se repiten con frecuencia. Su tarea consiste en averiguar qué técnicas de modularización se pueden implementar. Por este motivo, se requieren los siguientes conocimientos: ●
Comprender las técnicas de modularización básica This lesson is aimed at participants who are unfamiliar with the idea and advantages of modularization units. Determine at the start of this lesson whether a basic introduction is practical or necessary.
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Describir los conceptos básicos y un resumen de modularización
© Copyright . Reservados todos los derechos.
283
Capítulo 8: Modularización
Técnicas de modularización
Figura 119: Opciones de utilización de unidades de modularización
Una unidad de modularización es una parte de un programa que encapsula una función concreta. Una parte del código fuente se almacena en un módulo para mejorar la transparencia del programa, además de para poder usar la función correspondiente del programa varias veces sin tener que volver a implementar el código fuente entero en cada ocasión (consulte la figura). El resultado obtenido cuando un programa pasa a estar más orientado a las funciones es la mejora de la transparencia. Divide la tarea global en subfunciones, que son responsabilidad de las unidades de modularización correspondientes. La modularización facilita la actualización de programas, ya que permite que las modificaciones se realicen únicamente en la función, o las correcciones en las unidades de modularización respectivas, y no en varios puntos del programa principal. Asimismo, también le permite procesar una llamada como unidad en el ABAP Debugger durante la ejecución del programa y visualizar posteriormente el resultado. De este modo, resulta mucho más fácil encontrar el origen del error.
284
© Copyright . Reservados todos los derechos.
Lección: Introducir la modularización
Modularización de programa local
Figura 120: Modularización de programa local
At this point, do not provide detailed answers to questions from the participants regarding actual implementation. A precise explanation of the syntax is provided in another lesson. It is also possible to call a subroutine of an external program (see the online documentation for external program calls). To avoid confusion, do not explain this technique in detail. If participants address this issue, refer them to the online documentation. Point out that this technique must not be used because it contradicts the principle of encapsulating data and functions. Las técnicas para la modularización de programa local en el lenguaje de programación ABAP son las siguientes: ● Subrutinas, también conocidas como rutinas form ●
Métodos en clases locales
Con ambas técnicas de modularización local, las unidades de modularización sólo están disponibles en el programa en el que implementan. Para llamar el módulo local, no es necesario cargar ningún otro programa en el contexto de usuario en tiempo de ejecución. Las clases locales, los métodos y las subrutinas pueden tener el mismo nombre en diferentes programas sin causar conflictos. Esto se debe a que el código fuente de los programas se trata por separado en la memoria principal del servidor de aplicación.
Consejo: Es técnicamente posible llamar una subrutina desde otro programa. Sin embargo, no utilice esta opción, ya que esta técnica contradice el principio de encapsulación de datos y funciones.
© Copyright . Reservados todos los derechos.
285
Capítulo 8: Modularización
Modularización global
Figura 121: Modularización global
Give a general description of the techniques here. A detailed explanation is provided later in another lesson. Las técnicas para la modularización global en el lenguaje de programación ABAP son las siguientes: ● Los módulos de funciones organizados en grupos de funciones ●
Métodos en clases globales
Cualquier número indefinido de programas puede utilizar simultáneamente las unidades de modularización definidas globalmente. Estas unidades de modularización se almacenan centralmente en el Repository y se cargan cuando se llaman en el contexto del programa de llamada.
286
© Copyright . Reservados todos los derechos.
Lección: Introducir la modularización
Encapsulación de datos
Figura 122: Separación de datos
This figure shows how a function group and a global class are used to encapsulate data. Using a function group and a global class is the most effective way to encapsulate data. Point out that local modularization techniques also encapsulate data. A detailed explanation of this is given later in another lesson. Lo ideal es que las unidades de modularización a las que se llama no usen los objetos de datos del programa de llamada directamente. Por el contrario, el programa de llamada no cambia directamente los datos en las unidades de modularización. Este principio se conoce como encapsulación de datos. La encapsulación de datos supone una ayuda importante a la hora de desarrollar códigos fuentes transparentes y actualizables. La encapsulación de datos hace que sea más fácil determinar dónde en el programa se ha modificado el contenido de los objetos de datos. Además, la encapsulación de datos garantiza que los datos de las unidades de modularización se modifiquen de modo coherente si, por ejemplo, los contenidos de varios objetos de datos dentro de una unidad de modularización son dependientes mutuamente. Como un ejemplo, considere una unidad de modularización en la que procesa una serie de documentos de facturación. Introducir diferentes números de facturas para los elementos de facturación que pertenecen mutuamente puede tener graves consecuencias. Entonces puede ser difícil para los responsables de la unidad de modularización determinar la causa de la inconsistencia de datos.
© Copyright . Reservados todos los derechos.
287
Capítulo 8: Modularización
Transportes de datos, parámetros e interfaz
Figura 123: Transportes de datos entre el programa y la unidad de modularización
The figure shows the interface and signature of the function group and global class. Point out that the techniques of local modularization also have an interface, or signature. A detailed explanation of this is given later in another lesson. Los parámetros se utilizan para intercambiar datos entre el programa y el módulo. El número total de parámetros de una unidad de modularización se llama interfaz o firma. El desarrollador que define la unidad de modularización también determina los parámetros. Los parámetros se diferencian sobre la base de si se utilizan para lo siguiente: ● Pasar datos a la unidad de modularización (parámetros para import). ●
●
Volver datos desde la unidad de modularización al programa de llamada (parámetros para export). Pasar datos a la unidad de modularización y volver los datos después de que se hayan modificado (parámetros changing).
Consejo: Con las subrutinas (rutinas form), solo están disponibles los parámetros changing y los muy especializados parámetros using, lo que restringe considerablemente las opciones de control del transporte de datos. Por esa razón, utilice las clases locales en la modularización de programas locales, siempre que sea posible.
288
© Copyright . Reservados todos los derechos.
Lección: Introducir la modularización
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Describir los conceptos básicos y un resumen de modularización
© Copyright . Reservados todos los derechos.
289
Capítulo 8 Lección 2 272
Modularización con subrutinas
RESUMEN DE LA LECCIÓN En este módulo se explica cómo utilizar las subrutinas en los programas ABAP. Además, muestra cómo utilizar la interfaz de una subrutina para pasar parámetros y cómo usar varios tipos de transferencia. Ejemplo empresarial Necesita estructurar su programa y encapsular el código fuente para que se ejecute varias veces en una subrutina. Por este motivo, se requieren los siguientes conocimientos: ●
Comprender cómo definir y llamar las subrutinas
●
Comprender la ejecución de subrutinas en modo debugging Using subroutines for modularization is one of the oldest programming techniques in ABAP. Subroutines have a range of shortcomings, especially when used to encapsulate data and pass parameters. It is important to point out to participants that they must not create subroutines in new programs when it can be avoided. Participants must use local classes for local modularization instead. Nevertheless, you still need to explain the basic knowledge in this lesson and practice how to create and use subroutines. A large number of old programs that use subroutines for modularization are still in use. These older programs can be difficult for participants to understand without some knowledge of subroutines.
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Modularizar con subrutinas
How to Use Subroutines Demonstrate the example shown in the figure in a simple report and call the list output several times. If there are participants who have already heard of include technology and want to know more about it, you can explain it briefly. Emphasize that the main program and relevant includes are interpreted as a large single program for the ABAP interpreter at runtime.
290
© Copyright . Reservados todos los derechos.
Lección: Modularización con subrutinas
Programar la modularización interna con subrutinas
Figura 124: Ejemplo simple de una subrutina
Una subrutina es una unidad de modularización dentro de un programa. Para el intérprete ABAP, una subrutina siempre forma parte del programa principal. En el ejemplo anterior de la figura no se utilizan parámetros, lo que hace que la sintaxis de la subrutina sea muy sencilla. Pero una subrutina utiliza normalmente valores de objetos de datos y también los devuelve. En la siguiente figura se muestra cómo se pueden utilizar estas variables en la subrutina.
© Copyright . Reservados todos los derechos.
291
Capítulo 8: Modularización
Definición de parámetros para subrutinas
Figura 125: Transferencia de parámetros: visibilidad de variables globales
Las variables definidas en el programa principal se pueden ver globalmente dentro del programa y se pueden modificar en cualquier punto de este. Esto quiere decir que además las subrutinas definidas en el programa pueden modificar las variables.
292
© Copyright . Reservados todos los derechos.
Lección: Modularización con subrutinas
Transferencia de parámetros: definición de una interfaz
Figura 126: Transferencia de parámetros: definición de una interfaz
Desde una subrutina, puede tratar todas las variables globales definidas en el programa principal. Sin embargo, para llamar una subrutina con objetos de datos diferentes para cada situación, debe utilizar reserva-espacios en lugar de variables globales. Los reserva-espacios se sustituyen por las variables globales requeridas al llamar la subrutina. Estos reservaespacios se llaman parámetros formales y juntos forman la interfaz de subrutina. Es necesario declarar la interfaz en el momento de definir la subrutina. Cuando se llama la subrutina, los parámetros formales deben ser especializados por medio de variables globales correspondientes (parámetros reales). Esta asignación de parámetros reales a parámetros formales al llamar una subrutina se llama transferencia de parámetros.
© Copyright . Reservados todos los derechos.
293
Capítulo 8: Modularización
Formas de transferir parámetros de interfaz
Figura 127: Formas de transferir parámetros de interfaz
La forma en la que se transfieren estas variables de programa principal a los parámetros formales de la subrutina se denomina el tipo de transferencia y se especifica en cada parámetro de la interfaz de la subrutina. Transferir tipos para subrutinas Transferir tipos para subrutinas: Llamar por valor
●
El sistema copia el parámetro real y asigna esta copia al parámetro formal. Por este motivo, todas las asignaciones de valores al parámetro formal correspondiente en la subrutina hacen referencia únicamente a la copia del parámetro real y no al original. Use este tipo de transferencia para poner a disposición de la subrutina el valor de una variable global, en forma de una copia de variable, sin permitir que la subrutina modifique la variable global respectiva. Crear una copia del valor variable protege al original. Sin embargo, la creación de copias, especialmente para tablas internas de gran volumen, puede llevar mucho tiempo. ●
Llamar por valor y resultado El tipo de transferencia de la llamada por valor y resultado es similar al tipo de transferencia de la llamada por valor. Sin embargo, en el final regular de la subrutina, el valor modificado en la copia se vuelve a escribir en el original. Si el programa finaliza prematuramente por una sentencia STOP o un mensaje de usuario de tipo E, se elimina el restablecimiento del valor. Este tipo de transferencia se utiliza para transferir el valor de una variable global a la subrutina y para volver a escribir en el original el valor final completamente procesado de
294
© Copyright . Reservados todos los derechos.
Lección: Modularización con subrutinas
la copia. Sin embargo, crear copias y volver a escribir valores puede llevar mucho tiempo, especialmente en el caso de tablas internas de volumen considerable. ●
Llamar por referencia El sistema asigna el parámetro real directamente al parámetro formal. Esto significa que las asignaciones de valores al parámetro formal se llevan a cabo directamente en el parámetro real. Este tipo de transferencia se utiliza para ejecutar el procesamiento de subrutinas directamente en el parámetro real especificado. Es una manera útil de evitar la creación de copias de tablas internas de volumen considerable, que consume mucho tiempo.
Definición y llamada de subrutinas
Figura 128: Definición y llamada de subrutinas
Defina una subrutina del siguiente modo: 1. Indique una subrutina con FORM. 2. Especifique el nombre y la interfaz de la subrutina después de FORM. A continuación, figuran las sentencias de la subrutina. 3. Concluya la subrutina con la sentencia ENDFORM. En la definición de la interfaz, puede colocar en una lista los parámetros de la subrutina (f1, f2 y f3) y tipificarlos. Especifique el tipo de transferencia requerido para cada parámetro de la siguiente manera: ● Llamar por valor Coloque en una lista cada uno de los parámetros formales que deben tener el tipo de transferencia “llamar por valor” (f1) con el prefijo VALUE en USING. Consulte la figura para conocer la sintaxis.
© Copyright . Reservados todos los derechos.
295
Capítulo 8: Modularización
●
Llamar por valor y resultado Coloque en una lista cada uno de los parámetros formales que deben tener el tipo de transferencia “llamar por valor y resultado” (f2) con el prefijo VALUE en CHANGING. Consulte el gráfico anterior para conocer la sintaxis.
●
Llamar por referencia Coloque en una lista cada uno de los parámetros formales que deben tener el tipo de transferencia “llamar por referencia” (f3) con el prefijo VALUE en CHANGING. Consulte la figura para conocer la sintaxis.
Consejo: Un parámetro colocado en USING sin el prefijo VALUE también tiene el tipo de transferencia “llamar por referencia”. Sin embargo, esta sintaxis de declaración solo tiene sentido para los parámetros formales que se transfieren a tablas internas de mayor volumen. Estos parámetros formales no se cambian en la subrutina (consulte la documentación para USING), pero se transfieren mediante “llamar por referencia” para evitar realizar copias que lleven mucho tiempo. Al llamar la subrutina, los parámetros reales que se transferirán sin el prefijo VALUE están especificados en USING o CHANGING. El orden de especificación determina su asignación a los parámetros formales. En el ejemplo que se muestra en la figura, a se transfiere a f1, b a f2 y c a f3. Asignación de tipo a parámetros de interfaz
Figura 129: Tipificación de los parámetros de interfaz
296
© Copyright . Reservados todos los derechos.
Lección: Modularización con subrutinas
Un parámetro formal se tipifica de forma genérica si se hace mediante TYPE ANY, o no se tipifica en absoluto. Los parámetros reales de cualquier tipo se pueden transferir a un parámetro de este tipo. En tiempo de ejecución, se determina el tipo de parámetro real y se asigna al parámetro formal (herencia de tipo) cuando se llama la subrutina. Sin embargo, si las sentencias de la subrutina no son adecuadas para el tipo heredado, puede producirse un error de tiempo de ejecución (conflicto de tipo). Solo utilice un tipo genérico cuando el tipo del parámetro real no se conoce al crear el programa, o cuando el tipo del parámetro real puede variar en el tiempo de ejecución (programación dinámica). Para implementar la tipificación concreta de un parámetro formal, se especifica un tipo global o integrado en el suplemento TYPE. Al hacerlo, se determina que sólo se puedan transferir a la subrutina los parámetros reales del tipo especificado. La verificación de sintaxis detecta cualquier violación de la consistencia de tipo entre los parámetros formales y reales. La verificación de sintaxis incrementa la estabilidad del programa, ya que previene los conflictos de tipo en sentencias dentro de la subrutina. Si tipifica con los tipos estándares P, N, C o X, la característica 'longitud de campo' que falta solo se transfiere del parámetro real al parámetro formal en tiempo de ejecución. Con estos tipos se consigue la tipificación completa (es decir, incluida la longitud de campo) al definir y especificar tipos definidos localmente.
Consejo: Además de los objetos de datos elementales, ABAP también realiza estructuras y tablas internas. Los parámetros formales para este tipo de objetos de datos se deben tipificar siempre para poder acceder a sus componentes dentro de la subrutina.
Nota: “_” -> “” p = using/passing, “” c = changing
How to Implement Subroutines Enhance the calculator with a percentage calculation function (see model solution BC400_MOS_SUBROUTINE). The participants reproduce this later in an exercise.
© Copyright . Reservados todos los derechos.
297
Capítulo 8: Modularización
Objetos de datos locales y globales
Figura 130: Visibilidad de objetos de datos globales y locales
Las variables definidas en el programa principal son objetos de datos globales. Son visibles y se puede acceder a ellas en todo el programa principal y en cualquier subrutina llamada. Las variables definidas dentro de una subrutina se llaman locales porque existen en la subrutina relevante de la misma forma que los parámetros formales. El espacio de memoria de los parámetros formales y los objetos de datos locales se asigna al llamar la subrutina y se libera de nuevo después de la ejecución.
Nota: “_” -> “” l = local Los parámetros formales y los objetos de datos locales de una subrutina no pueden tener el mismo nombre. Si existe un objeto de datos global con el mismo nombre que un parámetro formal o un objeto de datos local, el parámetro formal o el objeto de datos local se trata dentro de la subrutina y el objeto de datos global se trata fuera de la subrutina. Este proceso se llama regla muestra: dentro de la subrutina, el objeto de datos local es la muestra del global con el mismo nombre. Para identificar sus objetos de programa internos de manera única, utilice los siguientes prefijos para sus objetos de subrutina. g... para objetos de datos globales, p... para parámetros using, c... para parámetros changing e l... para objetos de datos locales.
298
© Copyright . Reservados todos los derechos.
Lección: Modularización con subrutinas
Ejemplo de sintaxis: variable auxiliar local para redondeo
Figura 131: Ejemplo de sintaxis: variables auxiliares locales para redondeo
En el ejemplo de sintaxis que se muestra en la figura, el resultado del cálculo del porcentaje debe redondearse internamente para incluir una posición decimal, pero, sin embargo, aparece con dos decimales. Para ello, se crea una variable local con sólo un decimal y primero se almacena el resultado del cálculo allí. El sistema de tiempo de ejecución redondea el resultado hasta el número entero más próximo de acuerdo con el número disponible de decimales. Al copiar el resultado en el parámetro de retorno, se añade un cero para el segundo decimal.
© Copyright . Reservados todos los derechos.
299
Capítulo 8: Modularización
Llamada de subrutinas
Figura 132: Implementación de una llamada de subrutina
Cuando se llama una subrutina, puede hacer que el workbench ABAP genere la sentencia PERFORM en su código fuente. Defina la subrutina y, a continuación, grabe el programa principal. La subrutina recién definida aparece en el área de navegación. Arrástrela y muévala hacia el punto de llamada necesario de su programa con la función de arrastrar y soltar. A continuación, reemplace los parámetros formales en el código de fuente generado con los parámetros reales correspondientes. De forma alternativa, puede implementar la generación de la llamada mediante el pulsador Patrón en el Editor ABAP. La ventaja de generar la llamada es que de este modo es imposible olvidar o mezclar parámetros.
300
© Copyright . Reservados todos los derechos.
Lección: Modularización con subrutinas
Unidades de modularización en el ABAP Debugger
Figura 133: Subrutinas en modo debugging
Si la sentencia actual es una llamada de subrutina, puede ejecutar toda la subrutina sin detenerse seleccionando el pulsador Ejecutar. El procesamiento se detiene una vez completada la subrutina. Por otro lado, puede utilizar el los pasos individuales para detenerse en la primera sentencia de la subrutina y realizar un seguimiento más detallado de las operaciones. Si la sentencia actual está ubicada en una subrutina, puede ejecutar el resto de la subrutina sin detenerse seleccionando el pulsador Volver. El procesamiento se detiene una vez completada la subrutina. Las funciones de control del ABAP Debugger, incluso paso individual, ejecutar, volver y continuar, también están disponibles en el ABAP clásico.
How to Debug Subroutines Show the demonstration program BC400_MOD_LOCAL_VARIABLES and debug it here. Demonstrate how in the first case it is possible to access the global data object directly, and in the second case how the global data object is shadowed.
© Copyright . Reservados todos los derechos.
301
Capítulo 8: Modularización
302
© Copyright . Reservados todos los derechos.
Capítulo 8 Ejercicio 15 283
Implementar subrutinas
Ejemplo empresarial Modifique el programa de cálculo para los tipos de cálculo básicos de manera que pueda realizar otro cálculo distinto (cálculo de porcentaje) en una subrutina. Modelo: BC400_DOS_COMPUTE Solución: BC400_MOS_SUBROUTINE Crear subrutinas y utilizar la interfaz de subrutina para transferir datos. Tarea 1 Copie el programa ZBC400_##_COMPUTE o el modelo y asígnele el nombre ZBC400_##_SUBROUTINE. 1. Copie su programa o el modelo.
Tarea 2 Cree una subrutina (nombre sugerido: CALC_PERCENTAGE) que lleve a cabo un cálculo de porcentaje mediante dos parámetros de entrada y devuelva el resultado. La subrutina debe calcular el valor porcentual que corresponde al primer parámetro, si el valor del segundo parámetro representa 100%. 1. Al final del programa, cree una subrutina para el cálculo de porcentajes. 2. Defina dos parámetros USING para transferir los operandos (nombres sugeridos: PV_ACT y PV_MAX), así como un parámetro CHANGING para devolver el resultado (nombre sugerido: CV_RESULT). Tipifique los parámetros de forma apropiada a los objetos de datos globales correspondientes del programa principal. Consejo: No puede utilizar tipificación implícita para los parámetros de retorno (TYPE p LENGTH 16 DECIMALS 2). En lugar de ello, declare un tipo de programa local al inicio del programa con la sentencia TYPES. A continuación, podrá utilizar este tipo de programa local para el parámetro real y el parámetro formal. 3. Implemente el cálculo de porcentaje en la subrutina. Asegúrese de evitar el error de dividir entre cero. En este caso, emita un texto de advertencia en la lista.
© Copyright . Reservados todos los derechos.
303
Capítulo 8: Modularización
Tarea 3 Amplíe el programa principal de forma que pueda llamar una nueva subrutina si el usuario indica el operador aritmético “%”. 1. Amplíe la estructura IF o CASE con una bifurcación que se procese cuando el parámetro contenga el valor “%”. 2. En esta bifurcación creada en el paso 1, llame la subrutina y suministre los parámetros con parámetros reales y adecuados. Consejo: Genere la llamada de subrutina mediante la función de arrastrar y soltar en el área de navegación o mediante el pulsador Patrón.
Tarea 4 Realice un test y depure el programa. 1. Ejecute el programa y verifique el resultado. 2. Siga el flujo del programa con el ABAP Debugger. Utilice las teclas de función o los pulsadores adecuados para omitir la subrutina o salir de ella.
304
© Copyright . Reservados todos los derechos.
Capítulo 8 Solución 15 285
Implementar subrutinas
Ejemplo empresarial Modifique el programa de cálculo para los tipos de cálculo básicos de manera que pueda realizar otro cálculo distinto (cálculo de porcentaje) en una subrutina. Modelo: BC400_DOS_COMPUTE Solución: BC400_MOS_SUBROUTINE Crear subrutinas y utilizar la interfaz de subrutina para transferir datos. Tarea 1 Copie el programa ZBC400_##_COMPUTE o el modelo y asígnele el nombre ZBC400_##_SUBROUTINE. 1. Copie su programa o el modelo. a) Visualice su modelo en el área de navegación del Object Navigator. b) Haga clic con el botón derecho en el programa seleccionado para abrir el menú contextual y seleccione Copiar. c) Indique el nombre del programa de destino en la ventana de diálogo siguiente y confirme su entrada con
(Copiar).
d) Seleccione todas las partes del programa mediante la selección con
(Seleccionar todas) y confirme
(Copiar).
e) Asigne este programa a su paquete y a su orden de la forma habitual.
Tarea 2 Cree una subrutina (nombre sugerido: CALC_PERCENTAGE) que lleve a cabo un cálculo de porcentaje mediante dos parámetros de entrada y devuelva el resultado. La subrutina debe calcular el valor porcentual que corresponde al primer parámetro, si el valor del segundo parámetro representa 100%. 1. Al final del programa, cree una subrutina para el cálculo de porcentajes. a) Consulte el extracto del código fuente de la solución modelo. 2. Defina dos parámetros USING para transferir los operandos (nombres sugeridos: PV_ACT y PV_MAX), así como un parámetro CHANGING para devolver el resultado (nombre sugerido: CV_RESULT). Tipifique los parámetros de forma apropiada a los objetos de datos globales correspondientes del programa principal.
© Copyright . Reservados todos los derechos.
305
Capítulo 8: Modularización
Consejo: No puede utilizar tipificación implícita para los parámetros de retorno (TYPE p LENGTH 16 DECIMALS 2). En lugar de ello, declare un tipo de programa local al inicio del programa con la sentencia TYPES. A continuación, podrá utilizar este tipo de programa local para el parámetro real y el parámetro formal. a) Consulte el extracto del código fuente de la solución modelo. 3. Implemente el cálculo de porcentaje en la subrutina. Asegúrese de evitar el error de dividir entre cero. En este caso, emita un texto de advertencia en la lista. a) Consulte el extracto del código fuente de la solución modelo.
Tarea 3 Amplíe el programa principal de forma que pueda llamar una nueva subrutina si el usuario indica el operador aritmético “%”. 1. Amplíe la estructura IF o CASE con una bifurcación que se procese cuando el parámetro contenga el valor “%”. a) Consulte el extracto del código fuente de la solución modelo. 2. En esta bifurcación creada en el paso 1, llame la subrutina y suministre los parámetros con parámetros reales y adecuados. Consejo: Genere la llamada de subrutina mediante la función de arrastrar y soltar en el área de navegación o mediante el pulsador Patrón. a) Consulte el extracto del código fuente de la solución modelo.
Tarea 4 Realice un test y depure el programa. 1. Ejecute el programa y verifique el resultado. a) Lleve a cabo este paso de la manera habitual. 2. Siga el flujo del programa con el ABAP Debugger. Utilice las teclas de función o los pulsadores adecuados para omitir la subrutina o salir de ella. a) Realice este paso tal como se describe en los materiales del curso. Solución: BC400_MOS_SUBROUTINE *&------------------------------------------* *& Report BC400_MOS_SUBROUTINE *&------------------------------------------* REPORT bc400_mos_subroutine. TYPES gty_result TYPE
306
p LENGTH 16 DECIMALS 2.
© Copyright . Reservados todos los derechos.
Lección: Modularización con subrutinas
PARAMETERS: pa_int1 TYPE i, pa_op TYPE c LENGTH pa_int2 TYPE i.
1,
DATA gv_result TYPE gty_result. IF
( pa_op = '+' OR pa_op = '-' OR pa_op = '*' OR pa_op = '/' AND pa_int2 0 OR pa_op = '%' ).
CASE pa_op. WHEN '+'. gv_result = pa_int1 + pa_int2. WHEN '-'. gv_result = pa_int1 - pa_int2. WHEN '*'. gv_result = pa_int1 * pa_int2. WHEN '/'. gv_result = pa_int1 / pa_int2. WHEN '%'. PERFORM calc_percentage USING pa_int1 pa_int2 CHANGING gv_result. ENDCASE. WRITE: 'Result:'(res), gv_result. ELSEIF pa_op = '/' AND pa_int2 = 0. WRITE: 'No division by zero!'(dbz). ELSE. WRITE: 'Invalid operator!'(iop). ENDIF. *&------------------------------------------* *& Form calc_percentage *&------------------------------------------* * Calculate percentage value *&------------------------------------------* * -> PV_ACT actual value * -> PV_MAX maximum value * Grupo de funciones del menú contextual. 2. Introduzca el nombre del nuevo grupo de funciones y seleccione el pulsador Intro o Visualizar. Asegúrese de usar el área de nombres de cliente. Aparece una ventana de diálogo que le pregunta si desea crear el nuevo grupo de funciones. 3. Seleccione Sí para confirmar. Aparece una ventana de diálogo con los atributos del grupo de funciones. 4. Escriba un texto breve y grábelo seleccionando Grabar. 5. Asigne el grupo de funciones a un paquete y una solicitud de workbench de la forma habitual en las ventanas de diálogo que siguen.
Now allow the participants to perform the exercise on creating a function group.
© Copyright . Reservados todos los derechos.
327
Capítulo 8: Modularización
328
© Copyright . Reservados todos los derechos.
Capítulo 8 Ejercicio 17 309
Crear un grupo de funciones
Ejemplo empresarial Su empresa quiere desarrollar una aplicación en la cual se utilicen varias funciones en distintos programas. Le encargan la implementación de las funciones de cálculo. Usted decide programar la aplicación como un grupo de funciones con módulos de funciones. Implemente este proyecto sucesivamente en este ejercicio y en los posteriores ejercicios de esta unidad. Modelo Ninguno Solución BC400_MOS (grupo de funciones) Cree un grupo de funciones. 1. Cree el grupo de funciones ZBC400_##_COMP.
© Copyright . Reservados todos los derechos.
329
Capítulo 8 Solución 17 310
Crear un grupo de funciones
Ejemplo empresarial Su empresa quiere desarrollar una aplicación en la cual se utilicen varias funciones en distintos programas. Le encargan la implementación de las funciones de cálculo. Usted decide programar la aplicación como un grupo de funciones con módulos de funciones. Implemente este proyecto sucesivamente en este ejercicio y en los posteriores ejercicios de esta unidad. Modelo Ninguno Solución BC400_MOS (grupo de funciones) Cree un grupo de funciones. 1. Cree el grupo de funciones ZBC400_##_COMP. a) Realice este paso como se describe en el Manual de participantes.
330
© Copyright . Reservados todos los derechos.
Lección: Implementar módulos de funciones
Creación de módulos de funciones
Figura 143: Creación de un módulo de funciones
Para crear un módulo de funciones, proceda del siguiente modo: 1. Seleccione un nuevo grupo de funciones en donde se creará el nuevo módulo de funciones. 2. Visualice la lista de objetos del grupo de funciones en el área de navegación del Object Navigator. 3. En la estructura de árbol, abra el menú contextual del grupo de funciones y seleccione Crear → Módulo de funciones. Aparece una ventana de diálogo con los atributos del módulo de funciones. 4. Indique un nombre y un texto breve para el módulo de funciones. Asegúrese de utilizar el área de nombres de cliente para los módulos de funciones (los módulos de funciones de cliente empiezan por "Z_" o "Y_"). 5. Seleccione Grabar para grabar sus entradas. 6. Si es necesario, asigne el módulo de funciones a un paquete y una solicitud de workbench en las ventanas de diálogo que siguen.
© Copyright . Reservados todos los derechos.
331
Capítulo 8: Modularización
Edición del código fuente
Figura 144: Edición del código fuente
Después de definir los parámetros IMPORTING y EXPORTING correspondientes, puede pasar a la etiqueta Código fuente para implementar las funciones del módulo de funciones.
Consejo: La Biblioteca de funciones crea el bloque de comentarios que se encuentra directamente debajo de la palabra clave FUNCTION y lo modifica cuando se realizan cambios en los parámetros.
Para crear un módulo de funciones Para crear el módulo de funciones, proceda del siguiente modo: 1. Seleccione un nuevo grupo de funciones en donde se creará el nuevo módulo de funciones. 2. Visualice la lista de objetos del grupo de funciones en el área de navegación del Object Navigator. 3. En la estructura de árbol, abra el menú contextual del grupo de funciones y seleccione Crear → Módulo de funciones. Aparece una ventana de diálogo con los atributos del módulo de funciones. 4. Indique un nombre y un texto breve para el módulo de funciones. Asegúrese de utilizar el área de nombres de cliente para los módulos de funciones (los módulos de funciones de cliente empiezan por "Z_" o "Y_"). 5. Seleccione Grabar para grabar sus entradas.
332
© Copyright . Reservados todos los derechos.
Lección: Implementar módulos de funciones
6. Si es necesario, asigne el módulo de funciones a un paquete y una solicitud de workbench en las ventanas de diálogo que siguen.
How to Create a Function Module Demonstrate the steps of the section.
© Copyright . Reservados todos los derechos.
333
Capítulo 8: Modularización
334
© Copyright . Reservados todos los derechos.
Capítulo 8 Ejercicio 18 315
Crear un módulo de funciones
Ejemplo empresarial Quiere crear un nuevo módulo de funciones global para calcular valores porcentuales. Esto está pensado para sustituir la subrutina de un ejercicio anterior. Modelo BC400_MOS_FUNCTION_MODULE_1 (programa) Solución BC400_MOS_FUNCTION_MODULE_2 (programa) BC400_MOS_PERCENTAGE (módulo de funciones) Crear y utilizar un módulo de funciones. Tarea 1 En el grupo de funciones definido en el último ejercicio (ZBC400_##_COMP), cree un módulo de funciones con el nombre Z_BC400_##_COMP_PERCENTAGE que se pueda utilizar para calcular valores porcentuales. 1. Cree el módulo de funciones. 2. Actualice la interfaz para el módulo de funciones. Para ello, cree los parámetros siguientes y tipifíquelos con los elementos de datos especificados: Nombre de parámetro
Tipo de parámetro
Elemento de datos
iv_max
Importar
BC400_MAX
iv_act
Importar
BC400_ACT
ev_percentage
Exportar
BC400_PERC
3. Cree una excepción que se emita cuando el resultado de los valores transferidos es una división entre cero (nombre sugerido: DIVISION_BY_ZERO). 4. Implemente el módulo de funciones. Utilice la subrutina del modelo para orientarse. Si se produce un error, emita la excepción en lugar de emitir un texto de error. Consejo: Para emitir la excepción, utilice la sentencia RAISE .
Tarea 2
© Copyright . Reservados todos los derechos.
335
Capítulo 8: Modularización
Copie el programa ZBC400_##_FUNCTION_MODULE o el modelo al nuevo nombre ZBC400_##_FUNCTION_MODULE_2 y sustituya la llamada de subrutina por una llamada del nuevo módulo de funciones. 1. Copie el programa. 2. Elimine la llamada de subrutina e implemente una llamada para el nuevo módulo de funciones en su lugar. Consejo: Genere la llamada de módulo de funciones mediante la función de arrastrar y soltar en el área de navegación o mediante el pulsador Patrón. 3. Controle la excepción y emita un texto correspondiente si se produce un error.
336
© Copyright . Reservados todos los derechos.
Capítulo 8 Solución 18 317
Crear un módulo de funciones
Ejemplo empresarial Quiere crear un nuevo módulo de funciones global para calcular valores porcentuales. Esto está pensado para sustituir la subrutina de un ejercicio anterior. Modelo BC400_MOS_FUNCTION_MODULE_1 (programa) Solución BC400_MOS_FUNCTION_MODULE_2 (programa) BC400_MOS_PERCENTAGE (módulo de funciones) Crear y utilizar un módulo de funciones. Tarea 1 En el grupo de funciones definido en el último ejercicio (ZBC400_##_COMP), cree un módulo de funciones con el nombre Z_BC400_##_COMP_PERCENTAGE que se pueda utilizar para calcular valores porcentuales. 1. Cree el módulo de funciones. a) Realice este paso como se describe en el Manual de participantes. 2. Actualice la interfaz para el módulo de funciones. Para ello, cree los parámetros siguientes y tipifíquelos con los elementos de datos especificados: Nombre de parámetro
Tipo de parámetro
Elemento de datos
iv_max
Importar
BC400_MAX
iv_act
Importar
BC400_ACT
ev_percentage
Exportar
BC400_PERC
a) Realice este paso como se describe en el Manual de participantes. 3. Cree una excepción que se emita cuando el resultado de los valores transferidos es una división entre cero (nombre sugerido: DIVISION_BY_ZERO). a) Realice este paso como se describe en el Manual de participantes. 4. Implemente el módulo de funciones. Utilice la subrutina del modelo para orientarse. Si se produce un error, emita la excepción en lugar de emitir un texto de error.
© Copyright . Reservados todos los derechos.
337
Capítulo 8: Modularización
Consejo: Para emitir la excepción, utilice la sentencia RAISE .
a) Consulte el extracto del código fuente de la solución modelo.
Tarea 2 Copie el programa ZBC400_##_FUNCTION_MODULE o el modelo al nuevo nombre ZBC400_##_FUNCTION_MODULE_2 y sustituya la llamada de subrutina por una llamada del nuevo módulo de funciones. 1. Copie el programa. a) Realice este paso de la forma habitual. 2. Elimine la llamada de subrutina e implemente una llamada para el nuevo módulo de funciones en su lugar. Consejo: Genere la llamada de módulo de funciones mediante la función de arrastrar y soltar en el área de navegación o mediante el pulsador Patrón. a) Consulte el extracto del código fuente de la solución modelo. 3. Controle la excepción y emita un texto correspondiente si se produce un error. a) Consulte el extracto del código fuente de la solución modelo. Extracto del código fuente *&----------------------------------------* *& Report BC400_MOS_FUNCTION_MODULE_2 *&----------------------------------------* REPORT bc400_mos_function_module_2. PARAMETERS: pa_int1 pa_op pa_int2
TYPE i, TYPE c LENGTH TYPE i.
DATA gv_result TYPE p LENGTH IF
( pa_op = pa_op = pa_int2 pa_op =
CASE pa_op. WHEN '+'. gv_result WHEN '-'. gv_result WHEN '*'. gv_result WHEN '/'. gv_result
'+' '*' 'P'
338
1,
16 DECIMALS
2.
OR pa_op = '-' OR OR pa_op = '/' AND 0 OR pa_op = '%' OR ).
= pa_int1
+ pa_int2.
= pa_int1
- pa_int2.
= pa_int1
* pa_int2.
= pa_int1
/ pa_int2.
© Copyright . Reservados todos los derechos.
Lección: Implementar módulos de funciones
WHEN 'P'. CALL FUNCTION 'BC400_MOS_POWER' EXPORTING iv_base = pa_int1 iv_power = pa_int2 IMPORTING ev_result = gv_result EXCEPTIONS power_value_too_high = 1 result_value_too_high = 2 OTHERS = 3. CASE sy-subrc. WHEN 0. * no action needed WHEN 1. WRITE 'Max value of power is 4'(mvp). WHEN 2. WRITE 'Result value too high'(rvh). WHEN 3. WRITE 'Unknown error'(uer). ENDCASE. WHEN '%'. CALL FUNCTION 'BC400_MOS_PERCENTAGE' EXPORTING iv_act = pa_int1 iv_max = pa_int2 IMPORTING ev_percentage = gv_result EXCEPTIONS division_by_zero = 1 OTHERS = 2. IF sy-subrc 0. WRITE 'Error in Function Module' (efm). ENDIF. ENDCASE. WRITE: 'Result:'(res), gv_result. ELSEIF pa_op = '/' AND pa_int2 = 0. WRITE: 'No division by zero!'(dbz). ELSE. WRITE: 'Invalid operator!'(iop). ENDIF. * Source code extract from the function module: FUNCTION BC400_MOS_PERCENTAGE. *&------------------------------------------------* * IMPORTING * REFERENCE(IV_ACT) TYPE BC400_ACT * REFERENCE(IV_MAX) TYPE BC400_MAX * EXPORTING * REFERENCE(EV_PERCENTAGE) TYPE BC400_PERC * EXCEPTIONS * DIVISION_BY_ZERO *&------------------------------------------------* * Error handling IF iv_max = 0. ev_percentage = 0. RAISE division_by_zero. ELSE. * Calculate result
© Copyright . Reservados todos los derechos.
339
Capítulo 8: Modularización
ev_percentage = iv_act / iv_max * 100. ENDIF. ENDFUNCTION.
340
© Copyright . Reservados todos los derechos.
Lección: Implementar módulos de funciones
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Crear grupos de funciones
●
Crear módulos de funciones
© Copyright . Reservados todos los derechos.
341
Capítulo 8 Lección 5 322
Modularización con BAPI
RESUMEN DE LA LECCIÓN En este módulo se presenta la Business Application Programming Interface (BAPI). Ejemplo empresarial Está trabajando en el sistema SAP y desea acceder a datos. Esto puede realizarse con la ayuda de una BAPI. Por este motivo, se requieren los siguientes conocimientos: ●
Comprender las BAPI
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Modularizar con BAPI
Business Application Programming Interface (BAPI)
Figura 145: Business objects y BAPIs
El Business Object Repository (BOR) del sistema SAP contiene business objects. Un business object es una clase y corresponde a una tabla o a una jerarquía de tablas SAP. Un business object tiene BAPI como métodos. Puede utilizar estas BAPIs para acceder a las tablas correspondientes. Una BAPI es una forma de acceder a datos del sistema SAP.
342
© Copyright . Reservados todos los derechos.
Lección: Modularización con BAPI
Las BAPI existen generalmente para las siguientes funciones de un business object: ● Crear un objeto ●
Obtener atributos de objetos
●
Modificar atributos de objetos
●
Listar objetos
Las funciones de una BAPI se encapsulan en un módulo de funciones que se puede llamar de forma remota. Por este motivo, tanto programas ABAP del mismo sistema SAP como programas externos pueden llamarlas. Uso de las BAPI
Figura 146: Uso de BAPIs
En la figura se muestra cómo se pueden utilizar las BAPI. Existen métodos estándares en forma de BAPIs con nombres estandarizados. BAPI estándar: ●
GetList Todas las BAPIs GetList devuelven una lista de objetos disponibles que cumplen los criterios de selección especificados.
●
GetDetail Todas las BAPIs GetList devuelven información detallada (atributos) de un objeto (es necesario especificar la clave completa).
●
Create, Change, Delete, Cancel Todas las BAPIS Create, Change, Delete, Cancel permiten crear, modificar y eliminar objetos.
© Copyright . Reservados todos los derechos.
343
Capítulo 8: Modularización
●
AddItem, RemoveItem Todas las BAPIS AddItem, RemoveItem añaden y eliminan subobjetos (por ejemplo, un elemento de una orden).
BAPI Explorer
Figura 147: BAPI Explorer
Puede utilizar el BAPI Explorer para listar business objects así como las BAPI correspondientes de cada aplicación. Para llamar el BAPI Explorer, utilice el siguiente acceso vía menú SAP Easy Access: Herramientas → Business Framework → BAPI Explorer o la transacción BAPI. Una vez encontrado el business object o BAPI requeridos, puede visualizar los detalles relevantes en el lado derecho de la pantalla seleccionando la BAPI. Puede navegar hacia su pantalla con la Biblioteca de funciones haciendo doble clic en el módulo de funciones visualizado.
344
© Copyright . Reservados todos los derechos.
Lección: Modularización con BAPI
Propiedades de un módulo de funciones BAPI
Figura 148: Propiedades de un módulo de funciones BAPI
Los módulos de funciones para BAPIs deben cumplir los siguientes requisitos técnicos: Convención para fijar nombres: BAPI
●
●
Capacidad remota
●
Sin diálogos ni mensajes del usuario
●
Prefijo de nombre para estas estructuras BAPI: BAPI Los parámetros de interfaz están tipificados con componentes de estructuras del Dictionary ABAP creados para esta BAPI.
●
Sin parámetros changing hasta el Release 4.6
●
No emitir excepciones Se informa de los errores al usuario mediante el parámetro para export especial RETURN.
© Copyright . Reservados todos los derechos.
345
Capítulo 8: Modularización
Llamada BAPI en un programa ABAP
Figura 149: Llamada BAPI en un programa ABAP
Para utilizar una BAPI dentro del mismo sistema SAP, debe llamar directamente el módulo de funciones relevante. Tenga en cuenta las restricciones mencionadas en las Propiedades de una BAPI en la sección de módulo de funciones.
Consejo: Las interfaces BAPI se crean de acuerdo con requisitos de llamada externos; es decir, llamadas de un sistema externo. Por este motivo, se espera recibir los importes en un formato externo con 4 o 9 decimales. Durante la llamada, los importes se deben transferir a la interfaz en un formato convertido de forma adecuada, incluso si la moneda correspondiente no tiene decimales. Para realizar esta conversión o reconversión, puede utilizar los módulos de funciones del grupo de funciones BACV (paquete SBF_BAPI).
RESUMEN DE LA LECCIÓN Ahora podrá: ●
346
Modularizar con BAPI
© Copyright . Reservados todos los derechos.
Capítulo 8 Lección 6 327
Modularizar con clases globales
RESUMEN DE LA LECCIÓN En este módulo se presenta otra técnica de modularización para todos los programas: la llamada de métodos de clases globales. Como con los grupos de funciones y módulos de funciones, primero se busca, se analiza, se realizan test y se utilizan clases y métodos existentes. Además, crearemos una clase global con un método simple. Este módulo no está diseñado para proporcionar una introducción exhaustiva de la programación con ABAP orientada a objetos. Familiarícese con los términos básicos de la programación orientada a objetos para poder utilizar las funciones de las clases globales existentes en sus programas. Ejemplo empresarial En su programa, necesita una función que puede que ya exista en forma de método de clase global. Desea usar este método en el programa. Si la función todavía no existe o no cumple todos los requisitos, necesita crear su propio método y clase global. Por este motivo, se requieren los siguientes conocimientos: ●
●
Comprender los términos básicos de la programación orientada a objetos Comprender cómo adquirir información acerca de la función y el uso de clases globales y sus métodos
●
Comprender la llamada de clases globales en sus programas
●
Comprender cómo crear clases globales
●
Comprender cómo crear e implementar métodos simples en clases globales Object-oriented terminology is only introduced at a level that is absolutely necessary for using existing global classes. The follow-up course BC401 - ABAP Objects offers a detailed introduction to object-oriented programming with ABAP Objects.
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Describir la programación orientada a objetos
●
Utilizar los métodos de clases globales
●
Tratar instancias
© Copyright . Reservados todos los derechos.
347
Capítulo 8: Modularización
Principios de la programación orientada a objetos
Figura 150: Representación de una clase global
Antes de utilizar clases globales y métodos, necesita saber algunos términos básicos que se utilizan en la programación orientada a objetos. Ha leído sobre los grupos de funciones que ponen a disposición unidades que se pueden reutilizar en la forma de módulos de funciones. Las ampliaciones orientadas a objetos en ABAP han introducido el uso de clases globales, que ponen a disposición funciones en la forma de métodos. Igual que los módulos de funciones, los métodos también tienen una interfaz, conocida como firma, que incluye parámetros para import, para export, parámetros changing y excepciones. Las clases tienen otros componentes, además de los métodos. Por ejemplo, las clases contienen objetos de datos globales conocidos como atributos. Del mismo modo que todos los módulos de funciones pueden acceder a los objetos de datos globales en un grupo de función, todos los métodos de una clase pueden acceder a los atributos de esa clase.
348
© Copyright . Reservados todos los derechos.
Lección: Modularizar con clases globales
Ejemplo de opciones de acceso de una clase global
Figura 151: Ejemplo de opciones de acceso de una clase global
Los objetos de datos globales dentro del grupo de funciones no están visibles fuera de este. Esto se conoce como encapsulación de datos en el grupo de funciones. Los atributos se encapsulan generalmente en la clase y, por este motivo, solo se pueden leer o modificarse con métodos de la misma clase. Al contrario que los módulos de funciones, las clases permiten hacer que algunos atributos específicos sean visibles para los usuarios de la clase. Por este motivo, se distingue entre atributos públicos y privados. Puede aplicar la distinción pública y privada no solo a los atributos, sino también a los métodos. Mientras que todos los módulos de funciones se pueden llamar desde fuera del grupo de funciones, solo los métodos públicos se encuentran disponibles fuera de la clase. Únicamente los métodos de la misma clase pueden llamar métodos privados y se parecen más en este aspecto a las subrutinas de un grupo de funciones.
© Copyright . Reservados todos los derechos.
349
Capítulo 8: Modularización
Instanciación múltiple de clases
Figura 152: Clases y objetos
La principal diferencia entre clases globales y grupos de funciones es que un grupo de funciones con sus objetos de datos globales solo puede cargarse una vez en el contexto de programa para cada programa principal, mientras que una clase global se puede cargar tantas veces como lo desee. Esto se conoce como instanciación múltiple de la clase. Los valores en los objetos de datos globales de un grupo de funciones son los mismos para todas las llamadas de módulos de funciones. Por el contrario, una clase puede tener varias instancias (también conocidas como objetos), cada una de las cuales se almacena por separado en el contexto del programa principal. Por este motivo, cada instancia puede tener distintos valores de atributo. Por consecuencia, un método observa distintos valores en los atributos, dependiendo de la instancia para la cual se ha llamado. Es necesario generar una instancia de clase explícitamente en el código fuente ABAP mediante la sentencia CREATE OBJECT. Componentes de instancia y componentes estáticos Los atributos que pueden tener un valor distinto para cada instancia se conocen como atributos de instancia, para distinguirlos de los atributos estáticos o atributos de clase. Los atributos estáticos sólo existen una vez para cada contexto de programa, independientemente del número de instancias de clase que se generen durante la ejecución del programa. Si los métodos de instancia acceden a un atributo estático, todas las instancias leen el mismo valor. Un método de instancia puede modificar el valor. Todas las otras instancias, entonces, leen el nuevo valor. Para los métodos se distingue entre métodos estáticos y métodos de instancia. La diferencia principal es que solo se puede llamar un método de instancia si previamente se ha creado una instancia de clase. En comparación, los métodos estáticos se pueden llamar sin instanciación previa de la clase.
350
© Copyright . Reservados todos los derechos.
Lección: Modularizar con clases globales
Consejo: Este curso se centra principalmente en los métodos estáticos.
The course 401 – ABAP Objects offers a comprehensive and systematic introduction to working with instance methods.
Atributos de clases globales
Figura 153: Definición de atributos
Como con otros objetos de Repository, la visualización y el procesamiento de clases globales se incorpora en el Object Navigator. Tiene varias opciones para abrir una clase global. En el área de navegación, por ejemplo, seleccione Clase/Interfaz e indique el nombre de la clase en el campo de entrada directamente debajo del nombre. También puede visualizar primero la lista de objetos de un paquete y, a continuación, hacer doble clic en el nombre de la clase requerida en el subnodo Biblioteca de clases → Clases. Seleccione la etiqueta Atributos para abrir la lista de definiciones de atributos en la clase. Si solo desea utilizar la clase, solo los atributos que son públicos son de interés. Puede hacer referencia a estos atributos directamente fuera de la clase.
© Copyright . Reservados todos los derechos.
351
Capítulo 8: Modularización
Métodos y firma
Figura 154: Definición de métodos
Seleccione la etiqueta Métodos para abrir la lista de todas las definiciones de métodos de la clase. También con los métodos, solo serán de su interés las entradas identificadas como públicas. Solo estos métodos públicos pueden llamarse de forma externa; todos los otros métodos se utilizan para modularización dentro de la clase global. Un método identificado como un método estático puede llamarse directamente, sin la necesidad de generar primero una instancia de la clase. Con métodos de instancia, necesita crear una instancia y, a continuación, llamar el método específicamente para esa instancia. En circunstancias normales, el método de instancia accederá a los atributos de instancia que contienen diferentes valores para las distintas instancias. Parámetros de método
Figura 155: Parámetros de método
352
© Copyright . Reservados todos los derechos.
Lección: Modularizar con clases globales
Los parámetros para un método se visualizan en una ventana independiente. Para acceder a la ventana, sitúe el cursor en el método requerido y haga clic en el pulsador Parámetro desde la lista de métodos. Al contrario que con los módulos de función, no existe una lista independiente para los parámetros para export, para import y los parámetros changing. En su lugar, el tipo de parámetro se indica en la columna Tipo. Excepciones de método
Figura 156: Excepciones de método
Debe navegar a una ventana de visualización independiente para visualizar las excepciones de un método. Para acceder a ella, sitúe el cursor en el método requerido y haga clic en el pulsador Excepciones desde la lista de métodos. Basis Release 6.10 introdujo excepciones basadas en clases en ABAP. El control de estas excepciones es muy distinto del control de las excepciones clásicas de los módulos de funciones. Un método puede emitir o sólo excepciones basadas en clase nuevas o sólo excepciones clásicas. No es posible mezclar ambos conceptos. Una casilla de selección le muestra qué concepto de excepción utiliza el método respectivo. Mientras el método de excepción clásico le permite seleccionar cualquier identificador de excepción, con el nuevo concepto de excepción, debe especificar los nombres de clases especiales, las clases de excepción.
Consejo: El concepto de excepción basada en clases también se encuentra disponible para módulos de funciones.
© Copyright . Reservados todos los derechos.
353
Capítulo 8: Modularización
Documentación y realizar test de las clases globales
Figura 157: El entorno de test del generador de clases
Con la documentación de clase global, se distingue entre la documentación de clases en conjunto y la documentación de componentes individuales. Puede acceder a la documentación de clase seleccionando el pulsador Documentación de clase. Para consultar la documentación de un método o atributo individuales, navegue hasta la lista correspondiente, seleccione el componente requerido con el cursor y presione el pulsador
Documentación.
Puede realizar test de clases globales activas. El almacenamiento temporal se asigna a los componentes de la clase. Para los componentes estáticos, se asigna inmediatamente, mientras que para los componentes de instancia, el sistema solo asigna el almacenamiento después de seleccionar el pulsador Instancia. El sistema enumera únicamente los componentes públicos. Puede realizar test de los métodos mediante el pulsador Ejecutar método. No es necesario que genere una instancia para realizar test de un método estático. Puede ejecutar el método estático inmediatamente. Todo parámetros para import existentes aparece en la pantalla después de seleccionar el pulsador Ejecutar. Después de suministrar los parámetros con valores, puede realizar test del método. El sistema muestra a continuación el resultado del parámetro para export.
354
© Copyright . Reservados todos los derechos.
Lección: Modularizar con clases globales
Llamada de métodos estáticos
Figura 158: Llamadas de método mediante la función de arrastrar y soltar
Utilice la sentencia CALL METHOD para llamar un método y, a continuación, especifique el método. Debe distinguir entre un método de instancia y un método estático. Con los métodos estáticos, esta especificación comprende el nombre de la clase y el método, separados por el selector de componente estático “=>” (flecha de dos puntas). Los parámetros se pasan a continuación a la llamada de módulo de funciones tanto en un bloque EXPORTING como en un bloque IMPORTING. Igual que con los módulos de funciones, tiene varias opciones para generar la llamada de método. SAP recomienda utilizar estas opciones para evitar errores de escritura. En el área de navegación, seleccione un nombre de método y arrástrelo al área de tratamiento manteniendo pulsado el botón izquierdo del ratón. En la sentencia que se genera de este modo, solo necesita agregar los parámetros reales. De manera alternativa, también puede seleccionar el pulsador Patrón. Localice la opción Método de llamada debajo de Patrón de objetos ABAP. Indique la clase en Clase/Interfaz y el nombre del método en Método. No es necesario rellenar el campo Instancia con métodos estáticos.
How to Call a Static Method Demonstrate the drag-and-drop option and the Pattern pushbutton.
Tratamiento de excepciones Los métodos pueden emitir excepciones clásicas o bien excepciones basadas en clase. Las excepciones clásicas se controlan del mismo modo que los módulos de funciones.
© Copyright . Reservados todos los derechos.
355
Capítulo 8: Modularización
Tratar excepciones clásicas CALL METHOD cl_bc400_compute=>get_power EXPORTING iv_base = pa_int1 iv_power = pa_int2 IMPORTING ev_result = gv_result EXCEPTIONS POWER_VALUE_TOO_HIGH = 1 RESULT_VALUE_TOO_HIGH = 2. CASE sy-subrc. WHEN 0. WRITE gv_result. WHEN 1. WRITE 'Max Value for Power is 4'. WHEN 2. WRITE 'Result value was too high'. ENDCASE. En el bloque EXCEPTIONS de la llamada de método, asigna un código de retorno a la excepción. Cuando el método termina con esta excepción clásica, este código de retorno se sitúa en el campo de sistema sy-subrc. Si se realiza una consulta de sy-subrc, el programa de llamada puede reaccionar a la excepción. En comparación, el control de las excepciones basadas en clase es mucho más complejo. Tratamiento de excepciones basadas en clases
TRY.
CALL METHOD cl_bc400_compute=>get_power EXPORTING iv_base = pa_int1 iv_power = pa_int2 IMPORTING ev_result = gv_result. WRITE gv_result. CATCH cx_bc400_power_too_high . WRITE 'Max Value for Power is 4'. CATCH cx_bc400_result_too_high . WRITE 'Result value was too high'. ENDTRY. La llamada se debe vincular entre las sentencias TRY. y ENDTRY. La excepción se trata a continuación en un bloque de procesamiento que comienza con la sentencia CATCH . (donde representa la clase de excepción que se tratará). Si la excepción correspondiente se emite dentro del bloque TRY-ENDTRY, se termina el procesamiento y el programa bifurca directamente al bloque CATCH relevante.
356
© Copyright . Reservados todos los derechos.
Lección: Modularizar con clases globales
Control de excepciones con clases de excepción
Figura 159: Control de excepciones con clases de excepción
Si genera llamadas de métodos mediante la función arrastrar y soltar, o mediante el pulsador Patrón, el sistema genera también las sentencias para tratar las excepciones basadas en clase. A continuación, debe eliminar los comentarios e implementar los bloques CATCH. Class-based exceptions offer a variety of other options and are much more powerful and versatile than classic exceptions. This course is limited to minimal handling of class-based exceptions. Other aspects of class-based exceptions are presented in course BC401 -ABAP Objects, for example.
This is a good time to ask the participants to complete Exercise 10 Use a Global Static Method.
© Copyright . Reservados todos los derechos.
357
Capítulo 8: Modularización
358
© Copyright . Reservados todos los derechos.
Capítulo 8 Ejercicio 19 339
Utilizar un método global estático
Ejemplo empresarial Desea utilizar un método estático de una clase global para calcular potencias. Este ejercicio está pensado para sustituir la llamada de módulo de funciones de un ejercicio anterior. Modelo BC400_MOS_FUNCTION_MODULE_2 (programa) Solución BC400_MOS_GLOBAL_CLASS_1 (programa) Llamar un método estático de una clase global.
Tarea 1 Abra la clase global CL_BC400_COMPUTE y familiarícese con la interfaz y el alcance de las funciones del método o métodos que contenga. 1. Analice la interfaz del método get_power y lea la documentación acerca de la clase. 2. Realice un test del método estático get_power.
Tarea 2 Copie el programa ZBC400_##_FUNCTION_MODULE_2 o el modelo de copia con el nuevo nombre ZBC400_##_GLOBAL_CLASS_1 y sustituya la llamada de módulo de funciones al cálculo de potencias por una llamada al método get_power. 1. Copie su programa o el modelo. 2. Elimine la llamada del módulo de funciones BC400_MOS_POWER e implemente una llamada del método cl_bc400_compute=>get_power en el mismo lugar. Consejo: Genere la llamada de método mediante la función de arrastrar y soltar en el área de navegación o mediante el pulsador Patrón. 3. Controle las excepciones y emita un texto relevante si se produce un error.
© Copyright . Reservados todos los derechos.
359
Capítulo 8 Solución 19 340
Utilizar un método global estático
Ejemplo empresarial Desea utilizar un método estático de una clase global para calcular potencias. Este ejercicio está pensado para sustituir la llamada de módulo de funciones de un ejercicio anterior. Modelo BC400_MOS_FUNCTION_MODULE_2 (programa) Solución BC400_MOS_GLOBAL_CLASS_1 (programa) Llamar un método estático de una clase global.
Tarea 1 Abra la clase global CL_BC400_COMPUTE y familiarícese con la interfaz y el alcance de las funciones del método o métodos que contenga. 1. Analice la interfaz del método get_power y lea la documentación acerca de la clase. a) Realice este paso tal como se describe en los materiales del curso. 2. Realice un test del método estático get_power. a) Realice este paso tal como se describe en los materiales del curso.
Tarea 2 Copie el programa ZBC400_##_FUNCTION_MODULE_2 o el modelo de copia con el nuevo nombre ZBC400_##_GLOBAL_CLASS_1 y sustituya la llamada de módulo de funciones al cálculo de potencias por una llamada al método get_power. 1. Copie su programa o el modelo. a) Realice este paso de la forma habitual. 2. Elimine la llamada del módulo de funciones BC400_MOS_POWER e implemente una llamada del método cl_bc400_compute=>get_power en el mismo lugar. Consejo: Genere la llamada de método mediante la función de arrastrar y soltar en el área de navegación o mediante el pulsador Patrón. a) Véase el extracto del código fuente de la solución modelo. 3. Controle las excepciones y emita un texto relevante si se produce un error.
360
© Copyright . Reservados todos los derechos.
Lección: Modularizar con clases globales
a) Véase el extracto del código fuente de la solución modelo. Extracto del código fuente REPORT BC400_MOS_GLOBAL_CLASS_2. PARAMETERS: pa_int1 TYPE i, pa_op TYPE c LENGTH pa_int2 TYPE i. DATA gv_result TYPE p LENGTH
1,
16 DECIMALS
2.
IF
( pa_op = '+' OR pa_op = '-' OR pa_op = '*' OR pa_op = '/' AND pa_int2 0 OR pa_op = '%' OR pa_op = 'P' ). CASE pa_op. WHEN '+'. gv_result = pa_int1 + pa_int2. WHEN '-'. gv_result = pa_int1 - pa_int2. WHEN '*'. gv_result = pa_int1 * pa_int2. WHEN '/'. gv_result = pa_int1 / pa_int2. WHEN 'P'. TRY. CALL METHOD cl_bc400_compute=>get_power EXPORTING iv_base = pa_int1 iv_power = pa_int2 IMPORTING ev_result = gv_result. CATCH cx_bc400_power_too_high . WRITE 'Max value of Power is 4'(mvp). CATCH cx_bc400_result_too_high . WRITE 'Result value was too high'(rvh). ENDTRY. WHEN '%'. CALL METHOD cl_bc400_mos_compute=>get_percentage EXPORTING iv_act = pa_int1 iv_max = pa_int2 IMPORTING ev_percentage = gv_result. ENDCASE. WRITE: 'Result:'(res), gv_result. ELSEIF pa_op = '/' AND pa_int2 = 0. WRITE: 'No division by zero!'(dbz). ELSE. WRITE: 'Invalid operator!'(iop). ENDIF. Extracto del código fuente del método: METHOD GET_PERCENTAGE. *Simple error handling IF iv_max = 0. ev_percentage = 0. ELSE. * Calculate result ev_percentage = iv_act / iv_max * 100. ENDIF. ENDMETHOD.
© Copyright . Reservados todos los derechos.
361
Capítulo 8: Modularización
Creación de instancia y llamada de métodos de instancia
Figura 160: Creación de objetos y llamada de métodos
Dado que las instancias no tienen nombres, debe definir las variables de referencia para crear y dirigirse a las instancias de clases. Las variables de referencia son punteros que pueden dirigirse a las instancias correspondientes. Cada variable de referencia tiene un nombre que se puede utilizar para dirigirse a la instancia correspondiente. Las variables de referencia se definen mediante DATA reference_name TYPE REF TO class_name. Cuando se inicia el programa, una variable de referencia todavía tiene su valor inicial (no señala a ninguna instancia). Después de que se haya utilizado para crear una instancia, la variable de referencia ya no tiene el valor inicial y señala a esa instancia. Puede utilizar la sentencia CREATE OBJECT reference_name para crear una instancia de la clase que se especificó en la definición de las variables de referencia. Después de ello, la variable de referencia señala a la instancia recién creada. Cuando utilice CREATE OBJECT, es posible que deba suministrar datos a los parámetros para import del método especial CONSTRUCTOR. Este método especial se ejecuta de forma automática inmediatamente después de la creación de la instancia. Con sus parámetros para import, este método especial actualiza los atributos correspondientes de la nueva instancia. Los métodos de una instancia se llaman mediante la sentencia CALL METHOD reference_name->method_name. A diferencia de cuando llama un módulo de funciones, en este caso, no es suficiente con especificar solo el nombre de método. Debe especificar las instancias relevantes también, porque el programa puede tener varias instancias de esa clase.
362
© Copyright . Reservados todos los derechos.
Lección: Modularizar con clases globales
How to Work with Instances Demonstrate the CL_BC400_COMPUTE_INST global class and describe its use in program BC400_MOD_GLOBAL_CLASS_INST. If the participants understand the subject matter well, and you have time, you can also demonstrate how it is used.
© Copyright . Reservados todos los derechos.
363
Capítulo 8: Modularización
RESUMEN DE LA LECCIÓN Ahora podrá:
364
●
Describir la programación orientada a objetos
●
Utilizar los métodos de clases globales
●
Tratar instancias
© Copyright . Reservados todos los derechos.
Capítulo 8 Lección 7 344
Implementación de clases globales simples y métodos estáticos
RESUMEN DE LA LECCIÓN En este módulo se explica cómo crear una clase global con un método para encapsular una función para reutilizarla. Esta lección se limita a la creación de un método estático. Ejemplo empresarial Su empresa quiere desarrollar una aplicación en la cual se utilicen varias funciones en distintos programas. Le encargan la implementación de las funciones de cálculo. Usted decide programarla como una clase global con métodos estáticos. Por este motivo, se requieren los siguientes conocimientos: ●
Comprender cómo crear clases globales y métodos estáticos Point out that the advantages of using methods instead of function modules can only be seen when you use specific, object-oriented techniques, such as multiple instantiation. Limit yourselves to creating static methods.
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Crear clases globales simples
© Copyright . Reservados todos los derechos.
365
Capítulo 8: Modularización
Creación de clases globales
Figura 161: Creación de clases globales en el Object Navigator
Para crear una clase global, abra el menú contextual del paquete en el área de navegación y seleccione Crear → Biblioteca de clases → Clase. Indique el nombre de la clase, una breve descripción de la clase y otras propiedades en la ventana de diálogo que aparece. Después de grabar sus entradas, asígnela a una solicitud de workbench de la forma habitual. Como alternativa, puede seleccionar Clase/Interfaz de la lista desplegable en el área de navegación, indicar el nombre de la nueva clase en el campo de debajo del nombre y seleccionar el pulsador Visualizar. Confirme que desea crear esta nueva clase.
How to Create a Global Class Demonstrate the steps of the exercise on creating a global class.
366
© Copyright . Reservados todos los derechos.
Lección: Implementación de clases globales simples y métodos estáticos
Creación de métodos estáticos
Figura 162: Llamada del editor del código fuente
Para crear el método estático, simplemente indique el nombre del método en la lista de método. Puede actualizar la visibilidad y el tipo de método (estático o de instancia) mediante la ayuda para entradas correspondiente. Para crear un parámetro para un método, bifurque hacia la lista de parámetros del método correspondiente. Cambie al modo de modificación e indique el nombre del parámetro en la lista. Utilice la ayuda para entradas para actualizar el tipo de parámetro (para import, para export, etc.) y especifique un tipo asociado. Para implementar el código fuente de un método, seleccione el método en la lista de métodos y el pulsador Código fuente. Implemente el código de fuente entre las sentencias METHOD . y ENDMETHOD.
© Copyright . Reservados todos los derechos.
367
Capítulo 8: Modularización
Visualización de la firma en el editor de código fuente
Figura 163: Visualización de la firma en el editor de código fuente
Puede visualizar la firma del método mientras trata el código fuente. Para ello, seleccione el pulsador Firma, como se muestra en la figura.
How to Create a Static Method Demonstrate the steps of the exercise on creating a static method
368
© Copyright . Reservados todos los derechos.
Capítulo 8 Ejercicio 20 347
Crear una clase global simple
Ejemplo empresarial Su empresa quiere desarrollar una aplicación en la cual se utilicen varias funciones en distintos programas. Le encargan la implementación de las funciones de cálculo. Usted decide programarla como una clase global con métodos estáticos. Implemente este proyecto de forma sucesiva en este ejercicio y los subsiguientes. Modelo Ninguno Solución CL_BC400_MOS_COMPUTE (clase global) Cree una clase global. 1. Cree la clase global ZCL_##_COMPUTE y actívela.
© Copyright . Reservados todos los derechos.
369
Capítulo 8 Solución 20 348
Crear una clase global simple
Ejemplo empresarial Su empresa quiere desarrollar una aplicación en la cual se utilicen varias funciones en distintos programas. Le encargan la implementación de las funciones de cálculo. Usted decide programarla como una clase global con métodos estáticos. Implemente este proyecto de forma sucesiva en este ejercicio y los subsiguientes. Modelo Ninguno Solución CL_BC400_MOS_COMPUTE (clase global) Cree una clase global. 1. Cree la clase global ZCL_##_COMPUTE y actívela. a) Ejecute la transacción SE80 para abrir el Object Navigator. b) En el área de navegación, seleccione Clase / Interfaz de la lista desplegable e indique el nombre de la nueva clase en el campo de abajo. c) Seleccione
(Visualizar).
d) En la ventana de diálogo modal que aparece, confirme que desea crear una nueva clase. e) Escriba un texto breve que explique la función de esta clase en el campo Descripción. f) No realice más entradas y confirme la descripción seleccionando
(Grabar).
g) En la ventana de diálogo que aparece, asigne la clase al paquete y a la orden de Workbench ABAP que le ha asignado el instructor. h) Active la clase global mediante
370
(Activar).
© Copyright . Reservados todos los derechos.
Capítulo 8 Ejercicio 21 349
Crear un método estático simple
Ejemplo empresarial Desea utilizar métodos estáticos globales para calcular porcentajes. Estos métodos están pensados para sustituir las llamadas de módulo de funciones de un ejercicio anterior. Para ello, es necesario crear un nuevo método de cálculo de porcentajes. Modelo BC400_MOS_GLOBAL_CLASS_1 (programa) Solución BC400_MOS_GLOBAL_CLASS_2 (programa) CL_BC400_MOS_COMPUTE (clase global) Tarea 1 Cree un método estático para calcular porcentajes en la clase global que definió antes. Como orientación, use el módulo de función que se llamó en el programa modelo. 1. Cree el método estático GET_PERCENTAGE en su clase ZCL_##_COMPUTE. 2. Cree parámetros para el método. Se deben transferir dos parámetros al método para el cálculo y se devuelve un parámetro como resultado. Para orientarse, utilice el módulo de funciones que se va a sustituir. 3. Implemente el código fuente del método estático GET_PERCENTAGE. Para orientarse, utilice el módulo de funciones que se va a sustituir. Tarea 2 Haga una copia del programa ZBC400_##_GLOBAL_CLASS_1 o de la plantilla de copia con el nuevo nombre ZBC400_##_GLOBAL_CLASS_2, y sustituya la llamada de módulo de funciones al cálculo de porcentaje por una llamada al nuevo método. 1. Copie el programa. 2. Elimine la llamada del módulo de funciones e implemente una llamada para el nuevo método en el mismo lugar. Consejo: Genere la llamada de método mediante la función de arrastrar y soltar en el área de navegación o mediante el pulsador Patrón.
© Copyright . Reservados todos los derechos.
371
Capítulo 8 Solución 21 350
Crear un método estático simple
Ejemplo empresarial Desea utilizar métodos estáticos globales para calcular porcentajes. Estos métodos están pensados para sustituir las llamadas de módulo de funciones de un ejercicio anterior. Para ello, es necesario crear un nuevo método de cálculo de porcentajes. Modelo BC400_MOS_GLOBAL_CLASS_1 (programa) Solución BC400_MOS_GLOBAL_CLASS_2 (programa) CL_BC400_MOS_COMPUTE (clase global) Tarea 1 Cree un método estático para calcular porcentajes en la clase global que definió antes. Como orientación, use el módulo de función que se llamó en el programa modelo. 1. Cree el método estático GET_PERCENTAGE en su clase ZCL_##_COMPUTE. a) Visualice la clase global en modo de modificación. b) Pase a la etiqueta Métodos e indique el nombre del nuevo método en la columna Métodos. c) En la columna Nivel, seleccione Método estático de la ayuda para entradas. d) En la columna Visibilidad, seleccione Pública de la ayuda para entradas. e) Escriba un texto explicativo en la columna Descripción. 2. Cree parámetros para el método. Se deben transferir dos parámetros al método para el cálculo y se devuelve un parámetro como resultado. Para orientarse, utilice el módulo de funciones que se va a sustituir. a) Seleccione el método GET_PERCENTAGE con un clic del ratón. b) Seleccione Parámetros. c) Defina los siguientes parámetros:
372
Nombre de parámetro
Tipo de parámetro
Tipo asociado
iv_act
Importar
BC400_ACT
iv_max
Importar
BC400_MAX
ev_percentage
Exportar
BC400_PERC
© Copyright . Reservados todos los derechos.
Lección: Implementación de clases globales simples y métodos estáticos
3. Implemente el código fuente del método estático GET_PERCENTAGE. Para orientarse, utilice el módulo de funciones que se va a sustituir. a) Cambie a la lista de métodos y seleccione el método haciendo clic en él. b) Seleccione Código fuente. c) Implemente la función como se especifica en la solución modelo para el método GET_PERCENTAGE. Tarea 2 Haga una copia del programa ZBC400_##_GLOBAL_CLASS_1 o de la plantilla de copia con el nuevo nombre ZBC400_##_GLOBAL_CLASS_2, y sustituya la llamada de módulo de funciones al cálculo de porcentaje por una llamada al nuevo método. 1. Copie el programa. a) Realice este paso de la forma habitual. 2. Elimine la llamada del módulo de funciones e implemente una llamada para el nuevo método en el mismo lugar. Consejo: Genere la llamada de método mediante la función de arrastrar y soltar en el área de navegación o mediante el pulsador Patrón. a) Consulte el extracto del código fuente de la solución modelo. Extracto del código fuente: REPORT
BC400_MOS_GLOBAL_CLASS_2.
PARAMETERS: pa_int1 TYPE i, pa_op TYPE c LENGTH 1, pa_int2 TYPE i. DATA gv_result TYPE p LENGTH 16 DECIMALS 2. IF ( pa_op pa_op pa_op pa_op pa_op pa_op
= = = = = =
'+' '-' '*' '/' '%' 'P'
OR OR OR AND pa_int2 0 OR OR ).
CASE pa_op. WHEN '+'. gv_result = pa_int1 + pa_int2. WHEN '-'. gv_result = pa_int1 - pa_int2. WHEN '*'. gv_result = pa_int1 * pa_int2. WHEN '/'. gv_result = pa_int1 / pa_int2.
© Copyright . Reservados todos los derechos.
373
Capítulo 8: Modularización
WHEN 'P'. TRY. CALL METHOD cl_bc400_compute=>get_power EXPORTING iv_base = pa_int1 iv_power = pa_int2 IMPORTING ev_result = gv_result. CATCH cx_bc400_power_too_high . WRITE 'Max value of Power is 4'(mvp). CATCH cx_bc400_result_too_high . WRITE 'Result value was too high'(rvh). ENDTRY. WHEN '%'. CALL METHOD cl_bc400_mos_compute=>get_percentage EXPORTING iv_act = pa_int1 iv_max = pa_int2 IMPORTING ev_percentage = gv_result. ENDCASE. WRITE: 'Result:'(res), gv_result. ELSEIF pa_op = '/' AND pa_int2 = 0. WRITE: 'No division by zero!'(dbz). ELSE. WRITE: 'Invalid operator!'(iop). ENDIF. Extracto del código fuente del método: METHOD GET_PERCENTAGE. * Simple error handling IF iv_max = 0. ev_percentage = 0. ELSE. * Calculate result ev_percentage = iv_act / iv_max * 100. ENDIF. ENDMETHOD.
374
© Copyright . Reservados todos los derechos.
Lección: Implementación de clases globales simples y métodos estáticos
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Crear clases globales simples
© Copyright . Reservados todos los derechos.
375
Capítulo 8 Lección 8 354
Modularizar con clases locales
RESUMEN DE LA LECCIÓN En este módulo encontrará una breve presentación preliminar sobre cómo las clases locales permiten utilizar técnicas de programación orientadas a objetos para la modularización interna de programas. Ejemplo empresarial Desea encapsular una función en un método estático de una clase local. Por ello, necesita conocer lo siguiente: ●
Comprender la definición, la implementación y la utilización de las clases locales Briefly outline the topic of local classes in this lesson. Explain that local classes play no further role in BC400. Local classes are discussed comprehensively in course BC401. Direct participants who have more detailed questions to this course and the associated online documentation. For the demonstration, use the executable program BC400_MOD_LOCAL_CLASS. Use this example to discuss the syntax of the class definition and implementation, and execute the program in the ABAP Debugger. If the participants show a good understanding of the subject and sufficient time remains, you can pre-program a corresponding program.
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
376
Tratar clases locales
© Copyright . Reservados todos los derechos.
Lección: Modularizar con clases locales
Cómo trabajar con clases locales
Figura 164: Definición de una clase local
Ya ha aprendido cómo definir y utilizar clases globales. En este módulo se explica la definición y la utilización de clases locales. Las clases locales se llaman así porque solo se pueden utilizar localmente dentro del programa en el cual se definen. The subject is not addressed in detail here since it is of no relevance for the rest of the course. For a detailed discussion of the definition of local classes, see the course BC401 – ABAP Objects. La diferencia principal entre las clases globales y las clases locales se encuentra en la manera en la que se definen. Mientras las clases globales se actualizan con una herramienta especial llamada Generador de clases, las clases locales se crean directamente en el código fuente del programa principal respectivo. En la figura se muestra cómo crear una clase local en el código fuente del programa. Se hace una distinción entre la parte de definición y la parte de implementación de la clase. La descripción de los atributos y las firmas de los métodos están situadas en la parte de definiciones, mientras que la parte de implementación solo contiene el código fuente de los métodos. La sentencia CLASS... ENDCLASS es una definición local del programa. De la misma manera que la sentencia TYPES define tipos de datos locales, la sentencia CLASS... ENDCLASS define tipos de objeto locales. La parte de definiciones está dividido en varias secciones, en las cuales se definen los componentes públicos y privados (PUBLIC SECTION. y PRIVATE SECTION.).
© Copyright . Reservados todos los derechos.
377
Capítulo 8: Modularización
Sintaxis para métodos estáticos
Figura 165: Sintaxis para métodos estáticos
En la figura se muestra una representación esquemática de cómo se define e implementa un método estático público. El método es público porque la definición está situada en la sección PUBLIC SECTION. de la clase. Para definir un método de instancia en contraposición a un método estático, se utiliza la sentencia METHODS en lugar de CLASS-METHODS. Los métodos tienen una firma (parámetros y excepciones de interfaz) que les permite recibir valores cuando se los llama y devolver valores al programa de llamada. Los métodos pueden tener cualquier número de parámetros IMPORTING, EXPORTING y CHANGING. Todos los parámetros se pueden transferir como valores o como referencias. A method return value can be defined using the RETURNING parameter. It must always be passed as a value. In this case, you cannot define any EXPORTING and CHANGING parameters. The RETURNING parameter can, therefore, be used to define functional methods. This option is explained in more detail in the course BC401-ABAP Objects. Puede definir todos los parámetros de entrada (parámetros IMPORTING y CHANGING) como parámetros opcionales en la declaración mediante los suplementos OPTIONAL. El programa de llamada no debe transferir estos parámetros cuando el sistema llama el objeto. El suplemento DEFAULT permite especificar un valor inicial.
378
© Copyright . Reservados todos los derechos.
Lección: Modularizar con clases locales
Implementación y utilización de un método estático
Figura 166: Implementación y uso de un método estático
El ejemplo de sintaxis muestra cómo definir una clase local con un método estático (sección superior derecha) y cómo implementar el método (sección inferior derecha). En la sección de la izquierda, se muestra la llamada del método estático desde el programa principal. Observe que la llamada es idéntica a una llamada de método estático de una clase global. Puede definir la clase local directamente en el código fuente del programa principal o en un programa INCLUDE.
Consejo: La clase local se debe definir antes de la llamada. Es diferente de las subrutinas, que normalmente se definen debajo de la sentencia de llamada.
How to Handle Local Classes Discuss the differences between local and global classes with regard to integration in SE80 (for example, the drag–and-drop method cannot be used).
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Tratar clases locales
© Copyright . Reservados todos los derechos.
379
Capítulo 8: Modularización
380
© Copyright . Reservados todos los derechos.
Capítulo 8
357
Evaluación de la formación
1. ¿Cuáles son los usos de modularización? Seleccione las respuestas correctas. X
A Para mejorar el rendimiento
X
B Para obtener una mejor visión general de la disposición del programa
X
C Para encapsular una función que se necesita varias veces dentro de un programa para uso múltiple
X
D Para implementar el mantenimiento centralizado de una función dentro de un programa
X
E Para hacer que una función esté disponible en todo el sistema
2. La asignación de parámetros reales a parámetros formales al llamar una subrutina se llama _______________. Seleccione la respuesta correcta. X
A asignación de interfaz
X
B transferencia de parámetros
X
C llamada de interfaz
X
D llamada de subrutina
3. Las variables definidas en el programa principal son ____________. Seleccione la respuesta correcta. X
A objetos de datos globales
X
B tipos de datos locales
X
C tipos de datos locales y globales
© Copyright . Reservados todos los derechos.
381
Capítulo 8: Evaluación de la formación
4. ¿Cuál de los siguientes elementos contiene la interfaz de un módulo de funciones? Seleccione las respuestas correctas. X
A Parámetro para exportación
X
B Subrutinas
X
C Parámetro changing
X
D Pantalla
5. Después de definir los parámetros IMPORTING y EXPORTING correspondientes, puede pasar a la etiqueta ______________ para implementar el módulo de funciones. Seleccione la respuesta correcta. X
A estándar
X
B excepciones
X
C código fuente
X
D atributos
6. Se puede acceder a los datos en el sistema SAP por medio de una Business Application Programming Interface (BAPI). Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
7. ¿Cuál de las siguientes opciones se puede utilizar como una opción de visibilidad para un atributo? Seleccione las respuestas correctas. X
A Público
X
B Componentes
X
C Atributo
X
D Instancia
8. Los métodos se llaman mediante la sentencia CALL CLASS METHOD. Indique si esta afirmación es verdadera o falsa.
382
X
Verdadero
X
Falso
© Copyright . Reservados todos los derechos.
Capítulo 8: Evaluación de la formación
9. Cuando identifica un método como método estático, se puede llamar directamente sin necesidad de generar primero una instancia de la clase. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
10. Para crear un método estático, solo necesita introducir el nombre del método en la lista Constructor. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
11. ¿Cuál de las siguientes herramientas especiales actualiza las clases globales? Seleccione la respuesta correcta. X
A Generador de objetos
X
B Class Builder
X
C Generador de métodos
X
D Biblioteca de funciones
12. Para definir un método de instancia en contraposición a un método estático en una clase local, se utiliza la sentencia METHODS en lugar de CLASS-METHODS. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
© Copyright . Reservados todos los derechos.
383
Capítulo 8
360
Respuestas a la Evaluación de la formación
1. ¿Cuáles son los usos de modularización? Seleccione las respuestas correctas. X
A Para mejorar el rendimiento
X
B Para obtener una mejor visión general de la disposición del programa
X
C Para encapsular una función que se necesita varias veces dentro de un programa para uso múltiple
X
D Para implementar el mantenimiento centralizado de una función dentro de un programa
X
E Para hacer que una función esté disponible en todo el sistema
2. La asignación de parámetros reales a parámetros formales al llamar una subrutina se llama _______________. Seleccione la respuesta correcta. X
A asignación de interfaz
X
B transferencia de parámetros
X
C llamada de interfaz
X
D llamada de subrutina
3. Las variables definidas en el programa principal son ____________. Seleccione la respuesta correcta.
384
X
A objetos de datos globales
X
B tipos de datos locales
X
C tipos de datos locales y globales
© Copyright . Reservados todos los derechos.
Capítulo 8: Respuestas a la Evaluación de la formación
4. ¿Cuál de los siguientes elementos contiene la interfaz de un módulo de funciones? Seleccione las respuestas correctas. X
A Parámetro para exportación
X
B Subrutinas
X
C Parámetro changing
X
D Pantalla
5. Después de definir los parámetros IMPORTING y EXPORTING correspondientes, puede pasar a la etiqueta ______________ para implementar el módulo de funciones. Seleccione la respuesta correcta. X
A estándar
X
B excepciones
X
C código fuente
X
D atributos
6. Se puede acceder a los datos en el sistema SAP por medio de una Business Application Programming Interface (BAPI). Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
7. ¿Cuál de las siguientes opciones se puede utilizar como una opción de visibilidad para un atributo? Seleccione las respuestas correctas. X
A Público
X
B Componentes
X
C Atributo
X
D Instancia
Correcto. Puede usar público y privado como opción de visibilidad para un atributo.
© Copyright . Reservados todos los derechos.
385
Capítulo 8: Respuestas a la Evaluación de la formación
8. Los métodos se llaman mediante la sentencia CALL CLASS METHOD. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
9. Cuando identifica un método como método estático, se puede llamar directamente sin necesidad de generar primero una instancia de la clase. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
10. Para crear un método estático, solo necesita introducir el nombre del método en la lista Constructor. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
11. ¿Cuál de las siguientes herramientas especiales actualiza las clases globales? Seleccione la respuesta correcta. X
A Generador de objetos
X
B Class Builder
X
C Generador de métodos
X
D Biblioteca de funciones
12. Para definir un método de instancia en contraposición a un método estático en una clase local, se utiliza la sentencia METHODS en lugar de CLASS-METHODS. Indique si esta afirmación es verdadera o falsa.
386
X
Verdadero
X
Falso
© Copyright . Reservados todos los derechos.
CAPÍTULO 9
Objetos de datos complejos
Lección 1 Trabajo con estructuras Ejercicio 22: Trabajar con estructuras
388 395
Lección 2 Trabajar con tablas internas Ejercicio 23: Trabajar con tablas internas
401 419
OBJETIVOS DEL CAPÍTULO ●
Definir objetos de datos estructurados
●
Implementar sentencias ABAP básicas para objetos de datos estructurados
●
Analizar objetos de datos estructurados en modo debugging
●
Definir tablas internas
●
Implementar sentencias ABAP básicas con tablas internas
●
Analizar tablas internas en modo debugging
© Copyright . Reservados todos los derechos.
387
Capítulo 9 Lección 1 364
Trabajo con estructuras
RESUMEN DE LA LECCIÓN Esta lección cubre la definición y los objetos de datos estructurados (variables estructuradas) y sus análisis en ABAP Debugger. También aprenderá a utilizar sentencias ABAP básicas para objetos de datos estructurados. Ejemplo empresarial Se dispone a procesar sus estructuras de datos propias y a buscar errores semánticos en los programas mediante el ABAP Debugger. Por ello, necesita saber lo siguiente: ●
Cómo definir objetos de datos estructurados (variables estructuradas)
●
Cómo utilizar sentencias ABAP básicas para objetos de datos estructurados
●
Cómo analizar objetos de datos estructurados en modo debugging Structured variables in the program are simply “records” in other programming languages. The advantage of ABAP is that you can use global structure types (dictionary structures) to define uniform structured variables in different programs. You should emphasize this as one of the strengths of the ABAP language.
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá:
388
●
Definir objetos de datos estructurados
●
Implementar sentencias ABAP básicas para objetos de datos estructurados
●
Analizar objetos de datos estructurados en modo debugging
© Copyright . Reservados todos los derechos.
Lección: Trabajo con estructuras
Definición de objetos de datos estructurados
Figura 167: Definición de estructuras con tipos globales
Al definir objetos de datos estructurados (conocidos como variables estructuradas o, simplemente, estructuras) en ABAP, puede combinar los valores que pertenecen juntos de forma lógica a un objeto de datos. Las estructuras se pueden anidar. Esto significa que los componentes pueden estar formados por varias estructuras o incluso por tablas internas. Define las variables de estructura en el programa con la sentencia DATA como lo hace con objetos de datos básicos. Al fijar los tipos, puede consultar lo siguiente: ● Una estructura en el Dictionary ABAP (tipo de estructura global) ●
Un tipo de estructura declarado de modo local en el programa
© Copyright . Reservados todos los derechos.
389
Capítulo 9: Objetos de datos complejos
Nota: Para los nombres de los tipos de estructura y las variables de estructura, agregamos las siguientes definiciones a nuestra convención para fijar nombres: Utilización
Prefijo
Tipo Estructura Global*
gty_s_
Estructura Global*
gs_
Tipo Estructura Local**
lty_s_
Estructura Local**
ls_
* Nota: Global en este caso significa un tipo o una variable que es visible globalmente dentro de su programa. Sin embargo, se define localmente en su programa. También puede definir tipos como sistema global (por medio de entradas en el Diccionario de datos ABAP). Estas definiciones de tipos están visibles (y se pueden utilizar) dentro de todos los programas ABAP de su sistema SAP. ** Nota: local en este caso significa local a una subrutina.
Limit your demonstrations to local structured types and Dictionary structures. It is important that the participants are first introduced to transparent tables and database views in the relevant unit, initially as descriptions of database objects. At this time, you should not place emphasis on their use as data types. The aim is to separate database accesses from the processing and representation of data in the remainder of the program. Definición de estructuras con tipos locales
Figura 168: Definición de estructuras con tipos locales
390
© Copyright . Reservados todos los derechos.
Lección: Trabajo con estructuras
En la figura se muestra la definición de una variable de estructura mediante un tipo estructurado declarado de forma local. Utilice la sentencia TYPES para definir tipos de estructura locales. Aquí, los componentes están delimitados como se muestra. TYPES: BEGIN OF structure_name, ... , END OF structure_name. Asigne un tipo a cada componente mediante el suplemento TYPE. Para obtener más información, consulte la documentación de palabra clave de la sentencia TYPES. Definir los objetos de datos del modo habitual. En caso necesario, también puede definir directamente un objeto de datos estructurado. Para ello, solo debe sustituir la palabra clave principal TYPES por DATA. DATA: BEGIN OF structure_name,
...
, END OF structure_name.
Acceder a componentes de estructura
Figura 169: Acceder a componentes de estructura
Los componentes de una estructura siempre se dirigen mediante un guión: nombre_estructura-nombre_componente.
Consejo: En principio, la sintaxis de ABAP permite que los nombres de objetos de datos contengan guiones, como DATA h-var TYPE c LENGTH 5. Sin embargo, para evitar confusión con el tratamiento de componentes de estructura, debe evitar usar guiones como parte del nombre.
How to Define Structured Data Objects Demonstrate the steps of the exercise restricting to structure BC400_S_FLIGHT.
© Copyright . Reservados todos los derechos.
391
Capítulo 9: Objetos de datos complejos
Uso de objetos de datos estructurados
Figura 170: Copia de componentes de estructura con el mismo nombre
La sentencia MOVE-CORRESPONDING copia el contenido de la estructura fuente en la estructura de destino de a un componente por vez. Aquí, solo se consideran disponibles los componentes que tienen el mismo nombre tanto en la estructura fuente como en la de destino. El resto de componentes de las estructuras no se modifican. La asignación individual se ejecuta como en la sentencia MOVE.
How to Work with Structured Data Objects Demonstrate the steps of the exercise enhancing the previous demonstration.
392
© Copyright . Reservados todos los derechos.
Lección: Trabajo con estructuras
Objetos de datos estructurados en modo debugging
Figura 171: Estructuras en modo debugging
Realice el seguimiento del contenido de campo de una estructura en el ABAP Debugger indicando el nombre de la estructura en el área Variable 1 o copiándolo del código fuente haciendo doble clic sobre él. Visualice el componente de la estructura haciendo doble clic en el nombre de la estructura en el área Variable 1. Además, puede configurar un área de visualización para la estructura en uno de los desktops. Para visualizar una variable de estructura en el ABAP Debugger clásico, utilice el doble clic. Un doble clic en la estructura del código fuente, copia la estructura en la vista de campo. Un doble clic en la vista de campo lo lleva a la visualización de estructura, donde podrá leer el nombre, el contenido y el tipo de los componentes individuales.
How to Debug Structured Data Objects Debug the self-developed program in front of the class.
© Copyright . Reservados todos los derechos.
393
Capítulo 9: Objetos de datos complejos
394
© Copyright . Reservados todos los derechos.
Capítulo 9 Ejercicio 22 371
Trabajar con estructuras
Ejemplo empresarial Desea visualizar datos de la compañía aérea y vuelos según una entrada de fecha particular del usuario. Mediante estructuras durante la obtención de datos, combine los datos en una estructura de salida para su informe. Utilice la sentencia ABAP MOVE-CORRESPONDING para asignar valores entre estructuras y utilice el ABAP Debugger para realizar el seguimiento del flujo de datos y comprender las conexiones entre los bloques de procesamiento. Modelo Ninguno Solución BC400_STS_STRUCTURE Tarea 1 Cree un programa y defina una pantalla de selección para indicar una compañía aérea, un número de vuelo y la fecha de vuelo. 1. Cree el programa ejecutable ZBC400_##_STRUCTURE sin ningún include TOP. Asigne el programa al paquete y a la orden de transporte. 2. Defina las opciones de entrada para compañía aérea (nombre sugerido: pa_car), número de vuelo (nombre sugerido: pa_con) y la fecha de vuelo (nombre sugerido: pa_date). Al tipificar los campos de entrada, consulte los campos adecuados del tipo de estructura del Dictionary BC400_S_FLIGHT.
Tarea 2 Cree dos estructuras basadas en los tipos de estructura del Diccionario para obtener datos en una fase posterior y una estructura destinada a la salida definida por un tipo local. 1. Defina dos estructuras en el programa con referencia al tipo de estructura del Diccionario BC400_S_CARRIER (nombre sugerido: gs_carrier) y BC400_S_FLIGHT (nombre sugerido: gs_flight). 2. Defina una tercera estructura que combine todos los componentes de las dos estructuras anteriores. El tipo de referencia debería definirse localmente en el programa (nombre sugerido: gty_s_carrierflight). Utilice la sentencia TYPES para la definición. Utilice este tipo de estructura local para definir una variable de estructura (nombre sugerido: gs_carrierflight).
© Copyright . Reservados todos los derechos.
395
Capítulo 9: Objetos de datos complejos
Tarea 3 Obtenga los datos del vuelo para la fecha de vuelo, con información acerca de la compañía aérea seleccionada. Presente estos datos en una lista sencilla. 1. Para obtener los datos, utilice los métodos GET_CARRIER y GET_FLIGHT de la clase CL_BC400_FLIGHTMODEL. Incluya los métodos en el programa mediante la función arrastrar y soltar, y suministre el tipo de datos correcto a la firma de los métodos. Aquí, los parámetros de entrada de la pantalla de selección sirven de parámetros para import y las dos primeras estructuras sirven de parámetros para export. 2. Combine los datos recibidos de las primeras dos estructuras en la estructura de salida. Para ello, utilice la sentencia MOVE-CORRESPONDING. 3. Utilice la sentencia WRITE para mostrar el contenido de la estructura de salida en una lista sencilla. 4. (OPCIONAL) Suprima la salida a la lista si no se encontró ningún vuelo. En su lugar, emita un mensaje breve de gestión de errores de los métodos utilizando la sentencia WRITE. Consejo: Puede verificar con IS INITIAL si la estructura de salida contiene datos.
Tarea 4 Ejecute el programa y verifique el resultado. 1. Verifique el contenido de todas las estructuras en el ABAP Debugger. Realice un test en caso de que no se encuentren datos de vuelo.
396
© Copyright . Reservados todos los derechos.
Capítulo 9 Solución 22 373
Trabajar con estructuras
Ejemplo empresarial Desea visualizar datos de la compañía aérea y vuelos según una entrada de fecha particular del usuario. Mediante estructuras durante la obtención de datos, combine los datos en una estructura de salida para su informe. Utilice la sentencia ABAP MOVE-CORRESPONDING para asignar valores entre estructuras y utilice el ABAP Debugger para realizar el seguimiento del flujo de datos y comprender las conexiones entre los bloques de procesamiento. Modelo Ninguno Solución BC400_STS_STRUCTURE Tarea 1 Cree un programa y defina una pantalla de selección para indicar una compañía aérea, un número de vuelo y la fecha de vuelo. 1. Cree el programa ejecutable ZBC400_##_STRUCTURE sin ningún include TOP. Asigne el programa al paquete y a la orden de transporte. a) Realice este paso de la forma habitual. 2. Defina las opciones de entrada para compañía aérea (nombre sugerido: pa_car), número de vuelo (nombre sugerido: pa_con) y la fecha de vuelo (nombre sugerido: pa_date). Al tipificar los campos de entrada, consulte los campos adecuados del tipo de estructura del Dictionary BC400_S_FLIGHT. a) Véase el extracto del código fuente de la solución modelo.
Tarea 2 Cree dos estructuras basadas en los tipos de estructura del Diccionario para obtener datos en una fase posterior y una estructura destinada a la salida definida por un tipo local. 1. Defina dos estructuras en el programa con referencia al tipo de estructura del Diccionario BC400_S_CARRIER (nombre sugerido: gs_carrier) y BC400_S_FLIGHT (nombre sugerido: gs_flight). a) Véase el extracto del código fuente de la solución modelo. 2. Defina una tercera estructura que combine todos los componentes de las dos estructuras anteriores. El tipo de referencia debería definirse localmente en el programa (nombre sugerido: gty_s_carrierflight). Utilice la sentencia TYPES para la definición. Utilice
© Copyright . Reservados todos los derechos.
397
Capítulo 9: Objetos de datos complejos
este tipo de estructura local para definir una variable de estructura (nombre sugerido: gs_carrierflight). a) Véase el extracto del código fuente de la solución modelo.
Tarea 3 Obtenga los datos del vuelo para la fecha de vuelo, con información acerca de la compañía aérea seleccionada. Presente estos datos en una lista sencilla. 1. Para obtener los datos, utilice los métodos GET_CARRIER y GET_FLIGHT de la clase CL_BC400_FLIGHTMODEL. Incluya los métodos en el programa mediante la función arrastrar y soltar, y suministre el tipo de datos correcto a la firma de los métodos. Aquí, los parámetros de entrada de la pantalla de selección sirven de parámetros para import y las dos primeras estructuras sirven de parámetros para export. a) Véase el extracto del código fuente de la solución modelo. 2. Combine los datos recibidos de las primeras dos estructuras en la estructura de salida. Para ello, utilice la sentencia MOVE-CORRESPONDING. a) Véase el extracto del código fuente de la solución modelo. 3. Utilice la sentencia WRITE para mostrar el contenido de la estructura de salida en una lista sencilla. a) Véase el extracto del código fuente de la solución modelo. 4. (OPCIONAL) Suprima la salida a la lista si no se encontró ningún vuelo. En su lugar, emita un mensaje breve de gestión de errores de los métodos utilizando la sentencia WRITE. Consejo: Puede verificar con IS INITIAL si la estructura de salida contiene datos.
a) Consulte el extracto del código fuente de la solución modelo.
Tarea 4 Ejecute el programa y verifique el resultado. 1. Verifique el contenido de todas las estructuras en el ABAP Debugger. Realice un test en caso de que no se encuentren datos de vuelo. a) Fije un breakpoint de sesión en el Editor ABAP y ejecute el programa directamente (Procesamiento directo). mediante Extracto del código fuente: REPORT
bc400_sts_structure.
PARAMETERS: pa_car TYPE bc400_s_flight-carrid, pa_con TYPE bc400_s_flight-connid, pa_date TYPE bc400_s_flight-fldate. DATA: gs_carrier TYPE bc400_s_carrier, gs_flight TYPE bc400_s_flight.
398
© Copyright . Reservados todos los derechos.
Lección: Trabajo con estructuras
TYPES: BEGIN OF gty_s_carrierflight, carrid TYPE bc400_s_flight-carrid, connid TYPE bc400_s_flight-connid, fldate TYPE bc400_s_flight-fldate, seatsmax TYPE bc400_s_flight-seatsmax, seatsocc TYPE bc400_s_flight-seatsocc, percentage TYPE bc400_s_flight-percentage, carrname TYPE bc400_s_carrier-carrname, currcode TYPE bc400_s_carrier-currcode, url TYPE bc400_s_carrier-url, END OF gty_s_carrierflight. DATA: gs_carrierflight TYPE gty_s_carrierflight. * Get data TRY. CALL METHOD cl_bc400_flightmodel=>get_flight EXPORTING iv_carrid = pa_car iv_connid = pa_con iv_fldate = pa_date IMPORTING es_flight = gs_flight. CALL METHOD cl_bc400_flightmodel=>get_carrier EXPORTING iv_carrid = pa_car IMPORTING es_carrier = gs_carrier. CATCH cx_bc400_no_data . WRITE: 'No data found!'(ndf). CATCH cx_bc400_no_auth . WRITE: 'No authority for this carrier!'(nau). ENDTRY. * Fill gs_carrierflight MOVE-CORRESPONDING gs_carrier TO gs_carrierflight. MOVE-CORRESPONDING gs_flight TO gs_carrierflight. IF gs_carrierflight IS NOT INITIAL. WRITE: / gs_carrierflight-carrid, gs_carrierflight-connid, gs_carrierflight-fldate, gs_carrierflight-carrname, gs_carrierflight-currcode, gs_carrierflight-seatsmax, gs_carrierflight-seatsocc, gs_carrierflight-percentage, '%', gs_carrierflight-url. ENDIF.
© Copyright . Reservados todos los derechos.
399
Capítulo 9: Objetos de datos complejos
RESUMEN DE LA LECCIÓN Ahora podrá:
400
●
Definir objetos de datos estructurados
●
Implementar sentencias ABAP básicas para objetos de datos estructurados
●
Analizar objetos de datos estructurados en modo debugging
© Copyright . Reservados todos los derechos.
Capítulo 9 Lección 2 377
Trabajar con tablas internas
RESUMEN DE LA LECCIÓN En este módulo se explica cómo definir tablas internas y cómo utilizarlas en programas ABAP. También analizará las tablas internas en el ABAP Debugger en tiempo de ejecución. Ejemplo empresarial Se dispone a utilizar variables de tabla como almacenamiento de datos en sus programas y a buscar errores semánticos en esos programas mediante el ABAP Debugger. Por ello, necesita saber lo siguiente: ●
Cómo definir tablas internas
●
Cómo utilizar sentencias ABAP básicas con tablas internas
●
Cómo analizar tablas internas en modo debugging The participants’ understanding of this lesson will depend on their previous experience. The concept of internal tables does not exist in any of the other common programming languages in this form. You should emphasize that this concept is another strength of ABAP.
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Definir tablas internas
●
Implementar sentencias ABAP básicas con tablas internas
●
Analizar tablas internas en modo debugging
© Copyright . Reservados todos los derechos.
401
Capítulo 9: Objetos de datos complejos
Tipos de tabla
Figura 172: Tablas internas: opciones de uso
Una tabla interna es un objeto de datos en el que se pueden mantener varios registros de datos estructurados de forma idéntica en tiempo de ejecución (variable de tabla). El número de registros de datos está restringido únicamente por la capacidad de instalaciones específicas de sistema. El sistema de tiempo de ejecución ABAP gestiona dinámicamente el tamaño de la tabla interna. Esto significa que la gestión de la memoria no es un problema para el desarrollador. Los registros de datos individuales en una tabla interna se llaman filas de tabla o entradas de tabla. Los componentes individuales de una fila se llaman campos o columnas de la tabla interna. Las tablas internas son un simple modo de procesamiento de grandes sets de datos de manera estructurada. Usos típicos de una tabla interna: Almacenamiento de datos de tablas de base de datos o ficheros secuenciales para su procesamiento posterior.
●
●
●
402
Preparación de datos para presentarlos en pantalla o imprimirlos (p. ej., ordenar). Preparación de datos para utilizar otros servicios (por ejemplo, para método, módulo de funciones o llamadas de subrutina).
© Copyright . Reservados todos los derechos.
Lección: Trabajar con tablas internas
Propiedades de tablas internas
Figura 173: Atributos de tablas internas
Propiedades de una tabla interna: ● Tipo de línea El tipo de línea describe la estructura de las filas de la tabla. El desarrollador generalmente especifica un tipo de estructura, aunque es posible especificar cualquier tipo de datos. ●
Clave primaria La clave primaria de una tabla interna consta de campos clave en un orden particular. El sistema utiliza la secuencia de los campos clave, entre otras cosas, para ordenar según las claves. Dependiendo del tipo de acceso, la clave principal se puede definir como única o no única. Unicidad significa que una combinación determinada de valores de campos clave solo puede aparecer una vez dentro de la tabla.
●
Clase de tabla Las tablas son de tres tipos: estándar, clasificada y de claves de control. Dependiendo del tipo de acceso utilizado, debería utilizar el tipo de tabla apropiado para la definición para permitir el acceso de alto rendimiento.
© Copyright . Reservados todos los derechos.
403
Capítulo 9: Objetos de datos complejos
Atributos y uso de los tipos de tabla
Figura 174: Atributos y uso de los tipos de tabla
En la figura se muestra la selección del tipo de tabla apropiado. Puede acceder a una entrada de tabla de las siguientes maneras: ●
Acceso a índice Identificar la entrada de la tabla por su número de fila
●
Acceso mediante clave Identificar la entrada de la tabla por los valores de los campos
Dependiendo del tipo de acceso, seleccione los tipos de tablas más adecuados para permitir el acceso de alto rendimiento. Clases de tabla: Tablas estándar
●
El entorno de tiempo de ejecución actualiza una numeración de filas internas (índice). Tanto el acceso a índice como el acceso mediante clave son posibles. Seleccione esta clase de tabla si usa principalmente el acceso de índice para esta tabla interna. ●
Tablas clasificadas El entorno de tiempo de ejecución mantiene los registros de datos clasificados en los campos clave en orden ascendente. También actualiza el índice interno. Tanto el acceso a índice como el acceso mediante clave son posibles. Seleccione esta clase de tabla si normalmente accede a la tabla interna con la clave, o bien si desea que la tabla se ordene automáticamente por clave.
●
404
Tablas de claves de control
© Copyright . Reservados todos los derechos.
Lección: Trabajar con tablas internas
El entorno de tiempo de ejecución gestiona los registros de datos para que el acceso a la clave sea rápido mediante el procedimiento de claves de control. Aquí se requiere una clave única. En las tablas de claves de control, sólo son posibles los accesos mediante clave. Seleccione esta clase de tabla si la tabla interna es muy grande y desea acceder a ella solamente por clave.
Consejo: En este curso sólo utilizaremos tablas estándar. Sin embargo, exceptuando unos pocos casos especiales, la sintaxis es idéntica para los tres tipos de tabla.
How to Examine a Dictionary Table Type Show elements demonstrated in section BC400_T_CONNECTIONS.
Definición de tablas internas
Figura 175: Definición de tablas internas con tipos globales
El tipo de una tabla interna se llama tipo de tabla. Los tipos de tabla se pueden definir globalmente en el Dictionary ABAP o localmente en un programa. En la figura se muestra un tipo de tabla declarado en el Dictionary ABAP, así como la definición interna de programa de una variable de tabla con referencia al tipo de tabla.
© Copyright . Reservados todos los derechos.
405
Capítulo 9: Objetos de datos complejos
Para obtener información detallada acerca de la declaración de tipos de tabla globales en el Dictionary ABAP, consulte la documentación online. Puede accederlo usando aplicación) cuando visualice el tipo de tabla.
(Ayuda de
Definición de tablas internas con tipos locales
Figura 176: Definición de tablas internas con tipos locales
En la figura se muestra un tipo de tabla declarado localmente en el programa, así como la definición interna de una variable de tabla del programa con referencia al tipo de tabla declarado localmente. Cuando cree una lista de los campos clave en el tipo de tabla, tenga en cuenta que la secuencia importa para determinados tipos de procesamiento (como “ordenar por clave”). Para obtener información detallada acerca de declarar tipos de tablas locales, consulte la documentación de palabra clave de la sentencia TYPES.
Consejo: En vez de definir un tipo de tabla primero también puede definir directamente una tabla interna. Todo lo que debe hacer aquí es utilizar DATA en lugar de TYPES.
Atención: Un error común de principiante consiste en la sintaxis siguiente: DATA gt_itab TYPE TABLE OF . El resultado de esto sería una definición de una tabla interna con filas que son tablas internas del tipo de tabla especificado.
406
© Copyright . Reservados todos los derechos.
Lección: Trabajar con tablas internas
Nota: Para los nombres de las clases de tablas y las tablas internas (objetos de datos) que se definen dentro del programa, agregamos las siguientes definiciones a nuestra convención para fijar nombres: Utilización
Prefijo
Tipo Tabla Global*
gty_t_
Tabla Global* interna
gt_
Tipo Tabla Local**
lty_t_
Tabla Local** interna
lt_
* Nota: program Global en este caso significa un tipo o una variable que es visible globalmente dentro de su programa. Sin embargo, se define localmente en su programa. También puede definir tipos como sistema global (por medio del diccionario de datos ABAP). Estas definiciones de tipos están visibles (y se pueden utilizar) dentro de todos programas ABAP de su sistema SAP. ** Nota: local en este caso significa local a una subrutina. Definición independiente de tablas internas
Figura 177: Definición independiente de tablas internas
En las definiciones previas de las tablas internas, se usaron objetos de Dictionary ABAP, como un tipo de tabla (BC400_T_FLIGHTS) o un tipo de estructura (BC400_S_FLIGHT). En la figura se muestra una definición de tabla independiente. La tabla independiente le permite implementar tablas internas con cualquier clase de estructura sin consultar los tipos de diccionario existentes.
© Copyright . Reservados todos los derechos.
407
Capítulo 9: Objetos de datos complejos
Posibles definiciones de tablas internas
Figura 178: Posibles definiciones de tablas internas
En la figura se muestra un resumen de las posibles definiciones de tablas internas. La forma breve de una definición de tabla ilustrada en la figura utiliza implícitamente los siguientes valores por defecto: ● Clase de tabla: estándar (por defecto) ●
●
Unicidad de clave: no única (opción únicamente para una tabla estándar) Clave de tabla: clave por defecto (todos los campos de tabla no numéricos son campos clave)
Consejo: Puesto que la clave por defecto generalmente no se puede utilizar de un modo significativo, sólo debería usarla para definir una tabla interna, si no necesita la clave para procesar su tabla.
How to Define Internal Tables Develop and demonstrate the steps of this section in front of the class.
408
© Copyright . Reservados todos los derechos.
Lección: Trabajar con tablas internas
Uso de tablas internas
Figura 179: Acceso a registros individuales (resumen)
Para procesar registros individuales de una tabla interna, se requiere una variable de estructura que tenga el mismo tipo que el tipo de línea de la tabla interna. Esta variable de estructura se conoce como el área de trabajo. En la figura se muestra el procesamiento de una tabla interna en el área de trabajo correspondiente. Las siguientes sentencias existen para acceder a registros únicos de tablas internas: ● APPEND Adjunta el contenido de una estructura a una tabla interna y esta operación solo puede utilizarse con tablas estándar. ●
INSERT Inserta el contenido de una estructura a una tabla interna.
●
READ TABLE Copia el contenido de una fila de tabla a una estructura.
●
MODIFY TABLE Sobrescribe una fila de tabla interna con el contenido de una estructura.
●
DELETE Borra una fila de una tabla interna.
●
COLLECT Acumula el contenido de una estructura en una fila de una tabla interna que tiene la misma clave y al hacerlo, solo se añaden los campos sin clave. Es decir, que esta sentencia sólo se puede utilizar para tablas cuyos campos no clave son todos numéricos.
© Copyright . Reservados todos los derechos.
409
Capítulo 9: Objetos de datos complejos
Para obtener información detallada acerca de las sentencias ABAP descritas, consulte la documentación de palabra clave relevante. Procesamiento de sets de registros (resumen)
Figura 180: Procesamiento de sets de registros (resumen)
Las siguientes sentencias existen para acceder a grupos de registros: LOOP AT . . . ENDLOOP
●
Sitúa las filas de una tabla interna en la estructura especificada en la cláusula INTO oneby-one. Dentro del LOOP, el contenido actual de la estructura se puede mostrar o modificar y volver a escribir el contenido actual en la tabla. ●
DELETE Borra todas las filas de la tabla interna que cumplen con la condición lógica .
●
INSERT LINES OF Copia el contenido de varias filas de una tabla interna a otra tabla interna.
●
APPEND LINES OF Adjunta el contenido de varias filas de una tabla interna a otra tabla estándar.
Para obtener información detallada acerca de las sentencias ABAP descritas aquí, consulte la documentación de palabra clave relevante. Ahora verá algunos ejemplos reales de sintaxis para las sentencias más comunes.
410
© Copyright . Reservados todos los derechos.
Lección: Trabajar con tablas internas
Ejemplo de sintaxis: insertar una fila
Figura 181: Ejemplo de sintaxis: insertar una fila
Inserte una fila en una tabla interna escribiendo los datos del registro correspondiente en el área de trabajo preparada y, a continuación, insértela en la tabla interna con una sentencia INSERT. Con las tablas estándar, se anexa este contenido. Con las tablas organizadas, la fila se inserta en el lugar correcto para mantener la tabla organizada en campos clave y, en tablas de claves de control, se inserta según un algoritmo de control.
© Copyright . Reservados todos los derechos.
411
Capítulo 9: Objetos de datos complejos
Ejemplo de sintaxis: salida de una tabla interna fila por fila
Figura 182: Ejemplo de sintaxis: salida de una tabla interna fila por fila
Lea y trate el contenido de una tabla interna fila por fila mediante un LOOP. Dentro de cada ciclo, el campo de sistema sy-tabix contiene el número de fila de la entrada de tabla actual. En el ejemplo, el sistema procesa todas las filas de la tabla interna de forma consecutiva y produce la salida mediante la sentencia WRITE. Si desea modificar el contenido de la fila de tabla actual con una transferencia de loop, modifique la copia de la fila en el área de trabajo y, a continuación, vuelva a escribirla en la fila de tabla actual mediante la sentencia MODIFY. La sintaxis para ello es: MODIFY itab FROM wa.
412
© Copyright . Reservados todos los derechos.
Lección: Trabajar con tablas internas
Ejemplo de sintaxis: lectura por índice
Figura 183: Ejemplo de sintaxis: lectura por índice
En la sentencia LOOP, restrinja el acceso a filas específicas mediante el suplemento FROMTO. En el ejemplo, el sistema solo procesa las primeras cinco filas de la tabla interna consecutivamente. Utilice la sentencia READ TABLE para leer un registro individual. Utilice el suplemento INDEX para especificar el número de fila del registro requerido. Acceder a una tabla interna por índices solo es posible con tablas de índices, como la estándar y la clasificada.
© Copyright . Reservados todos los derechos.
413
Capítulo 9: Objetos de datos complejos
Ejemplo de sintaxis: lectura por clave
Figura 184: Ejemplo de sintaxis: lectura por clave
En el LOOP, restrinja el acceso a filas específicas mediante el suplemento WHERE. En el ejemplo, el sistema solo procesa las filas de tablas internas en las cuales el campo CARRID tiene el valor LH.
Consejo: Con respecto al requisito de tiempo de ejecución, el tipo más adecuado para esta clase de procesamiento es una tabla clasificada con el campo CARRID como primer campo clave. Puede utilizar la sintaxis READ TABLE en la figura para leer una fila específica de la tabla interna. En este caso, debe especificar el valor de clave completo de la entrada para leer después del suplemento WITH TABLE KEY. El código de retorno sy-subrc solo se fija a cero si se ha encontrado una fila correspondiente en la tabla interna.
Consejo: Respecto al requisito de tiempo de ejecución, una tabla de claves de control es más apropiada para este tipo de acceso si dispone de un set de datos grande. Con el suplemento WITH TABLE KEY, debe suministrar todos los campos clave con valores. Si desea suministrar un conjunto arbitrario de campos con valores, debe usar la adición WITH KEY.
414
© Copyright . Reservados todos los derechos.
Lección: Trabajar con tablas internas
Ejemplo de sintaxis: clasificar y borrar contenido
Figura 185: Ejemplo de sintaxis: clasificar y borrar contenido
Las tablas estándar y de claves de control se pueden ordenar de forma ascendente o descendente por clave de tabla o columnas arbitrarias mediante la sentencia SORT. Si no se especifica ASCENDING ni DESCENDING como orden de clasificación de un campo, éste se ordena de forma descendente por defecto. Las reglas de clasificación específicas de idioma también se pueden tener en cuenta, en caso necesario. Utilice el suplemento opcional AS TEXT para implementar la clasificación lexicográfica. En un entorno de habla alemana, por ejemplo, esto significa que la “ä” viene antes de la “b” y no después de la “z”, como ocurriría en el caso de una clasificación no lexicográfica. Cuando utilice el suplemento opcional STABLE, el orden relativo de los registros de datos que tienen claves de clasificación idénticas se mantendrán iguales durante la clasificación. Para obtener más detalles, consulte la documentación de palabra clave de la sentencia SORT. Sentencias para borrar el contenido de tabla Puede utilizar las siguientes sentencias para borrar el contenido de tabla: REFRESH
●
Esta sentencia borra todo el contenido de la tabla interna. Una parte de la memoria utilizada previamente permanece disponible para futuras inserciones. ●
CLEAR Esta sentencia tiene el mismo efecto que REFRESH para la mayoría de las tablas internas (todas las que se han definido anteriormente en el curso). Para las tablas internas con líneas de cabecera (ver más adelante), esta sentencia solo inicializa la línea de cabecera, pero no elimina el contenido de la tabla.
●
FREE
© Copyright . Reservados todos los derechos.
415
Capítulo 9: Objetos de datos complejos
Esta sentencia borra todo el contenido de la tabla interna y libera la memoria utilizada previamente. Use la sentencia FREE para tablas internas que ya se han evaluado y ya no se requieren en el transcurso del programa. De este modo ya no estará disponible la memoria necesaria.
How to Use Internal Tables Develop and demonstrate the steps of the section in front of this class.
Tablas internas en modo debugging
Figura 186: Analizar tablas en modo debugging
En el ABAP Debugger, realice un seguimiento del contenido de una tabla interna indicando el nombre de la tabla en el área Variable 1 y, a continuación, bifurcando a la visualización de tabla haciendo doble clic en el valor del nombre de la tabla en la columna Variable. De forma alternativa, seleccione la etiqueta Tabla y especifique el nombre de la tabla en el campo Tabla interna. Presione INTRO para visualizar el contenido de la tabla. Además, puede configurar un área para visualizar una tabla interna en uno de los desktops. Para visualizar una tabla interna en el ABAP Debugger clásico, la herramienta proporciona una clave con la etiqueta “Tabla”. Sin embargo, con el nuevo ABAP Debugger también puede navegar a esta visualización haciendo doble clic en el valor del nombre de la tabla.
How to Debug Internal Tables Debug program BC400_ITD_ITAB_SORT in package BC400.
416
© Copyright . Reservados todos los derechos.
Lección: Trabajar con tablas internas
Tablas internas con líneas de cabecera
Figura 187: Comparación: tablas internas con y sin líneas de cabecera
When you discuss the header line, make it very clear why this is no longer supposed to be used. Explain that it is useful to know about it, because the header line still appears in older programs. Con el suplemento WITH HEADER LINE en la definición de una tabla interna, tiene la opción de crear una tabla con una línea de cabecera. Si una tabla interna tiene una línea de cabecera, no es necesario definir un área de trabajo para esta tabla. La línea de cabecera creada automáticamente puede servir como área de trabajo para todos los accesos de esta tabla interna. Esto también simplifica la sintaxis de las declaraciones, puesto que el sistema siempre usa la línea de cabecera creada automáticamente, que ya no se debe especificar explícitamente por este motivo. Razones para no usar tablas con líneas de cabecera Ya no debe utilizar las tablas con líneas de cabecera por las siguientes razones: El área de trabajo generada automáticamente tendrá el mismo nombre que la tabla interna, lo que dificulta la legibilidad del programa.
●
●
La tabla con una línea de cabecera no se permite en los objetos de datos anidados (estructuras y tablas internas que tienen tablas internas como componentes) y objetos ABAP (extensión orientada a objetos de ABAP).
Aquí se mencionan las tablas internas con líneas de cabecera porque algunos programas antiguos todavía las utilizan y es posible que deba trabajar con programas de este tipo alguna vez. Por este motivo, se muestra una lista de más particularidades de la línea de cabecera. Si una tabla interna con una línea de cabecera se llama "itab", puede usar itab-comp para dirigirse al componente "comp" de la línea de cabecera (área de trabajo).
© Copyright . Reservados todos los derechos.
417
Capítulo 9: Objetos de datos complejos
Puede dirigirse al cuerpo de la tabla con itab[]. Esta situación se ilustra en el siguiente ejemplo: DATA itab1 TYPE TABLE OF scarr WITH HEADER LINE. DATA itab2 LIKE itab1. itab1 = itab2.
"Operation only with header lines
itab1[] = itab2[].
"Operation with the table bodies
La siguiente sintaxis también define una tabla interna con la línea de cabecera, a pesar de que no se indica específicamente. DATA: BEGIN OF itab OCCURS n, field1 TYPE ... , field2 TYPE ... , ... , END OF itab.
418
© Copyright . Reservados todos los derechos.
Capítulo 9 Ejercicio 23 395
Trabajar con tablas internas
Ejemplo empresarial Desea transferir datos de conexiones de vuelos de una tabla de base de datos a una tabla interna (como almacenamiento temporal) y emitirlos en una lista. Modelo Ninguno Solución BC400_ITS_ITAB_LOOP Busque tipos de tablas adecuados en el Dictionary ABAP, defina las tablas internas según un tipo de tabla global y procese el contenido de las tablas internas mediante un loop. Tarea 1 Cree un programa y defina una tabla interna para conexiones de vuelos dentro de la misma. 1. Cree el programa ejecutable ZBC400_##_LOOP sin ningún include TOP. Asigne el programa al paquete y a la orden de transporte. 2. Para grabar datos de conexiones de vuelos en la memoria intermedia, le recomendamos que defina la tabla interna de manera que el tipo de línea sea compatible con el tipo de estructura BC400_S_CONNECTION. En el Dictionary ABAP, busque todos los tipos de tabla que cumplen esta condición. Consejo: Visualice la estructura BC400_S_CONNECTION del Dictionary ABAP (debe situar el cursor en el nombre de la estructura). Utilice el pulsador adecuado para listar la (referencia de utilización) de BC400_S_CONNECTION. (Preste atención a la selección correcta al desencadenar la referencia de utilización). 3. Defina una tabla interna (nombre sugerido: gt_connections) basada en uno de los tipos de tabla global encontrados. 4. Defina un área de trabajo apropiada para la tabla interna (nombre sugerido: gs_connection).
Tarea 2 Rellene la tabla interna y emita el contenido en una lista.
© Copyright . Reservados todos los derechos.
419
Capítulo 9: Objetos de datos complejos
1. Obtenga los datos de conexiones de vuelos llamando al método GET_CONNECTIONS de la clase CL_BC400_FLIGHTMODEL. Seleccione la tabla interna que haya definido como parámetro transferido. 2. Si no encuentra ninguna conexión de vuelos, emita un breve mensaje en la lista. Para ello, utilice la gestión de errores de la llamada de método. 3. Utilice la sentencia LOOP para emitir en una lista los datos de la tabla interna almacenados en la memoria intermedia. 4. (OPCIONAL) Utilice la sentencia SORT para ordenar la tabla interna de forma ascendente según la hora de salida antes de que se emitan los datos en la lista.
Tarea 3 Ejecute el programa y verifique el resultado. 1. Utilice el ABAP Debugger para comprobar la presentación de la tabla interna en la lista.
420
© Copyright . Reservados todos los derechos.
Capítulo 9 Solución 23 397
Trabajar con tablas internas
Ejemplo empresarial Desea transferir datos de conexiones de vuelos de una tabla de base de datos a una tabla interna (como almacenamiento temporal) y emitirlos en una lista. Modelo Ninguno Solución BC400_ITS_ITAB_LOOP Busque tipos de tablas adecuados en el Dictionary ABAP, defina las tablas internas según un tipo de tabla global y procese el contenido de las tablas internas mediante un loop. Tarea 1 Cree un programa y defina una tabla interna para conexiones de vuelos dentro de la misma. 1. Cree el programa ejecutable ZBC400_##_LOOP sin ningún include TOP. Asigne el programa al paquete y a la orden de transporte. a) Realice este paso de la forma habitual. 2. Para grabar datos de conexiones de vuelos en la memoria intermedia, le recomendamos que defina la tabla interna de manera que el tipo de línea sea compatible con el tipo de estructura BC400_S_CONNECTION. En el Dictionary ABAP, busque todos los tipos de tabla que cumplen esta condición. Consejo: Visualice la estructura BC400_S_CONNECTION del Dictionary ABAP (debe situar el cursor en el nombre de la estructura). Utilice el pulsador adecuado para listar la (referencia de utilización) de BC400_S_CONNECTION. (Preste atención a la selección correcta al desencadenar la referencia de utilización). a) Realice este paso de la forma en que se describe. 3. Defina una tabla interna (nombre sugerido: gt_connections) basada en uno de los tipos de tabla global encontrados. a) Consulte el extracto del código fuente de la solución modelo. 4. Defina un área de trabajo apropiada para la tabla interna (nombre sugerido: gs_connection). a) Consulte el extracto del código fuente de la solución modelo.
© Copyright . Reservados todos los derechos.
421
Capítulo 9: Objetos de datos complejos
Tarea 2 Rellene la tabla interna y emita el contenido en una lista. 1. Obtenga los datos de conexiones de vuelos llamando al método GET_CONNECTIONS de la clase CL_BC400_FLIGHTMODEL. Seleccione la tabla interna que haya definido como parámetro transferido. a) Consulte el extracto del código fuente de la solución modelo. 2. Si no encuentra ninguna conexión de vuelos, emita un breve mensaje en la lista. Para ello, utilice la gestión de errores de la llamada de método. a) Consulte el extracto del código fuente de la solución modelo. 3. Utilice la sentencia LOOP para emitir en una lista los datos de la tabla interna almacenados en la memoria intermedia. a) Consulte el extracto del código fuente de la solución modelo. 4. (OPCIONAL) Utilice la sentencia SORT para ordenar la tabla interna de forma ascendente según la hora de salida antes de que se emitan los datos en la lista. a) Consulte el extracto del código fuente de la solución modelo.
Tarea 3 Ejecute el programa y verifique el resultado. 1. Utilice el ABAP Debugger para comprobar la presentación de la tabla interna en la lista. a) Fije un breakpoint de sesión en el Editor ABAP y ejecute el programa mediante (Procesamiento directo). Extracto del código fuente: REPORT
bc400_its_itab_loop.
DATA: gt_connections TYPE bc400_t_connections, gs_connection TYPE bc400_s_connection. * Get data TRY. CALL METHOD cl_bc400_flightmodel=>get_connections IMPORTING et_connections = gt_connections. CATCH cx_bc400_no_data . WRITE: / 'No data found!'(ndf). ENDTRY. SORT gt_connections ASCENDING BY deptime. * Output LOOP AT gt_connections INTO gs_connection. WRITE: / gs_connection-carrid, gs_connection-connid, gs_connection-cityfrom, gs_connection-airpfrom, gs_connection-cityto, gs_connection-airpto, gs_connection-fltime,
422
© Copyright . Reservados todos los derechos.
Lección: Trabajar con tablas internas
gs_connection-deptime, gs_connection-arrtime. ENDLOOP.
© Copyright . Reservados todos los derechos.
423
Capítulo 9: Objetos de datos complejos
RESUMEN DE LA LECCIÓN Ahora podrá:
424
●
Definir tablas internas
●
Implementar sentencias ABAP básicas con tablas internas
●
Analizar tablas internas en modo debugging
© Copyright . Reservados todos los derechos.
Capítulo 9
401
Evaluación de la formación
1. ¿Cuál de las siguientes sentencias copia el contenido de la estructura fuente en la estructura de destino de a un componente por vez? Seleccione la respuesta correcta. X
A COPY-CORRESPONDING
X
B REPLACE-CORRESPONDING
X
C MOVE-CORRESPONDING
X
D REMOVE-CORRESPONDING
2. ¿Cuál de las siguientes sentencias se utiliza para definir las clases de estructura local? Seleccione la respuesta correcta. X
A TYPES
X
B BEGIN
X
C END
X
D START
3. ¿Cuáles de las siguientes especificaciones se requieren en la definición de una tabla interna? Seleccione las respuestas correctas. X
A Tipo de línea
X
B Clave primaria
X
C Clave secundaria
X
D Clase de tabla
© Copyright . Reservados todos los derechos.
425
Capítulo 9: Evaluación de la formación
4. ¿Cuál de las siguientes opciones se utiliza para añadir una fila a una tabla interna? Seleccione la respuesta correcta.
426
X
A ADD LINE
X
B INSERT ROW
X
C APPEND
X
D UPDATE TABLE
© Copyright . Reservados todos los derechos.
Capítulo 9
403
Respuestas a la Evaluación de la formación
1. ¿Cuál de las siguientes sentencias copia el contenido de la estructura fuente en la estructura de destino de a un componente por vez? Seleccione la respuesta correcta. X
A COPY-CORRESPONDING
X
B REPLACE-CORRESPONDING
X
C MOVE-CORRESPONDING
X
D REMOVE-CORRESPONDING
2. ¿Cuál de las siguientes sentencias se utiliza para definir las clases de estructura local? Seleccione la respuesta correcta. X
A TYPES
X
B BEGIN
X
C END
X
D START
3. ¿Cuáles de las siguientes especificaciones se requieren en la definición de una tabla interna? Seleccione las respuestas correctas. X
A Tipo de línea
X
B Clave primaria
X
C Clave secundaria
X
D Clase de tabla
© Copyright . Reservados todos los derechos.
427
Capítulo 9: Respuestas a la Evaluación de la formación
4. ¿Cuál de las siguientes opciones se utiliza para añadir una fila a una tabla interna? Seleccione la respuesta correcta. X
A ADD LINE
X
B INSERT ROW
X
C APPEND
X
D UPDATE TABLE
Correcto. Use APPEND para añadir una regla a una tabla interna.
428
© Copyright . Reservados todos los derechos.
CAPÍTULO 10
Modelado y obtención de datos
Lección 1 Modelar datos Ejercicio 24: Analizar tablas transparentes en el Diccionario de datos
431 441
Lección 2 Lectura de registros de base de datos individuales Ejercicio 25: Implemente acceso a registro individual
447 455
Lección 3 Leer varios registros de base de datos Ejercicio 26: Implementar un loop SELECT Ejercicio 27: Implementar un Array Fetch
461 463 471
Lección 4 Tratar otros aspectos del acceso a base de datos
477
Lección 5 Trabajar con verificaciones de autorización Ejercicio 28: Implementar una verificación de autorización
488 495
OBJETIVOS DEL CAPÍTULO ●
Explicar la finalidad y los beneficios de los modelos de datos
●
Describir el modelo de datos de vuelo SAP
●
Explicar tablas transparentes
●
Leer registros de base de datos individuales
●
Implementar un loop SELECT
●
Implementar un array fetch
●
Leer los datos específicos de mandante
●
Usar índices de bases de datos
© Copyright . Reservados todos los derechos.
429
Capítulo 10: Modelado y obtención de datos
430
●
Explicar la memoria intermedia de tabla SAP
●
Leer los datos de varias tablas de bases de datos
●
Identificar formas de modificar datos en una tabla de base de datos
●
Explicar el concepto de autorización SAP
●
Implementar verificaciones de autorización
© Copyright . Reservados todos los derechos.
Capítulo 10 Lección 1 407
Modelar datos
RESUMEN DE LA LECCIÓN En este módulo encontrará un resumen del modelado de datos. Necesita realizar un modelado de datos antes del desarrollo de la aplicación. También aprenderá a comprender la descripción de tablas de bases de datos en Dictionary ABAP. Ejemplo empresarial Desea desarrollar un programa que acceda a las tablas de la base de datos. Para ello, necesita conocer el modelo de datos subyacente y la estructura de las tablas de base de datos. Por este motivo, se requieren los siguientes conocimientos: ●
Comprender el propósito y los beneficios de utilizar un modelo de datos en el desarrollo de la aplicación
●
Comprender el modelo de datos de vuelo de SAP
●
Comprender el significado y la estructura de una tabla transparente The participants understand the ABAP Dictionary to simply be a collection of global data types. In this lesson, you will introduce its role as a maintenance and management tool for database objects (tables).
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Explicar la finalidad y los beneficios de los modelos de datos
●
Describir el modelo de datos de vuelo SAP
●
Explicar tablas transparentes
© Copyright . Reservados todos los derechos.
431
Capítulo 10: Modelado y obtención de datos
Resumen del modelo de datos
Figura 188: Modelado de datos
En el desarrollo de aplicaciones empresariales, los aspectos relevantes del mundo real se deben representar en forma de datos. Una unidad empresarial representa a una entidad. Estas entidades están relacionadas entre sí, que están fijas en el modelo de datos subyacente, también conocido como el Structured Entity Relationship Model (SERM). El desarrollador usa este modelo de datos se utiliza como la base de la implementación de definiciones de tabla apropiadas (tablas transparentes), incluidas sus relaciones con las otras en el Dictionary ABAP. Al activar las definiciones de tabla, las tablas de base de datos correspondientes se crean automáticamente en la base de datos. Los datos de aplicación reales se indican en esas tablas más adelante.
432
© Copyright . Reservados todos los derechos.
Lección: Modelar datos
Modelo de datos de vuelo SAP
Figura 189: Modelo de datos de vuelo SAP para los cursos de formación ABAP
Consultas típicas en la agencia de viajes: ●
Aeropuertos relevantes
●
Conexiones de vuelos relevantes
●
Horarios de vuelos relevantes
●
Información relevante acerca de vuelos, por ejemplo, precio, utilización de la capacidad o disponibilidad, etc.
Los cursos de formación ABAP, la documentación online y la documentación de palabras clave ABAP utilizan el mismo modelo de datos de vuelo como ejemplo. Los objetos de Repository para el modelo de datos de vuelo se encuentran en el paquete SAPBC_DATAMODEL. In the context of this course, it is sufficient to show a simple excerpt from this data model. Los clientes de una agencia de viaje que desean volar de un lugar a otro quieren que la agencia de viaje les brinde la siguiente información específica. Información requerida: ¿Qué conexión ofrece el mejor vuelo y el más directo?
●
●
●
¿Cuáles son los horarios de vuelo aceptables en los días de viaje propuestos? ¿Qué conexiones tienen los vuelos más económicos, las conexiones más rápidas y las conexiones con horarios de llegada a destino?
Por otro lado, la agencia de viajes tiene otros requisitos. En el modelo de datos diseñado para gestionar los datos requeridos, los datos se almacenan en tablas según los criterios técnicos en una base de datos central. La cantidad de datos almacenados supera lo que se necesita para responder las órdenes del cliente.
© Copyright . Reservados todos los derechos.
433
Capítulo 10: Modelado y obtención de datos
Por ese motivo, necesita poder compilar los datos necesarios para cumplir con lo que solicita el cliente utilizando los programas de aplicación. Modelo de datos relacional
Figura 190: Modelo de datos relacional
El modelo de datos de vuelo contiene las siguientes entidades para toda la información empresarial que están conectadas de modo lógico: ● Ciudades ●
Aeropuertos
●
Compañías aéreas
●
Trayectos de vuelo
●
Vuelos
Estas entidades se relacionan entre sí de las siguientes maneras: ● Cada horario de vuelos contiene una compañía aérea, un aeropuerto de salida y un aeropuerto de destino. ●
Cada vuelo reservable pertenece a un horario de vuelo existente.
●
Cada asignación se puede fijar entre las ciudades relevantes y los aeropuertos próximos.
Puede gestionar todos los datos necesarios sin redundancias, mediante estas relaciones. Al mismo tiempo, la agencia de viajes puede obtener todos los datos solicitados por el cliente.
434
© Copyright . Reservados todos los derechos.
Lección: Modelar datos
Implementación mediante tablas transparentes
Figura 191: Implementación mediante tablas transparentes
Por cada entidad fijada en el modelo de datos, el programador crea una tabla transparente en el Dictionary ABAP. Esta es una descripción independiente de la plataforma de la tabla de base de datos y no es la tabla de base de datos real. Sin embargo, al activar la tabla transparente, el sistema crea una tabla con el mismo nombre en la base de datos. Una tabla transparente contiene distintos campos (columnas) para almacenar y gestionar registros de datos de forma estructurada. Los campos de tabla se declaran como campos clave si el contenido se debe utilizar para la identificación única de registros de datos dentro de la tabla de base de datos. La clave de una tabla (clave de tabla) consiste en campos clave. También se conoce como clave primaria. Los registros de datos de una misma tabla deben ser únicos respecto a los valores de clave primaria. El valor clave de un registro de datos es un ID único dentro de la tabla.
© Copyright . Reservados todos los derechos.
435
Capítulo 10: Modelado y obtención de datos
Tablas transparentes
Figura 192: Estructura técnica de una tabla transparente
Una tabla transparente en el Dictionary ABAP constituye la descripción de la tabla de base de datos correspondiente que contiene los datos reales que utiliza la aplicación. Los campos de la tabla transparente forman las columnas en la tabla de base de datos correspondiente con nombres idénticos. Los elementos de datos, que ya conoce como tipos de datos elementales definidos globalmente, se utilizan generalmente para describir los campos individuales. Los elementos de datos hacen referencia a dominios por sus propiedades técnicas.
436
© Copyright . Reservados todos los derechos.
Lección: Modelar datos
Tablas transparentes en el Dictionary ABAP
Figura 193: Tablas transparentes en el Dictionary ABAP
Además de la lista de campos, las tablas transparentes contienen otra información que el sistema requiere para crear una tabla del mismo nombre en la base de datos y para describir las propiedades completas de la tabla. Las tablas transparentes contienen la siguiente información adicional: ● Determinación de la clave para la tabla de base de datos (campos clave) ●
●
Propiedades técnicas requeridas por la base de datos para crear la tabla de base de datos (tamaño previsto y frecuencia de acceso prevista) Opciones para tecnologías que pueden acelerar el acceso a la tabla de base de datos (índices secundarios y almacenamiento en memoria intermedia)
© Copyright . Reservados todos los derechos.
437
Capítulo 10: Modelado y obtención de datos
Estructuras del Dictionary ABAP
Figura 194: Estructuras del Dictionary ABAP
La definición de una tabla transparente parece muy similar a la definición de un tipo de estructura global. Las tablas transparentes se pueden utilizar en programación del mismo modo que los tipos de estructura; por ejemplo, las tablas transparentes se pueden utilizar para definir un objeto de datos estructurado (variable de estructura), para tipificar un parámetro de interfaz, o como el tipo de línea de un tipo de tabla global o local. Solo es importante la lista de campos. Las otras propiedades de la tabla transparente, como la definición clave o las propiedades técnicas, son irrelevantes cuando se utiliza como tipo de datos.
438
© Copyright . Reservados todos los derechos.
Lección: Modelar datos
Tabla transparente como tipo de datos ABAP
Figura 195: Tabla transparente como tipo de datos ABAP
Consejo: En programas anteriores, se utilizaban libremente las tablas transparentes como tipos de datos. Las recomendaciones actuales utilizarán una tabla transparente directamente en conexión con el acceso a la base de datos. Sobre todo, las tablas transparentes no deberían utilizarse en el proceso de definir interfaces de usuario porque esto crea dependencia no deseada entre la definición de objetos de bases de datos o interfaces y la interfaz de usuario. Además de las propiedades relativas a la base de datos, existe otra diferencia entre las tablas transparentes y los tipos de estructura. Una tabla transparente es una lista de campos elementales, mientras que los componentes de un tipo de estructura pueden estructurarse de nuevo por si mismos (estructuras anidadas). Los componentes de una estructura pueden tipificarse con un tipo de tabla (estructuras profundas).
How to Create a Transparent Table Create a transparent table in the ABAP Dictionary with, for example, CARRID (data element S_CARR_ID) as a key field and SEATSMAX (data element S_SEATSMAX) as an additional non-key field. Point out that the structure of the database table is maintained using the Data Dictionary and that this is automatically converted in the database without having to program Native SQL statements. Maintain the technical settings, activate the transparent table, and make some entries using SE16. Make it clear that everything that is created in the Data Dictionary is known across the entire system.
© Copyright . Reservados todos los derechos.
439
Capítulo 10: Modelado y obtención de datos
440
© Copyright . Reservados todos los derechos.
Capítulo 10 Ejercicio 24 417
Analizar tablas transparentes en el Diccionario de datos
Ejemplo empresarial Desea familiarizarse con el modelo de datos de vuelo. Para ello, analice algunas de las tablas transparentes relevantes en el Dictionary ABAP y visualice el contenido de la tabla mediante el Browser de datos. Analice las propiedades de las tablas transparentes en el Dictionary ABAP y utilice el Browser de datos para obtener un resumen del contenido de la tabla. Tarea 1 Examine las propiedades de la tabla de base de datos SPFLI y analice el nombre y los tipos de datos de los campos de tabla. 1. Visualice la tabla transparente relevante. 2. Responda lo siguiente: La tabla SPFLI tiene 16 campos. ¿Cuántos de estos forman la clave para esta tabla? Seleccione la respuesta correcta. X
A 16
X
B 3
X
C 1
X
D No se define la clave
3. Responda lo siguiente: ¿Cuál es la longitud de los campos para los puntos de salida (CITYFROM) y de destino (CITYTO)? ¿Por qué tienen las mismas propiedades técnicas?
Tarea 2 Busque otras tablas de bases de datos para utilizar con el modelo de datos de vuelo. Aproveche que las tablas transparentes relevantes se encuentran en el mismo paquete. 1. En el área de navegación del Object Navigator, liste todas las tablas transparentes que pertenezcan al mismo paquete que la tabla de base de datos SPFLI.
© Copyright . Reservados todos los derechos.
441
Capítulo 10: Modelado y obtención de datos
Consejo: Acceda a la lista de objetos de forma más rápida y sin el nombre del paquete eligiendo el pulsador Visualizar lista de objetos de la visualización de tabla de base de datos SPFLI. 2. ¿En qué tabla de base de datos están situados los datos de cliente del vuelo? ¿Cuál es el nombre del campo del nombre de un cliente del vuelo?
Tarea 3 Averigüe el número de cliente del vuelo del cliente SAP AG. Determine el número de vuelos para los que el cliente SAP AG tiene una reserva. Encuentre el vuelo más inmediato, determine el punto de salida y el de destino de este vuelo, y determine si el vuelo ya está completo. 1. Utilice el Browser de datos para visualizar el contenido de la tabla de base de datos SCUSTOM para el cliente SAP AG. 2. ¿Cuál es el número de cliente del vuelo de SAP AG?
3. Visualice el contenido de la tabla de base de datos SBOOK para determinar el número de reservas del cliente SAP AG y para encontrar el vuelo más inmediato. Consejo: Los datos se regeneran antes de cada curso de formación; por ello, no es posible realizar ninguna sentencia general respecto al vuelo más inmediato en un momento determinado. 4. ¿Qué campos se pueden utilizar para identificar el vuelo correspondiente de forma única?
5. Utilice el contenido de la tabla de base de datos SPFLI para determinar el punto de salida y el destino del vuelo encontrado. 6. ¿El vuelo está completo?
442
© Copyright . Reservados todos los derechos.
Capítulo 10 Solución 24 419
Analizar tablas transparentes en el Diccionario de datos
Ejemplo empresarial Desea familiarizarse con el modelo de datos de vuelo. Para ello, analice algunas de las tablas transparentes relevantes en el Dictionary ABAP y visualice el contenido de la tabla mediante el Browser de datos. Analice las propiedades de las tablas transparentes en el Dictionary ABAP y utilice el Browser de datos para obtener un resumen del contenido de la tabla. Tarea 1 Examine las propiedades de la tabla de base de datos SPFLI y analice el nombre y los tipos de datos de los campos de tabla. 1. Visualice la tabla transparente relevante. a) Seleccione el pulsador Otro objeto. b) Seleccione la etiqueta Diccionario. c) En Tabla de base de datos, introduzca los nombres de las tablas y seleccione (Visualizar). 2. Responda lo siguiente: La tabla SPFLI tiene 16 campos. ¿Cuántos de estos forman la clave para esta tabla? Seleccione la respuesta correcta. X
A 16
X
B 3
X
C 1
X
D No se define la clave
3. Responda lo siguiente: ¿Cuál es la longitud de los campos para los puntos de salida (CITYFROM) y de destino (CITYTO)? ¿Por qué tienen las mismas propiedades técnicas? Los campos tienen una longitud de 20 caracteres. Tienen las mismas propiedades técnicas porque hacen referencia al mismo dominio, S_CITY. Tarea 2
© Copyright . Reservados todos los derechos.
443
Capítulo 10: Modelado y obtención de datos
Busque otras tablas de bases de datos para utilizar con el modelo de datos de vuelo. Aproveche que las tablas transparentes relevantes se encuentran en el mismo paquete. 1. En el área de navegación del Object Navigator, liste todas las tablas transparentes que pertenezcan al mismo paquete que la tabla de base de datos SPFLI. a) Encontrará el nombre del paquete en la etiqueta Propiedades de la tabla transparente (SAPBC_DATAMODEL). b) En el área de navegación, abra la lista de objetos de este paquete del modo habitual. Encontrará la tabla transparente en el nodo Objetos de diccionario → Tablas de base de datos.
Consejo: Acceda a la lista de objetos de forma más rápida y sin el nombre del paquete eligiendo el pulsador Visualizar lista de objetos de la visualización de tabla de base de datos SPFLI. 2. ¿En qué tabla de base de datos están situados los datos de cliente del vuelo? ¿Cuál es el nombre del campo del nombre de un cliente del vuelo? Los datos del cliente del vuelo están situados en la tabla SCUSTOM; el nombre del cliente se encuentra en el campo de tabla NAME. Tarea 3 Averigüe el número de cliente del vuelo del cliente SAP AG. Determine el número de vuelos para los que el cliente SAP AG tiene una reserva. Encuentre el vuelo más inmediato, determine el punto de salida y el de destino de este vuelo, y determine si el vuelo ya está completo. 1. Utilice el Browser de datos para visualizar el contenido de la tabla de base de datos SCUSTOM para el cliente SAP AG. a) Abra la tabla transparente SCUSTOM en el Object Navigator como lo hizo antes. b) Seleccione el pulsador Contenido para bifurcar hacia el Browser de datos. c) Introduzca el nombre de cliente como selección y seleccione el pulsador Ejecutar. 2. ¿Cuál es el número de cliente del vuelo de SAP AG? El número de cliente de vuelo de SAP AG es 00000001. 3. Visualice el contenido de la tabla de base de datos SBOOK para determinar el número de reservas del cliente SAP AG y para encontrar el vuelo más inmediato. a) Proceda de forma similar al paso anterior para visualizar el contenido de la tabla de base de datos SBOOK. Especifique el número de cliente de vuelo para limitar el contenido. b) El número de reservas encontradas (aciertos) se especifica en la barra de título de la pantalla.
444
© Copyright . Reservados todos los derechos.
Lección: Modelar datos
c) Ordene la visualización de acuerdo con la fecha del vuelo para determinar la reserva más inmediata.
Consejo: Los datos se regeneran antes de cada curso de formación; por ello, no es posible realizar ninguna sentencia general respecto al vuelo más inmediato en un momento determinado. 4. ¿Qué campos se pueden utilizar para identificar el vuelo correspondiente de forma única? Los campos clave necesarios son Mandante (MANDT), Código de compañía aérea (CARRID), Número de conexión (CONNID) y Fecha de vuelo (FLDATE). 5. Utilice el contenido de la tabla de base de datos SPFLI para determinar el punto de salida y el destino del vuelo encontrado. a) Al visualizar los datos, limite el ID de compañía aérea y el número de vuelo al vuelo encontrado anteriormente. b) Encontrará el punto de salida y el destino en los campos CITYFROM y CITYTO, y los aeropuertos de salida y de llegada en los campos AIRPFROM y AIRPTO. 6. ¿El vuelo está completo? a) Visualice el contenido de la tabla de base de datos SFLIGHT. b) Limite la visualización al código de compañía aérea, el número de vuelo y la fecha del vuelo determinado anteriormente. c) Encontrará el número de asientos ocupados y el número máximo de asientos disponibles en los campos SEATSOCC y SEATSMAX.
© Copyright . Reservados todos los derechos.
445
Capítulo 10: Modelado y obtención de datos
RESUMEN DE LA LECCIÓN Ahora podrá:
446
●
Explicar la finalidad y los beneficios de los modelos de datos
●
Describir el modelo de datos de vuelo SAP
●
Explicar tablas transparentes
© Copyright . Reservados todos los derechos.
Capítulo 10 Lección 2 423
Lectura de registros de base de datos individuales
RESUMEN DE LA LECCIÓN Este módulo finaliza con una nota acerca de los tipos de accesos a base de datos que inician el cambio. Ejemplo empresarial Necesita evaluar datos de tablas de base de datos. Como no existen componentes de reutilización adecuados para acceder a las tablas de base de datos que desea leer, implementará nuevos componentes. Por este motivo, se requieren los siguientes conocimientos: ●
●
Comprender los varios métodos para buscar tablas de bases de datos relevantes Comprender cómo programar el acceso de lectura para las columnas y filas específicas dentro de una tabla de base de datos determinada The ABAP Open Structured Query Language (SQL) will be particularly useful to participants who are familiar with platform-specific SQL, but need better porting capabilities.
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Leer registros de base de datos individuales
© Copyright . Reservados todos los derechos.
447
Capítulo 10: Modelado y obtención de datos
Obtención de datos con lenguaje de consulta estructurado
Figura 196: Acceso a base de datos (arquitectura)
El lenguaje de consulta estructurado (SQL) permite que los programas definan, modifiquen y accedan a las tablas de bases de datos. Todo sistema de base de datos relacional tiene un SQL nativo que es específico a la base de datos. Por eso, un programa ABAP con sentencias SQL nativas no se puede utilizar sin restricciones en todos los otros sistemas SAP a causa de los distintos sistemas de base de datos de los diferentes sistemas SAP. Por el contrario, Open SQL es un SQL estándar e independiente de la base de datos definido por SAP para el lenguaje ABAP. El sistema convierte dinámicamente las sentencias Open SQL a sentencias SQL nativas del sistema de base de datos destino y, de esa forma, las sentencias Open SQL siguen siendo independientes de la base de datos. Open SQL permite al programador de ABAP un acceso uniforme a los datos, independientemente del sistema de base de datos instalado. Buscar tablas de base de datos Opciones para buscar bases de datos requeridas: ●
Buscar por aplicación Buscar dentro de un componente de aplicación concreto, en la jerarquía de aplicación.
●
Buscar por programa Buscar dentro de un programa que accede a la tabla que se busca: -
448
Búsqueda en código fuente: buscar sentencias SELECT en el Editor ABAP.
© Copyright . Reservados todos los derechos.
Lección: Lectura de registros de base de datos individuales
-
-
Debugging de función: pasar al modo debugging (/h) antes de ejecutar una subfunción y fijar un breakpoint en la sentencia SELECT. Información del campo de pantalla: visualizar un campo de estructura correspondiente mediante F1 + Información técnica, navegue al elemento de datos relevante y realice una consulta de referencia de utilización en campos de tabla.
También puede ejecutar una búsqueda libre mediante el Sistema de información de Repository. Antes de programar accesos directos a las tablas de base de datos, busque componentes de reutilización encargados del proceso de lectura. La figura proporciona un resumen de las rutinas de lectura suministradas por SAP que puede utilizar en su programa. Componentes de reutilización para la obtención de datos
Figura 197: Componentes de reutilización para la obtención de datos
Los tipos de componentes de reutilización que encapsulan los accesos a la base de datos son los siguientes: ● Bases de datos lógicas Las bases de datos lógicas son programas de obtención de datos que leen datos de tablas que van juntas de manera jerárquica. ●
Módulos de funciones Los módulos de funciones son procedimientos almacenados en la biblioteca de funciones del sistema SAP con funciones encapsuladas, como leer de tablas relacionadas de manera jerárquica.
●
Business Application Programming Interfaces (BAPI) Entre los ejemplos de BAPI se incluyen métodos de business objects con funciones de lectura.
© Copyright . Reservados todos los derechos.
449
Capítulo 10: Modelado y obtención de datos
●
Métodos de clases globales For detailed information about searching for and using logical databases, refer to the online documentation for the ABAP programming and runtime environment section on ABAP database access, or course BC405. Information about three other techniques is available in the relevant units.
Si no existen componentes de reutilización disponibles para la selección de datos, implemente el acceso de lectura con los siguientes métodos. Encapsule el acceso en un componente de reutilización; es decir, cree módulos de funciones o métodos de clases globales. Acceso de lectura a base de datos (resumen)
Figura 198: Acceso de lectura a base de datos (resumen)
Use la sentencia Open SQL SELECT para programar el acceso de lectura a la base de datos. La sentencia SELECT contiene una serie de cláusulas, cada una de las cuales tiene una tarea distinta como las siguientes: ● La cláusula SELECT nombra los campos de la tabla que se leerán. ●
●
●
La cláusula FROM nombra la fuente (tabla o vista de base de datos) desde la cual se deben seleccionar los datos. La cláusula INTO determina la variable de destino en la cual se deben colocar los datos seleccionados. La cláusula WHERE especifica las columnas de la tabla que se deben seleccionar.
Para obtener información acerca de otras cláusulas, consulte la documentación de palabra clave de la sentencia SELECT.
450
© Copyright . Reservados todos los derechos.
Lección: Lectura de registros de base de datos individuales
Leer una fila de datos
Figura 199: Lectura de registros individuales
La sentencia SELECT SINGLE permite leer un registro individual de la tabla de base de datos. Para garantizar un acceso único, rellene todos los campos clave con la cláusula WHERE. El campo de mandante es una excepción. Si no se especifica nada, se aplica el mandante actual. Un mandante solo se puede especificar en la sentencia SELECT en combinación con el suplemento CLIENT SPECIFIED. Use un asterisco (*) para especificar que se leerán todos los campos seleccionados de la fila de la tabla. Si solo desea una selección específica de columnas, reemplace el * con una lista de los campos requeridos, como se muestra en la siguiente figura. Use la cláusula INTO para especificar la variable de destino en la cual se debe copiar el registro de datos. La estructura de destino debe estar justificada a la izquierda del mismo modo que la lista de campos. Si el sistema encuentra un registro apropiado, SY-SUBRC devuelve el valor 0.
© Copyright . Reservados todos los derechos.
451
Capítulo 10: Modelado y obtención de datos
Estructura de destino correspondiente de la lista de campos
Figura 200: Estructura de destino correspondiente de la lista de campos
Si desea leer solo una selección determinada de campos de la fila de la tabla, especifíquelas como lista de campos dentro de la sentencia SELECT (como se muestra en la figura). A continuación, nombre una variable de estructura de destino en la cláusula INTO que tenga la misma estructura que la lista de campos (al menos al principio); es decir, que contenga los nombres de los campos de la lista en el mismo orden. Sólo es necesario que coincidan los tipos de campo correspondientes. Los nombres de los campos de estructura de destino no se tendrán en cuenta. De forma alternativa, enumere los campos de destino correspondientes en la cláusula INTO de la siguiente manera: INTO (field_1, ... , field_n).
452
© Copyright . Reservados todos los derechos.
Lección: Lectura de registros de base de datos individuales
Campos de la estructura de destino con los mismos nombres que los de la lista de campos
Figura 201: Campos de la estructura de destino con los mismos nombres que los de la lista de campos
Si desea utilizar una variable de estructura para recibir el registro de lectura, que tiene campos con el mismo nombre que los campos de la lista de destino, pero con una estructura distinta (campos adicionales, orden de campos distinto), utilice el suplemento CORRESPONDING FIELDS OF. Esto hace que el sistema solo complete los campos del área de destino que tiene el mismo nombre que los campos de la tabla de base de datos. Asegúrese de que los tipos de campo sean los mismos para los campos correspondientes; en caso contrario (como en la sentencia MOVE), se inicia una conversión y es posible que solo se transporten datos incompletos (causados por bloqueos) a los campos de destino. Las siguientes son las ventajas de utilizar INTO CORRESPONDING FIELDS OF: ● La estructura de destino no debe estar justificada a la izquierda del mismo modo que la lista de campos. ●
La construcción es fácil de actualizar, porque la extensión de la lista de campos o de la estructura de destino no requiere la realización de otras modificaciones en el programa, siempre que exista un campo de la estructura con el mismo nombre (y si es posible, del mismo tipo también). At this point, ask the participants to do the exercise on single record access (SELECT SINGLE).
How to Read a Single Row of Data Develop and demonstrate the functionality of SELECT SINGLE.
© Copyright . Reservados todos los derechos.
453
Capítulo 10: Modelado y obtención de datos
454
© Copyright . Reservados todos los derechos.
Capítulo 10 Ejercicio 25 431
Implemente acceso a registro individual
Ejemplo empresarial Desea desarrollar un programa en el cual se lean los datos de una única conexión de vuelos desde la base de datos. Encapsule el acceso a la base de datos requerido mediante un acceso a registro individual en un módulo de funciones, de manera que pueda reutilizarlo. Modelo Ninguno Solución BC400_DDS (grupo de funciones) BC400_DDS_CONNECTION_GET (módulo de funciones) Cree un grupo de funciones y un módulo de funciones, y lea desde la base de datos mediante un acceso a registro individual. Tarea 1 Cree un grupo de funciones. 1. Cree un nuevo grupo de funciones en el paquete (nombre sugerido: ZBC400_##).
Tarea 2 Cree un nuevo módulo de funciones en el grupo de funciones. Actualice la interfaz del módulo de funciones de manera que importe un ID de compañía aérea y un número de conexión de vuelos, y que devuelva los datos de la conexión de vuelos. Presente una excepción por el caso en el que no se encuentran datos. 1. Cree un nuevo módulo de funciones en su grupo de funciones (nombre sugerido: Z_BC400_##_CONNECTION_GET). 2. Cree un parámetro para export para los datos detallados de una conexión de vuelos (nombre sugerido: ES_CONNECTION). Para el tipo de datos del parámetro, utilice el tipo de estructura de diccionario BC400_S_CONNECTION. 3. Cree un parámetro para import separado para el ID de la compañía aérea y el número de conexión (nombres sugeridos: IV_CARRID y IV_CONNID). Para el tipo de datos del parámetro, seleccione componentes apropiados del tipo de estructura de diccionario BC400_S_CONNECTION. 4. Cree una excepción (clásica) (nombre sugerido: NO_DATA).
Tarea 3
© Copyright . Reservados todos los derechos.
455
Capítulo 10: Modelado y obtención de datos
En el código fuente del módulo de funciones, implemente un acceso a registro individual a la tabla de base de datos SPFLI. Para ello, utilice los parámetros de interfaz del módulo de funciones. Presente una excepción por el caso en el que no se encuentran datos para la selección. 1. Implemente un acceso a registro individual (SELECT SINGLE) a la tabla de base de datos SPFLI que rellene con valores el parámetro para export del módulo de funciones. Realice una lista de todos los campos de tabla que aparecen como componentes en el parámetro para export. Asegúrese de que el orden de los campos coincide con el orden de los componentes de estructura. 2. Aplique una selección de condición (cláusula WHERE) a la sentencia SELECT. Para ello, utilice ambos parámetros para import del módulo de funciones. 3. Presente la excepción para el módulo de funciones si el acceso a la base de datos no devuelve datos (sy-subrc 0).
Tarea 4 Active y realice un test del módulo de funciones. 1. Activar el módulo de funciones. 2. Pruebe su módulo de funciones. Consejo: Verifique también que se muestre la excepción si se produce un error.
456
© Copyright . Reservados todos los derechos.
Capítulo 10 Solución 25 433
Implemente acceso a registro individual
Ejemplo empresarial Desea desarrollar un programa en el cual se lean los datos de una única conexión de vuelos desde la base de datos. Encapsule el acceso a la base de datos requerido mediante un acceso a registro individual en un módulo de funciones, de manera que pueda reutilizarlo. Modelo Ninguno Solución BC400_DDS (grupo de funciones) BC400_DDS_CONNECTION_GET (módulo de funciones) Cree un grupo de funciones y un módulo de funciones, y lea desde la base de datos mediante un acceso a registro individual. Tarea 1 Cree un grupo de funciones. 1. Cree un nuevo grupo de funciones en el paquete (nombre sugerido: ZBC400_##). a) En el área de navegación, abra el menú contextual del paquete y seleccione Crear → Grupo de funciones. b) Indique el nombre del grupo de funciones y un texto breve y seleccione Grabar. c) Asigne el grupo de funciones al paquete y a la orden de la forma habitual.
Tarea 2 Cree un nuevo módulo de funciones en el grupo de funciones. Actualice la interfaz del módulo de funciones de manera que importe un ID de compañía aérea y un número de conexión de vuelos, y que devuelva los datos de la conexión de vuelos. Presente una excepción por el caso en el que no se encuentran datos. 1. Cree un nuevo módulo de funciones en su grupo de funciones (nombre sugerido: Z_BC400_##_CONNECTION_GET). a) En el área de navegación, abra el menú contextual de su grupo de funciones y seleccione Crear → Módulo de funciones. b) Indique el nombre del módulo de funciones y un texto breve y seleccione Grabar. 2. Cree un parámetro para export para los datos detallados de una conexión de vuelos (nombre sugerido: ES_CONNECTION). Para el tipo de datos del parámetro, utilice el tipo de estructura de diccionario BC400_S_CONNECTION.
© Copyright . Reservados todos los derechos.
457
Capítulo 10: Modelado y obtención de datos
a) Abra la etiqueta Exportar. Indique el nombre del parámetro y el tipo de datos. 3. Cree un parámetro para import separado para el ID de la compañía aérea y el número de conexión (nombres sugeridos: IV_CARRID y IV_CONNID). Para el tipo de datos del parámetro, seleccione componentes apropiados del tipo de estructura de diccionario BC400_S_CONNECTION. a) Abra la etiqueta Importar. Indique el nombre de los parámetros y los tipos de datos. 4. Cree una excepción (clásica) (nombre sugerido: NO_DATA). a) Abra la etiqueta Excepciones. Indique el nombre de la excepción y un texto breve. No debe seleccionar el campo Clases de excepciones.
Tarea 3 En el código fuente del módulo de funciones, implemente un acceso a registro individual a la tabla de base de datos SPFLI. Para ello, utilice los parámetros de interfaz del módulo de funciones. Presente una excepción por el caso en el que no se encuentran datos para la selección. 1. Implemente un acceso a registro individual (SELECT SINGLE) a la tabla de base de datos SPFLI que rellene con valores el parámetro para export del módulo de funciones. Realice una lista de todos los campos de tabla que aparecen como componentes en el parámetro para export. Asegúrese de que el orden de los campos coincide con el orden de los componentes de estructura. a) Véase el extracto del código fuente de la solución modelo. 2. Aplique una selección de condición (cláusula WHERE) a la sentencia SELECT. Para ello, utilice ambos parámetros para import del módulo de funciones. a) Véase el extracto del código fuente de la solución modelo. 3. Presente la excepción para el módulo de funciones si el acceso a la base de datos no devuelve datos (sy-subrc 0). a) Véase el extracto del código fuente de la solución modelo.
Tarea 4 Active y realice un test del módulo de funciones. 1. Activar el módulo de funciones. a) En la barra de herramientas Biblioteca de funciones, seleccione el pulsador Activar. 2. Pruebe su módulo de funciones. Consejo: Verifique también que se muestre la excepción si se produce un error.
a) En la barra de herramientas Biblioteca de funciones, seleccione el pulsador Verificar/ Ejecutar. b) Introduzca valores en los parámetros para import y pulse Ejecutar.
458
© Copyright . Reservados todos los derechos.
Lección: Lectura de registros de base de datos individuales
c) Verifique el resultado. Extracto del código fuente: módulo de funciones: FUNCTION BC400_DDS_CONNECTION_GET . *"--------------------------------------------------------*" IMPORTING *" REFERENCE(IV_CARRID) TYPE BC400_S_CONNECTION-CARRID *" REFERENCE(IV_CONNID) TYPE BC400_S_CONNECTION-CONNID *" EXPORTING *" REFERENCE(ES_CONNECTION) TYPE BC400_S_CONNECTION *" EXCEPTIONS *" NO_DATA *"--------------------------------------------------------SELECT SINGLE carrid connid cityfrom airpfrom cityto airpto fltime deptime arrtime FROM spfli INTO es_connection WHERE carrid = iv_carrid AND connid = iv_connid. IF sy-subrc 0. RAISE no_data. ENDIF. ENDFUNCTION.
© Copyright . Reservados todos los derechos.
459
Capítulo 10: Modelado y obtención de datos
RESUMEN DE LA LECCIÓN Ahora podrá: ●
460
Leer registros de base de datos individuales
© Copyright . Reservados todos los derechos.
Capítulo 10 Lección 3 437
Leer varios registros de base de datos
RESUMEN DE LA LECCIÓN Esta lección explica cómo leer múltiples registros de datos de la misma tabla de base de datos. Ejemplo empresarial Necesita evaluar datos de tablas de base de datos. Pero en vez de leer y procesar de a un registro, desea leer y procesar un conjunto de registros de datos. Por este motivo, se requieren los siguientes conocimientos: ●
Comprender cómo implementar un loop SELECT
●
Comprender cómo implementar un array fetch
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Implementar un loop SELECT
●
Implementar un array fetch
Leer varias filas de datos mediante un loop
Figura 202: Leer varias filas mediante un loop
© Copyright . Reservados todos los derechos.
461
Capítulo 10: Modelado y obtención de datos
Puede utilizar el loop SELECT para leer varias filas de una tabla de base de datos sucesivamente en el programa. La cláusula WHERE determina las líneas que se leen en la estructura de destino y que se procesan mediante el bloque de sentencias especificado en el cuerpo del loop. Puede conectar varias condiciones lógicas dentro de la cláusula WHERE de forma lógica mediante AND u OR. La base de datos suministra los datos a la interfaz de base de datos del servidor de aplicación en paquetes. La interfaz de base de datos copia los registros al área de destino fila por fila para su procesamiento en el bloque de procesamiento entre SELECT y ENDSELECT. El loop se abandona automáticamente una vez leídas y evaluadas todas las filas requeridas. Debe consultar el valor de retorno después del loop SELECT, es decir, después de la sentencia ENDSELECT. El sy-subrc regresa un valor 0 si el sistema ha leído como mínimo una fila. En este caso, sy-dbcnt contiene el número de registros leídos.
How to Read Several Rows Using a Loop Demonstrate the steps listed in the Implement a SELECT Loop exercise.
462
© Copyright . Reservados todos los derechos.
Capítulo 10 Ejercicio 26 439
Implementar un loop SELECT
Ejemplo empresarial Desea desarrollar un programa en el cual se lean todos los horarios de vuelo para una conexión de vuelos individual desde la base de datos. Encapsule el acceso a la base de datos requerido mediante un loop de SELECT en un módulo de funciones, de manera que pueda reutilizarlo. Lea de la base de datos mediante un loop SELECT y rellene el registro por registro de una tabla interna. Modelo Ninguno Solución BC400_DDS (grupo de funciones) BC400_DDS_FLIGHTLIST_GET (módulo de funciones) Tarea 1 Cree un grupo de funciones si no existe ninguno todavía. 1. Cree un nuevo grupo de funciones en el paquete (nombre sugerido: ZBC400_##).
Tarea 2 Cree un nuevo módulo de funciones en el grupo de funciones. Actualice la interfaz del módulo de funciones de manera que importe un ID de compañía aérea y un número de conexión de vuelos, y que devuelva una lista de los horarios de vuelo. Presente una excepción por el caso en el que no se encuentran datos para la selección. 1. Cree un nuevo módulo de funciones en su grupo de funciones (nombre sugerido: Z_BC400_##_FLIGHTLIST_GET). 2. Cree un parámetro para export para la lista de fechas de vuelos (nombre sugerido: ET_FLIGHTS). Para la clase de datos del parámetro, use el tipo de tabla de diccionario BC400_T_FLIGHTS. 3. Cree un parámetro para import separado para el ID de compañía aérea y el número de conexión (nombres sugeridos: IV_CARRID y IV_CONNID). Para tipificar, seleccione componentes apropiados del tipo de estructura BC400_S_FLIGHT (tipo de línea del tipo de tabla BC400_T_FLIGHTS). 4. Defina una excepción clásica (nombre sugerido: NO_DATA).
Tarea 3
© Copyright . Reservados todos los derechos.
463
Capítulo 10: Modelado y obtención de datos
En el código fuente del módulo de funciones, implemente un loop SELECT a la tabla de base de datos SFLIGHT. Asegúrese de que el parámetro para export del módulo de funciones se rellene con una fila nueva en cada transferencia de loop. Presente una excepción si no se encuentran datos para la selección. 1. Declare un objeto de datos local y estructurado en el módulo de funciones (nombre sugerido: ls_flight) que se pueda utilizar como área de trabajo para el parámetro para export (tabla interna). 2. Implemente un loop SELECT en la tabla de base de datos SFLIGHT que rellene el objeto de datos locales con valores en cada transferencia de loop. Liste todos los campos de tabla que aparecen como componentes en el tipo de línea del parámetro para export. Asegúrese de que el orden de los campos coincide con el orden de los componentes de estructura. 3. Aplique una selección de condición (cláusula WHERE) a la sentencia SELECT. Para ello, utilice ambos parámetros para import del módulo de funciones. 4. Utilice el objeto de datos local para añadir una nueva línea al parámetro para export para cada transferencia de loop (sentencia APPEND). Calcule previamente el uso de cada registro de datos como porcentaje dentro del loop (componente de estructura PERCENTAGE). Para ello, utilice el número máximo de asientos y el número de asientos ocupados (componentes de estructura SEATSMAX y SEATSOCC). 5. Asegúrese de que el parámetro para export no contenga datos antes de la primera transferencia de loop. Consejo: Si fija la llamada por valor para el parámetro para export, el parámetro será inicial antes de cada llamada de módulo de funciones. Para parámetros de tipo de tabla, se recomienda la llamada por transferencia por motivos de rendimiento. En este caso, el parámetro para export puede contener ya datos si el módulo de funciones es llamado con un parámetro real no inicial. 6. Presente la excepción para el módulo de funciones si el acceso a la base de datos no devuelve datos (sy-subrc 0). 7. (OPCIONAL) Después de haber llamado correctamente la sentencia SELECT, clasifique la lista de vuelos en orden descendente de acuerdo con el porcentaje de utilización antes de devolver los datos.
Tarea 4 Active y realice un test del módulo de funciones. 1. Activar el módulo de funciones. 2. Pruebe su módulo de funciones.
464
© Copyright . Reservados todos los derechos.
Capítulo 10 Solución 26 441
Implementar un loop SELECT
Ejemplo empresarial Desea desarrollar un programa en el cual se lean todos los horarios de vuelo para una conexión de vuelos individual desde la base de datos. Encapsule el acceso a la base de datos requerido mediante un loop de SELECT en un módulo de funciones, de manera que pueda reutilizarlo. Lea de la base de datos mediante un loop SELECT y rellene el registro por registro de una tabla interna. Modelo Ninguno Solución BC400_DDS (grupo de funciones) BC400_DDS_FLIGHTLIST_GET (módulo de funciones) Tarea 1 Cree un grupo de funciones si no existe ninguno todavía. 1. Cree un nuevo grupo de funciones en el paquete (nombre sugerido: ZBC400_##). a) En el área de navegación, abra el menú contextual del paquete y seleccione Crear → Grupo de funciones. b) Indique el nombre del grupo de funciones y un texto breve y seleccione Grabar. c) Asigne el grupo de funciones al paquete y entregue su orden de la forma habitual.
Tarea 2 Cree un nuevo módulo de funciones en el grupo de funciones. Actualice la interfaz del módulo de funciones de manera que importe un ID de compañía aérea y un número de conexión de vuelos, y que devuelva una lista de los horarios de vuelo. Presente una excepción por el caso en el que no se encuentran datos para la selección. 1. Cree un nuevo módulo de funciones en su grupo de funciones (nombre sugerido: Z_BC400_##_FLIGHTLIST_GET). a) En el área de navegación, abra el menú contextual de su grupo de funciones y seleccione Crear → módulo de funciones. b) Indique el nombre del módulo de funciones y un texto breve y seleccione Grabar.
© Copyright . Reservados todos los derechos.
465
Capítulo 10: Modelado y obtención de datos
2. Cree un parámetro para export para la lista de fechas de vuelos (nombre sugerido: ET_FLIGHTS). Para la clase de datos del parámetro, use el tipo de tabla de diccionario BC400_T_FLIGHTS. a) Abra la etiqueta Exportar. Indique el nombre del parámetro y el tipo de datos. 3. Cree un parámetro para import separado para el ID de compañía aérea y el número de conexión (nombres sugeridos: IV_CARRID y IV_CONNID). Para tipificar, seleccione componentes apropiados del tipo de estructura BC400_S_FLIGHT (tipo de línea del tipo de tabla BC400_T_FLIGHTS). a) Abra la etiqueta Importar. Indique el nombre de los parámetros y los tipos de datos. 4. Defina una excepción clásica (nombre sugerido: NO_DATA). a) Abra la etiqueta Excepciones. Indique el nombre de la excepción y un texto breve. No seleccione el campo Clases de excepciones.
Tarea 3 En el código fuente del módulo de funciones, implemente un loop SELECT a la tabla de base de datos SFLIGHT. Asegúrese de que el parámetro para export del módulo de funciones se rellene con una fila nueva en cada transferencia de loop. Presente una excepción si no se encuentran datos para la selección. 1. Declare un objeto de datos local y estructurado en el módulo de funciones (nombre sugerido: ls_flight) que se pueda utilizar como área de trabajo para el parámetro para export (tabla interna). a) Declare el objeto de datos bien con referencia directa al tipo de línea (tipo de estructura de diccionario BC400_S_FLIGHT) o bien relativa al parámetro para export (LIKE LINE OF). b) Véase el extracto del código fuente de la solución modelo. 2. Implemente un loop SELECT en la tabla de base de datos SFLIGHT que rellene el objeto de datos locales con valores en cada transferencia de loop. Liste todos los campos de tabla que aparecen como componentes en el tipo de línea del parámetro para export. Asegúrese de que el orden de los campos coincide con el orden de los componentes de estructura. a) Véase el extracto del código fuente de la solución modelo. 3. Aplique una selección de condición (cláusula WHERE) a la sentencia SELECT. Para ello, utilice ambos parámetros para import del módulo de funciones. a) Véase el extracto del código fuente de la solución modelo. 4. Utilice el objeto de datos local para añadir una nueva línea al parámetro para export para cada transferencia de loop (sentencia APPEND). Calcule previamente el uso de cada registro de datos como porcentaje dentro del loop (componente de estructura PERCENTAGE). Para ello, utilice el número máximo de asientos y el número de asientos ocupados (componentes de estructura SEATSMAX y SEATSOCC). a) Véase el extracto del código fuente de la solución modelo. 5. Asegúrese de que el parámetro para export no contenga datos antes de la primera transferencia de loop.
466
© Copyright . Reservados todos los derechos.
Lección: Leer varios registros de base de datos
Consejo: Si fija la llamada por valor para el parámetro para export, el parámetro será inicial antes de cada llamada de módulo de funciones. Para parámetros de tipo de tabla, se recomienda la llamada por transferencia por motivos de rendimiento. En este caso, el parámetro para export puede contener ya datos si el módulo de funciones es llamado con un parámetro real no inicial. a) Sentencia REFRESH. Véase el extracto del código fuente de la solución modelo. 6. Presente la excepción para el módulo de funciones si el acceso a la base de datos no devuelve datos (sy-subrc 0). a) Véase el extracto del código fuente de la solución modelo. 7. (OPCIONAL) Después de haber llamado correctamente la sentencia SELECT, clasifique la lista de vuelos en orden descendente de acuerdo con el porcentaje de utilización antes de devolver los datos. a) Sentencia SORT. Véase el extracto del código fuente de la solución modelo.
Tarea 4 Active y realice un test del módulo de funciones. 1. Activar el módulo de funciones. a) En la barra de herramientas Biblioteca de funciones, seleccione el pulsador Activar. 2. Pruebe su módulo de funciones. a) En la barra de herramientas Biblioteca de funciones, seleccione el pulsador Verificar/ Ejecutar. b) Introduzca valores en los parámetros para import y pulse Ejecutar. c) Verifique el resultado. Nota: Verifique también que se muestre la excepción si se produce un error. Extracto del código fuente: módulo de funciones: FUNCTION bc400_dds_flightlist_get. *"----------------------------------------------------*" IMPORTING *" REFERENCE(IV_CARRID) TYPE BC400_S_FLIGHT-CARRID *" REFERENCE(IV_CONNID) TYPE BC400_S_FLIGHT-CONNID *" EXPORTING *" REFERENCE(ET_FLIGHTS) TYPE BC400_T_FLIGHTS *" EXCEPTIONS *" NO_DATA *"----------------------------------------------------DATA ls_flight TYPE bc400_s_flight. REFRESH et_flights.
© Copyright . Reservados todos los derechos.
467
Capítulo 10: Modelado y obtención de datos
SELECT carrid connid fldate seatsmax seatsocc FROM sflight INTO ls_flight WHERE carrid = iv_carrid AND connid = iv_connid. ls_flight-percentage = ls_flight-seatsocc / ls_flight-seatsmax * 100. APPEND ls_flight TO et_flights. ENDSELECT. IF sy-subrc 0. RAISE no_data. ELSE. SORT et_flights BY percentage DESCENDING. ENDIF. ENDFUNCTION.
468
© Copyright . Reservados todos los derechos.
Lección: Leer varios registros de base de datos
Leer varias filas de datos mediante un Array Fetch
Figura 203: Lectura de varias filas de datos mediante un Array Fetch
Puede utilizar el suplemento INTO TABLE para copiar la parte seleccionada de la base de datos en una tabla interna directamente, en lugar de fila por fila. Esta técnica se conoce como array fetch. Es una técnica de alto rendimiento para rellenar una tabla interna con entradas de una tabla de basa de datos, puesto que el transporte de datos se realiza en bloques y no por filas. Un Array Fetch no es un tipo de procesamiento de loop, por ellos, no se requiere ni se permite una sentencia ENDSELECT. Del mismo modo que las variantes SELECT, la tabla interna especificada como de destino en el Array Fetch se debe estructurar con justificación a la izquierda como la lista de campos. Si la tabla interna no cumple este requisito previo, debe utilizar el suplemento INTO CORRESPONDING FIELDS OF TABLE en lugar del suplemento INTO TABLE. Allí, las columnas de base de datos especificadas en la lista de campos se copian en las columnas de la tabla interna que tienen los mismos nombres. Asegúrese de que los tipos de campo de las columnas correspondientes coincidan para evitar conversiones complejas y posiblemente transferencia de datos incompletos en la tabla de destino. Con Array Fetch, se sobrescribe el contenido que pueda estar presente en la tabla interna. Si en lugar de sobrescribir desea adjuntar filas, utilice el suplemento APPENDING TABLE. Si el sistema copia, al menos, un registro en la tabla interna, sy-subrc devuelve el valor de 0. El número de filas que se copiaron se devuelve en sy-dbcnt.
How to Read Several Rows Using an Array Fetch Demonstrate the steps listed in the Implement an Array Fetch exercise.
© Copyright . Reservados todos los derechos.
469
Capítulo 10: Modelado y obtención de datos
470
© Copyright . Reservados todos los derechos.
Capítulo 10 Ejercicio 27 447
Implementar un Array Fetch
Ejemplo empresarial Desea desarrollar un programa en el cual se lean todos los horarios de vuelo para una conexión de vuelos individual desde la base de datos. Encapsule el acceso a la base de datos requerido mediante un Array Fetch en un módulo de funciones, de manera que pueda reutilizarlo. Modelo BC400_DDS (grupo de funciones) BC400_DDS_FLIGHTLIST_GET (módulo de funciones) Solución BC400_DDS (grupo de funciones) BC400_DDS_FLIGHTLIST_GET_OPT (módulo de funciones) Lea de la base de datos mediante un array fetch y rellene completamente una tabla interna. Tarea 1 Cree un grupo de funciones si no existe ninguno todavía. 1. Cree un nuevo grupo de funciones en el paquete (nombre sugerido: ZBC400_##).
Tarea 2 Copie el módulo de funciones BC400_DDS_FLIGHTLIST_GET del grupo de funciones BC400_DDS o su propio módulo de funciones Z_BC400_##_FLIGHTLIST_GET con un nombre nuevo en su propio módulo de funciones. 1. Copie el módulo de funciones (nombre nuevo: Z_BC400_##_FLIGHTLIST_GET_OPT).
Tarea 3 Transforme el loop SELECT en un comentario y sustitúyalo por un acceso a base de datos en el que el parámetro para export del módulo de funciones (tabla interna) se rellene directamente con datos (Array Fetch). Implemente un loop a través de la tabla interna para calcular el porcentaje de utilización de cada hora de vuelo. 1. Transforme todo el loop SELECT de SELECT a ENDSELECT en un comentario. 2. Sustituya el loop SELECT con un array fetch que rellene directamente el parámetro para export del módulo de funciones. Utilice la misma lista de campos y la condición WHERE que para el loop SELECT.
© Copyright . Reservados todos los derechos.
471
Capítulo 10: Modelado y obtención de datos
3. Implemente un loop a través de la tabla interna (LOOP ... ENDLOOP). El loop sólo debe ejecutarse si el acceso a la base de datos devuelve datos. Utilice el objeto de datos estructurado local como área de trabajo y calcule el porcentaje de utilización dentro del loop como antes. 4. Utilice la sentencia MODIFY para escribir la línea modificada de nuevo en la tabla interna del loop después del cálculo. Utilice el suplemento de porcentaje TRANSPORTING para actualizar únicamente el campo modificado. Utilice el suplemento sy-tabix INDEX para modificar la línea actual.
Tarea 4 Active y realice un test del módulo de funciones. 1. Activar el módulo de funciones. 2. Pruebe su módulo de funciones.
472
© Copyright . Reservados todos los derechos.
Capítulo 10 Solución 27 449
Implementar un Array Fetch
Ejemplo empresarial Desea desarrollar un programa en el cual se lean todos los horarios de vuelo para una conexión de vuelos individual desde la base de datos. Encapsule el acceso a la base de datos requerido mediante un Array Fetch en un módulo de funciones, de manera que pueda reutilizarlo. Modelo BC400_DDS (grupo de funciones) BC400_DDS_FLIGHTLIST_GET (módulo de funciones) Solución BC400_DDS (grupo de funciones) BC400_DDS_FLIGHTLIST_GET_OPT (módulo de funciones) Lea de la base de datos mediante un array fetch y rellene completamente una tabla interna. Tarea 1 Cree un grupo de funciones si no existe ninguno todavía. 1. Cree un nuevo grupo de funciones en el paquete (nombre sugerido: ZBC400_##). a) En el área de navegación, abra el menú contextual del paquete y seleccione Crear → Grupo de funciones. b) Indique el nombre del grupo de funciones y un texto breve y seleccione Grabar. c) Asigne el grupo de funciones al paquete y a la orden de la forma habitual.
Tarea 2 Copie el módulo de funciones BC400_DDS_FLIGHTLIST_GET del grupo de funciones BC400_DDS o su propio módulo de funciones Z_BC400_##_FLIGHTLIST_GET con un nombre nuevo en su propio módulo de funciones. 1. Copie el módulo de funciones (nombre nuevo: Z_BC400_##_FLIGHTLIST_GET_OPT). a) En el área de navegación, visualice el grupo de funciones que contiene el módulo de funciones que se debe copiar. b) Abra el menú contextual del módulo de funciones y seleccione Copiar. c) Introduzca el nombre del módulo de funciones nuevo, así como el grupo de funciones donde se debe crear, y seleccione Copiar.
© Copyright . Reservados todos los derechos.
473
Capítulo 10: Modelado y obtención de datos
Tarea 3 Transforme el loop SELECT en un comentario y sustitúyalo por un acceso a base de datos en el que el parámetro para export del módulo de funciones (tabla interna) se rellene directamente con datos (Array Fetch). Implemente un loop a través de la tabla interna para calcular el porcentaje de utilización de cada hora de vuelo. 1. Transforme todo el loop SELECT de SELECT a ENDSELECT en un comentario. a) Seleccione el área correspondiente en el Editor ABAP. b) Abra el menú contextual de esta área y, dependiendo del editor fijado, seleccione Comentario o Formato → Líneas de comentario. Como alternativa, puede utilizar Ctrl + < en ambos editores. 2. Sustituya el loop SELECT con un array fetch que rellene directamente el parámetro para export del módulo de funciones. Utilice la misma lista de campos y la condición WHERE que para el loop SELECT. a) Consulte el extracto del código fuente de la solución modelo. 3. Implemente un loop a través de la tabla interna (LOOP ... ENDLOOP). El loop sólo debe ejecutarse si el acceso a la base de datos devuelve datos. Utilice el objeto de datos estructurado local como área de trabajo y calcule el porcentaje de utilización dentro del loop como antes. a) Consulte el extracto del código fuente de la solución modelo. 4. Utilice la sentencia MODIFY para escribir la línea modificada de nuevo en la tabla interna del loop después del cálculo. Utilice el suplemento de porcentaje TRANSPORTING para actualizar únicamente el campo modificado. Utilice el suplemento sy-tabix INDEX para modificar la línea actual. a) Consulte el extracto del código fuente de la solución modelo.
Tarea 4 Active y realice un test del módulo de funciones. 1. Activar el módulo de funciones. a) En la barra de herramientas Biblioteca de funciones, seleccione el pulsador Activar. 2. Pruebe su módulo de funciones. a) En la barra de herramientas Biblioteca de funciones, seleccione el pulsador Verificar/ Ejecutar. b) Introduzca valores en los parámetros para import y pulse Ejecutar. c) Verifique el resultado. Consejo: Verifique que se muestre la excepción si se produce un error.
474
© Copyright . Reservados todos los derechos.
Lección: Leer varios registros de base de datos
Extracto del código fuente: módulo de funciones: FUNCTION bc400_dds_flightlist_get_opt . *"----------------------------------------------------*" IMPORTING *" REFERENCE(IV_CARRID) TYPE BC400_S_FLIGHT-CARRID *" REFERENCE(IV_CONNID) TYPE BC400_S_FLIGHT-CONNID *" EXPORTING *" REFERENCE(ET_FLIGHTS) TYPE BC400_T_FLIGHTS *" EXCEPTIONS *" NO_DATA *"----------------------------------------------------DATA ls_flight TYPE bc400_s_flight. * * * * * * * * * *
SELECT carrid connid fldate seatsmax seatsocc FROM sflight INTO ls_flight WHERE carrid = iv_carrid AND connid = iv_connid. ls_flight-percentage = ls_flight-seatsocc / ls_flight-seatsmax *100. APPEND ls_flight TO et_flights. ENDSELECT. SELECT carrid connid fldate seatsmax seatsocc FROM sflight INTO TABLE et_flights WHERE carrid = iv_carrid AND connid = iv_connid.
IF sy-subrc 0. RAISE no_data. ELSE. LOOP AT et_flights INTO ls_flight. ls_flight-percentage = ls_flight-seatsocc / ls_flight-seatsmax * 100. MODIFY et_flights FROM ls_flight INDEX sy-tabix TRANSPORTING percentage. ENDLOOP. SORT et_flights BY percentage DESCENDING. ENDIF. ENDFUNCTION.
© Copyright . Reservados todos los derechos.
475
Capítulo 10: Modelado y obtención de datos
RESUMEN DE LA LECCIÓN Ahora podrá:
476
●
Implementar un loop SELECT
●
Implementar un array fetch
© Copyright . Reservados todos los derechos.
Capítulo 10 Lección 4 453
Tratar otros aspectos del acceso a base de datos
RESUMEN DE LA LECCIÓN Esta lección contiene una breve explicación de otros aspectos del acceso a la base de datos. Ejemplo empresarial Desea saber más sobre los accesos a las bases de datos. Desea que sus accesos a la base de datos sean seguros y eficientes. Por este motivo, necesita el siguiente conocimiento: ●
Comprender los datos específicos de mandante
●
Comprender los índices de bases de datos
●
Comprender la memoria intermedia de tabla SAP
●
Comprender cómo leer datos de varias tablas de bases de datos
●
Comprender cómo identificar las formas de cambiar datos en una tabla de bases de datos
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Leer los datos específicos de mandante
●
Usar índices de bases de datos
●
Explicar la memoria intermedia de tabla SAP
●
Leer los datos de varias tablas de bases de datos
●
Identificar formas de modificar datos en una tabla de base de datos
© Copyright . Reservados todos los derechos.
477
Capítulo 10: Modelado y obtención de datos
Leer los datos de tablas específicas de mandante
Figura 204: Lectura de datos de tablas específicas de mandante
Una tabla de base de datos se clasifica como específica de mandante si tiene un campo de mandante (tipo de datos CLNT) como primera columna clave y contiene entradas específicas de mandante. Si selecciona datos desde una tabla específica de mandante sin especificar el mandante, solo se leen los registros de datos desde el mandante actual (se añade automáticamente una restricción al mandante actual en la clausula WHERE de la sentencia SELECT). Si desea leer datos de un mandante especificado explícitamente, especifique el mandante en la cláusula WHERE. Sin embargo, el suplemento CLIENT SPECIFIED se debe realizar después de la cláusula FROM. Puesto que la lectura de todos los mandantes raramente se solicita en la práctica y no es relevante en el contexto de este curso, el campo de mandante se suele omitir en las presentaciones. Carry out the exercise on the SELECT loop. Participants who have less difficulty working with internal tables may wish to try the optional exercise using an array fetch. Demonstrate this exercise as an alternative to the second exercise to illustrate the use of an array fetch in practice (function module BC400_DDS_FLIGHTLIST_GET_OPT).
Problemas generales del rendimiento de la base de datos En la mayoría de los casos, el acceso a la base de datos supone una exigencia considerable para el requisito de tiempo de ejecución de una aplicación ABAP. Para evitar sobrecargar innecesariamente al sistema y mantener al mínimo el tiempo de espera para los otros usuarios, preste mucha atención a los requisitos de tiempo de ejecución para los accesos a la base de datos. Open SQL tiene varias tecnologías disponibles que le permiten optimizar el requisito de tiempo de ejecución. Giving a detailed explanation of performance issues related to database access does not advance the aims of the introductory training course. However, introduce the terms and basic concepts to make participants aware of the problem. For more detailed explanations
478
© Copyright . Reservados todos los derechos.
Lección: Tratar otros aspectos del acceso a base de datos
and treatment of performance issues, refer participants to training courses BC430 and BC402.
Índices de bases de datos
Figura 205: Acceso mediante campos clave
Toda base de datos gestiona registros de una tabla de base de datos basada en los campos clave. Si el acceso a la base de datos está restringido para todos o para los primeros campos clave, la base de datos puede alcanzar los registros de datos requeridos con rapidez y eficacia.
© Copyright . Reservados todos los derechos.
479
Capítulo 10: Modelado y obtención de datos
Acceso mediante campos no clave
Figura 206: Acceso mediante campos no clave
Si el acceso a la base de datos está dirigido a campos que no pertenecen a la clave de tabla (campos no clave), el principio de gestión de pedidos interna no se puede utilizar para el acceso rápido. En el peor escenario, se deberán buscar las entradas requeridas en toda la tabla o, como mínimo, en gran parte de ella. Esto se conoce como una búsqueda secuencial y el tiempo de espera para el acceso a la base de datos puede ser muy prolongado.
Nota: En la figura, los registros de la tabla de base de datos se ordenan y se almacenan de acuerdo con el campo clave. Algunos sistemas de base de datos realmente funcionan así. Entre otros, no se ordenan los registros de datos. En lugar de esto, se crea un índice con los campos clave. El índice se denomina índice primario. Esto no es significante aquí.
480
© Copyright . Reservados todos los derechos.
Lección: Tratar otros aspectos del acceso a base de datos
Acceso mediante índice secundario
Figura 207: Acceso mediante índice secundario
Si accede a una tabla de base de datos con frecuencia mediante una selección particular de campos de búsqueda, definir un índice secundario que contenga los campos utilizados en la selección acelerará los accesos correspondientes. El índice secundario es una pequeña tabla independiente que incluye los campos del índice y una referencia a los registros relevantes para cada registro de la tabla de base de datos actual. Si los campos de la selección coinciden con los campos del índice secundario (alineados a la izquierda y continuos, como mínimo), la base de datos busca dentro del índice secundario y, a continuación, lee los registros de datos correspondientes a través de la referencia. Cree un índice secundario en modo de visualización para la tabla transparente relevante en el Dictionary ABAP con el pulsador Índices. Cuando active el índice, se creará el índice secundario en la base de datos. Si el sistema utiliza un índice secundario establecido y cómo lo utiliza en el acceso de base de datos es una función del sistema de base de datos conocido como el Optimizador de base de datos. En Open SQL no es ni posible ni necesario desencadenar el uso de un índice secundario especificándolo explícitamente en la sentencia SELECT.
Consejo: Al seleccionar tablas específicas de mandante, el mandante se transmite siempre a la base de datos (en otras palabras, siempre forma parte de la selección). Por consiguiente, tiene sentido incluir el campo de mandante cuando se define un índice para tales tablas. En tiempo de ejecución, la base de datos puede utilizar el campo de mandante para limitar la búsqueda en la base de datos al bloque de mandante relevante mediante el índice secundario.
© Copyright . Reservados todos los derechos.
481
Capítulo 10: Modelado y obtención de datos
How to Find Indexes of Database Tables Demonstrate the use of an index for the transparent table SPFLI.
Memoria intermedia de tabla SAP
Figura 208: Acceso mediante la memoria intermedia de tabla SAP
Para la obtención de datos, el sistema usa una proporción importante de tiempo de ejecución para transferir los datos desde el servidor de base de datos hasta el servidor de aplicación. Si los datos se leen con frecuencia, pero rara vez se modifican, puede reducir el tiempo de ejecución almacenando los datos en la memoria intermedia del servidor de aplicación. Cómo almacenar los datos en memoria intermedia y si se puede hacer es una decisión que debe tomarse de manera independiente para cada tabla de base de datos. Decidir almacenar los datos en la memoria intermedia depende de la frecuencia con que se leen o modifican los datos. Las opciones de la memoria intermedia se definen en las tablas transparentes en el Dictionary ABAP (pulsador Opciones técnicas).
482
© Copyright . Reservados todos los derechos.
Lección: Tratar otros aspectos del acceso a base de datos
Atención: No es fácil decidir almacenar una tabla de base de datos en la memoria intermedia y los programadores ABAP con experiencia deben tomar esta decisión junto con el administrador del sistema. Hay una memoria intermedia de tabla SAP independiente para cada servidor de aplicación. Si un sistema incluye varias aplicaciones, es necesario un mecanismo de sincronización especial para garantizar que se invalide el contenido correspondiente de la memoria intermedia, después de realizar las modificaciones en la base de datos. Sin embargo, las demoras temporales en el proceso de sincronización significan que durante un breve período, se pueden leer datos antiguos de la memoria intermedia. Este problema también debe considerarse cuando se decide almacenar en la memoria intermedia. Si un programa ABAP lee una tabla almacenada en memoria intermedia, la interfaz de base de datos primero intenta obtener los datos requeridos de la memoria intermedia de tabla SAP. Leer los datos de la memoria intermedia de tabla SAP acelera el acceso en un factor entre 10 y 100 en contraste con leer datos de la base de datos. El incremento preciso de la velocidad depende de la estructura de la tabla y de las configuraciones exactas del sistema. Si los datos requeridos no se encuentran todavía en la memoria intermedia de tabla SAP, se accede a la base de datos. Después la interfaz de base de datos también almacena los datos leídos en el búfer de la tabla SAP.
Consejo: Existen variantes y suplementos para la sentencia SELECT que llaman datos que se leerán directamente desde la base de datos, independientemente de las opciones de la memoria intermedia. Este acceso se llama bypass de la memoria intermedia. Esta clase de acceso puede causar problemas de rendimiento al acceder a tablas almacenadas en memoria intermedia y debe evitarse.
How to Find Settings for Table Buffering Demonstrate the technical settings for the database table SPFLI.
© Copyright . Reservados todos los derechos.
483
Capítulo 10: Modelado y obtención de datos
Mecanismo de enlace
Figura 209: Ejemplo de una unión de tablas
A menudo es necesario leer datos de varias tablas y visualizarlos en una tabla. En general, la técnica con el mejor rendimiento para esta tarea es un enlace de tablas. Leerá y mostrará registros desde la tabla de base de datos SPFLI. Para cada registro, se debe mostrar también los nombres completos de cada compañía aérea respectiva, que está almacenada en SCARR. En la figura se muestra la creación lógica del enlace de tablas correspondiente, desde la cual puede seleccionar todos los datos requeridos mediante la sentencia SELECT. Emphasize that it is possible to achieve the desired result using a loop on SPFLI with a SELECT SINGLE on SCARR for each loop pass, but that performance of this technique is very poor when applied to large datasets.
484
© Copyright . Reservados todos los derechos.
Lección: Tratar otros aspectos del acceso a base de datos
Entradas para definir una unión de tablas
Figura 210: Entradas para definir una unión de tablas
Especifique los siguientes detalles cuando defina un enlace de tabla: ● Tablas de unión ¿A qué tablas de base de datos se debe acceder y cuáles se deben enlazar? ●
Condiciones de enlace ¿Cuáles son las condiciones para resumir los registros correspondientes en las tablas que se combinarán en un enlace de tabla?
●
Columnas de unión ¿Qué columnas de las tablas seleccionadas deben estar disponibles en el enlace de tablas?
© Copyright . Reservados todos los derechos.
485
Capítulo 10: Modelado y obtención de datos
Opciones de implementación para uniones de tablas
Figura 211: Opciones de implementación para uniones de tablas
Estas son las diferentes formas de implementar un enlace de tabla: ● En el Dictionary ABAP, cree una vista de base de datos que corresponda a un enlace de tablas y selecciónela de este en su programa. Para obtener información detallada, consulte la documentación online del Workbench ABAP, en la sección Dictionary ABAP. ●
En su programa, define el enlace directamente en su sentencia SELECT (enlace ABAP). En tiempo de ejecución, el sistema genera dinámicamente una consulta de base de dados apropiada en la interfaz de base de datos. Para obtener más información, consulte la documentación de palabra clave de la cláusula FROM de la sentencia SELECT.
Consejo: Los enlaces de tabla y la vista de base de datos son solo vistas específicas del contenido de las tablas de base de datos. No almacenan los mismos datos de modo redundante. Cuando se hace una selección, los datos se leen desde las tablas de base de datos subyacentes. Puede enlazar más de dos tablas en un enlace de tablas.
How to Select Data from Several Tables Show the online documentation for the SELECT-> FROM clause which explains the ABAP join. If there is enough time, create a database view in the Dictionary with a view of database tables
486
© Copyright . Reservados todos los derechos.
Lección: Tratar otros aspectos del acceso a base de datos
SCARR and SPFLI. To do so, enter both tables and choose the Relationships function. Select the relationship between the database tables SCARR and SPFLI. The join condition is suggested automatically. Select the view fields under VIEW Fields. To do so, choose the Table Fields pushbutton. However, be sure to select the complete SPFLI key with the client field and field SCARR-CARRNAME. To avoid warnings during activation, overwrite the default maintenance status with “restricted display/maintenance”. Activate the database view, and write a small program to SELECT your view. Specify that the data is to be retrieved from database tables SPFLI and SCARR, according to the view definition and is not, for example, to be held redundantly in the view.
Accesos de modificación a base de datos
Figura 212: Accesos de modificación a base de datos
Además de la sentencia SELECT, Open SQL contiene las sentencias UPDATE, INSERT, DELETE y MODIFY. Sin embargo, es importante comprender el concepto de transacción SAP relacionado con estos accesos de modificación de la base de datos para evitar causar inconsistencias de datos. The SAP transaction concept is taught in course BC414. RESUMEN DE LA LECCIÓN Ahora podrá: ●
Leer los datos específicos de mandante
●
Usar índices de bases de datos
●
Explicar la memoria intermedia de tabla SAP
●
Leer los datos de varias tablas de bases de datos
●
Identificar formas de modificar datos en una tabla de base de datos
© Copyright . Reservados todos los derechos.
487
Capítulo 10 Lección 5 463
Trabajar con verificaciones de autorización
RESUMEN DE LA LECCIÓN En este módulo se explica por qué es útil una verificación de autorización y cómo incluirla en sus programas. Ejemplo empresarial Las verificaciones de autorización son necesarias en sus programas para proteger los datos del acceso no autorizado. Por este motivo, se requieren los siguientes conocimientos: ●
Comprender el concepto de autorización de SAP
●
Comprender cómo implementar las verificaciones de autorización For didactic reasons, this important topic has been placed in the context of data retrieval. It is very important that the participants understand the concept of authorization and authorization checks and can use them in their programs. Point out that implementing an authorization check using the corresponding program attribute is too inflexible and should only be used in simple cases. Implement an authorization concept for the flight data model (authorization object S_CARRID). Use the Pattern pushbutton in the ABAP Editor. Double-click the authorization object in the AUTHORITY CHECK statement to show how to find out the permissible activities set for an object. Implementation of an authorization check makes it easier to reuse the authorization check in a function module of the same function group that also includes accesses to the database tables of the flight data model. Make it clear to the participants that database accesses and relevant authorization checks are grouped together in this way. Show how you can check the entries (for example, activities) in the function module. Finally, show how to search for authorization objects in the Repository Information System.
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá:
488
●
Explicar el concepto de autorización SAP
●
Implementar verificaciones de autorización
© Copyright . Reservados todos los derechos.
Lección: Trabajar con verificaciones de autorización
El concepto de autorizaciones de SAP
Figura 213: El concepto de autorizaciones de SAP
Los datos críticos y las partes del alcance de función del sistema SAP se deben proteger del acceso no autorizado. Implemente verificaciones de autorización en su programa para que cada usuario solo pueda acceder a áreas para las cuales está autorizado. Objetos de autorización y autorizaciones (ejemplo)
Figura 214: Objetos de autorización y autorizaciones (ejemplo)
© Copyright . Reservados todos los derechos.
489
Capítulo 10: Modelado y obtención de datos
Los objetos de autorización se definen por clases de objetos. Cuando define un objeto de autorización, el desarrollador especifica los campos apropiados (sin valores). Se deriva una autorización real de un objeto de autorización asignando valores a estos campos. Esta autorización se puede integrar en el registro maestro del usuario requerido mediante un perfil de autorización. Es posible crear varias autorizaciones distintas (para la integración en distintos registros maestros del usuario) para un objeto de autorización. Verificación de autorización (principio)
Figura 215: Verificación de autorización (principio)
En tiempo de ejecución, utilice la sentencia AUTHORITY-CHECK para verificar si el usuario dispone de la autorización requerida para ejecutar la función que se llama en su registro maestro de usuario. Dependiendo del resultado de la verificación (SY-SUBRC), continúe el programa según corresponda, de la siguiente manera: ● SY-SUBRC = 0 El usuario tiene la autorización requerida para realizar la función (por ejemplo, SELECT) y continuar con el programa. ●
SY-SUBRC 0 El usuario no tiene autorización suficiente, por lo tanto, emita un mensaje de error/ advertencia.
Consejo: Además de la técnica descrita, también es posible controlar el acceso a todo el programa y a las transacciones usando autorizaciones. Sin embargo, considere estas verificaciones como suplementos y no como sustituciones para la verificación de autorización explícita que realiza el programador. En circunstancias normales, la definición de objetos de autorización es parte de la modelado de datos y de la creación de tablas de base de datos. En este curso, accederá a un modelo de
490
© Copyright . Reservados todos los derechos.
Lección: Trabajar con verificaciones de autorización
datos existente para que pueda utilizar el objeto de autorización S_CARRID en este modelo de datos. La implementación del concepto de autorización es una de las tareas del programador que programa el acceso a las tablas de base de datos. Los pasos siguientes, como definir autorizaciones y perfiles, y designar los registros maestros de usuario, con tareas del administrador. Visualizar objetos de autorización
Figura 216: Visualización de objetos de autorización
Antes de poder implementar la verificación de autorización requerida en su programa, determine la estructura (los campos) del concepto de autorización respectivo. Un objeto suele consistir en el campo ACTVT (Actividad) y en otro campo que especifica el tipo de datos que se debe proteger (es decir, número de material, compañía aérea, etc.). Los valores de estos campos de autorización especifican lo que cada usuario está autorizado a hacer. Puede visualizar un objeto de autorización directamente en el Workbench ABAP (por ejemplo, mediante el pulsador Otro objeto o la etiqueta Otro). También puede utilizar la transacción SU21. Aquí, obtendrá un resumen de todos los objetos de autorización creados en el sistema.
How to Examine Authorization Objects Demonstrate authorization object S_CARRID using transaction SU21.
© Copyright . Reservados todos los derechos.
491
Capítulo 10: Modelado y obtención de datos
Implementación de verificaciones de autorización
Figura 217: Verificación de autorización (ejemplo de sintaxis)
En la figura se muestra cómo implementar una verificación de autorización. Para la verificación de autorización del programa, especifique la autorización que se debe verificar en el registro maestro del usuario actual. Especifique la autorización especificando el objeto de autorización, sus campos y los valores de campo apropiados. Consulte la sintaxis que se muestra en la figura. En este ejemplo, se verifica la autorización de usuario para acceder al objeto S_CARRID; el campo CARRID (compañía aérea) contiene la compañía aérea introducida por el usuario y el campo ACTVT (actividad) contiene el valor ’03’ (visualización). Después de la sentencia AUTHORITY-CHECK, verifique el código de retorno SY-SUBRC e implemente el tratamiento posterior de su programa según corresponda.
Consejo: Para excluir una verificación para un campo, no introduzca el campo en la sentencia AUTHORITY-CHECK o bien introduzca DUMMY como el valor de campo. DUMMY es una descripción predefinida que se introduce sin comillas. Un ejemplo de verificación de campo suprimido: Al llamar una operación de modificación, el sistema debería verificar inmediatamente si el usuario tiene autorización de modificación para cualquier compañía aérea. Si la verificación falla, se debe mostrar inmediatamente un mensaje apropiado al usuario. Una verificación así se puede implementar con la sintaxis siguiente: AUTHORITY-CHECK OBJECT 'S_CARRID' ID 'CARRID' DUMMY ID 'ACTVT' FIELD '02'.
492
© Copyright . Reservados todos los derechos.
Lección: Trabajar con verificaciones de autorización
Implementar verificaciones de autorización en programas
Figura 218: Implementación de verificaciones de autorización en programas
Para evitar errores ortográficos en nombres de objetos y campos, genere la sentencia AUTHORITY-CHECK en su código fuente mediante el pulsador Patrón. Después, actualice los valores de campo e implemente la evaluación de SY-SUBRC. Ask the participants to carry out the exercise.
How to Implement an Authorization Check Develop and demonstrate the steps of the section or the class.
© Copyright . Reservados todos los derechos.
493
Capítulo 10: Modelado y obtención de datos
494
© Copyright . Reservados todos los derechos.
Capítulo 10 Ejercicio 28 469
Implementar una verificación de autorización
Ejemplo empresarial Desea desarrollar un programa en el cual se lean los datos del modelo de vuelo desde la base de datos. El acceso a los datos de este modelo se controla mediante autorizaciones del objeto de autorización S_CARRID. Para ello, necesita realizar una verificación de autorización. Para hacer que la verificación de autorización se pueda reutilizar, encapsúlela en un módulo de funciones. Modelo Ninguno Solución BC400_DDS_AUTH_CHECK (módulo de funciones) Implementar verificaciones de autorización.
Tarea 1 Cree un nuevo módulo de funciones en el grupo de funciones. Actualice la interfaz del módulo de funciones de manera que importe un ID de compañía aérea y una actividad para la verificación de autorización. Cree dos excepciones para la confirmación: una para cuando no exista ninguna autorización y otra para cuando el autor de la llamada haya especificado una actividad no válida. 1. Cree un nuevo módulo de funciones en su grupo de funciones (nombre sugerido: Z_BC400_##_AUTH_CHECK). 2. Cree un parámetro para import separado para el ID de compañía aérea y la actividad (nombres sugeridos: IV_CARRID e IV_ACTIVITY). Para tipificar el elemento de datos, seleccione S_CARR_ID y ACTIV_AUTH. Consejo: Los elementos de datos correctos se definen en el objeto de autorización. Para hacerlo, abra el objeto de autorización S_CARRID en modo de visualización y seleccione la ayuda para entradas para uno de los campos de autorización. Aquí encontrará el elemento de datos relevante (segunda columna) de cada campo de autorización (primera columna). 3. Cree dos excepciones (clásicas) (nombres sugeridos: NO_AUTH y WRONG_ACTIVITY).
Tarea 2
© Copyright . Reservados todos los derechos.
495
Capítulo 10: Modelado y obtención de datos
Implemente una verificación de autorización en el código fuente para el objeto de autorización S_CARRID. Presente una excepción si no existe la autorización o si el autor de la llamada no ha especificado ninguna de las actividades relevantes. 1. Implemente una verificación de autorización para el objeto de autorización S_CARRID. Suministre los parámetros para import del módulo de funciones a los campos de autorización. Evalúe el valor de retorno (sy-subrc) y emita una excepción si falta la autorización. Consejo: Utilice la función Patrón para verificar la autorización, porque es muy intolerante a errores de escritura y mayúscula/minúscula. 2. Antes de la verificación de autorización, asegúrese de que el autor de la llamada haya especificado solo una de las actividades relevantes. En caso necesario, emita una excepción. Consejo: Las actividades relevantes se definen en el objeto de autorización. Para hacerlo, abra el objeto de autorización en modo de visualización y seleccione el pulsador Actividades permitidas de la parte inferior de la pantalla.
Tarea 3 Active y realice un test del módulo de funciones. 1. Activar el módulo de funciones. 2. Pruebe su módulo de funciones. Consejo: Verifique también que se muestre la excepción si se produce un error.
496
© Copyright . Reservados todos los derechos.
Capítulo 10 Solución 28 471
Implementar una verificación de autorización
Ejemplo empresarial Desea desarrollar un programa en el cual se lean los datos del modelo de vuelo desde la base de datos. El acceso a los datos de este modelo se controla mediante autorizaciones del objeto de autorización S_CARRID. Para ello, necesita realizar una verificación de autorización. Para hacer que la verificación de autorización se pueda reutilizar, encapsúlela en un módulo de funciones. Modelo Ninguno Solución BC400_DDS_AUTH_CHECK (módulo de funciones) Implementar verificaciones de autorización.
Tarea 1 Cree un nuevo módulo de funciones en el grupo de funciones. Actualice la interfaz del módulo de funciones de manera que importe un ID de compañía aérea y una actividad para la verificación de autorización. Cree dos excepciones para la confirmación: una para cuando no exista ninguna autorización y otra para cuando el autor de la llamada haya especificado una actividad no válida. 1. Cree un nuevo módulo de funciones en su grupo de funciones (nombre sugerido: Z_BC400_##_AUTH_CHECK). a) En el área de navegación, abra el menú contextual de su grupo de funciones y seleccione Crear → Módulo de funciones. b) Indique el nombre del módulo de funciones y un texto breve y seleccione Grabar. 2. Cree un parámetro para import separado para el ID de compañía aérea y la actividad (nombres sugeridos: IV_CARRID e IV_ACTIVITY). Para tipificar el elemento de datos, seleccione S_CARR_ID y ACTIV_AUTH. Consejo: Los elementos de datos correctos se definen en el objeto de autorización. Para hacerlo, abra el objeto de autorización S_CARRID en modo de visualización y seleccione la ayuda para entradas para uno de los campos de autorización. Aquí encontrará el elemento de datos relevante (segunda columna) de cada campo de autorización (primera columna).
© Copyright . Reservados todos los derechos.
497
Capítulo 10: Modelado y obtención de datos
a) Abra la etiqueta Importar. Indique el nombre de los parámetros y los tipos de datos. 3. Cree dos excepciones (clásicas) (nombres sugeridos: NO_AUTH y WRONG_ACTIVITY). a) Abra la etiqueta Excepciones. Indique los nombres de las excepciones y un texto breve. No fije el indicador Clases de excepciones.
Tarea 2 Implemente una verificación de autorización en el código fuente para el objeto de autorización S_CARRID. Presente una excepción si no existe la autorización o si el autor de la llamada no ha especificado ninguna de las actividades relevantes. 1. Implemente una verificación de autorización para el objeto de autorización S_CARRID. Suministre los parámetros para import del módulo de funciones a los campos de autorización. Evalúe el valor de retorno (sy-subrc) y emita una excepción si falta la autorización. Consejo: Utilice la función Patrón para verificar la autorización, porque es muy intolerante a errores de escritura y mayúscula/minúscula. a) Consulte el extracto del código fuente de la solución modelo. 2. Antes de la verificación de autorización, asegúrese de que el autor de la llamada haya especificado solo una de las actividades relevantes. En caso necesario, emita una excepción. Consejo: Las actividades relevantes se definen en el objeto de autorización. Para hacerlo, abra el objeto de autorización en modo de visualización y seleccione el pulsador Actividades permitidas de la parte inferior de la pantalla. a) Consulte el extracto del código fuente de la solución modelo.
Tarea 3 Active y realice un test del módulo de funciones. 1. Activar el módulo de funciones. a) En la barra de herramientas Biblioteca de funciones, seleccione el pulsador Activar. 2. Pruebe su módulo de funciones. Consejo: Verifique también que se muestre la excepción si se produce un error.
a) En la barra de herramientas Biblioteca de funciones, seleccione el pulsador Verificar/ Ejecutar.
498
© Copyright . Reservados todos los derechos.
Lección: Trabajar con verificaciones de autorización
b) Introduzca valores en los parámetros para import y pulse Ejecutar. c) Verifique el resultado. Extracto del código fuente: módulo de funciones: FUNCTION bc400_dds_auth_check. *"--------------------------------------------------*" IMPORTING *" REFERENCE(IV_CARRID) TYPE S_CARR_ID *" REFERENCE(IV_ACTIVITY) TYPE ACTIV_AUTH *" EXCEPTIONS *" NO_AUTH *" WRONG_ACTIVITY *"--------------------------------------------------CASE iv_activity. WHEN '01' OR '02' OR '03'. AUTHORITY-CHECK OBJECT 'S_CARRID' ID 'CARRID' FIELD iv_carrid ID 'ACTVT' FIELD iv_activity. IF sy-subrc 0. RAISE no_auth. ENDIF. WHEN OTHERS. RAISE wrong_activity. ENDCASE. ENDFUNCTION.
© Copyright . Reservados todos los derechos.
499
Capítulo 10: Modelado y obtención de datos
RESUMEN DE LA LECCIÓN Ahora podrá:
500
●
Explicar el concepto de autorización SAP
●
Implementar verificaciones de autorización
© Copyright . Reservados todos los derechos.
Capítulo 10
475
Evaluación de la formación
1. Por cada entidad fijada en el modelo de datos, el programador crea una tabla transparente en el _________. Seleccione las respuestas correctas. X
A campo transparente
X
B Dictionary ABAP
X
C campo de datos
X
D base de datos
2. Cuando se utiliza la tabla transparente como tipo de datos, son relevantes otras propiedades, como la definición clave o las propiedades técnicas. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
3. ¿Cuáles de las siguientes opciones son los tipos de componentes de reutilización que encapsulan los accesos a la base de datos? Seleccione las respuestas correctas. X
A Base de datos conceptual
X
B Módulos de funciones
X
C Business Application Programming Interfaces (BAPI)
X
D Métodos de clases locales
4. La cláusula SELECT determina las líneas que se leen en la estructura de destino y que se procesan mediante el bloque de sentencias especificado en el cuerpo del loop. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
© Copyright . Reservados todos los derechos.
501
Capítulo 10: Evaluación de la formación
5. Si desea adjuntar filas en una sentencia Select, puede utilizar el suplemento _________. Seleccione la respuesta correcta. X
A INTO TABLE
X
B APPENDING TABLE
X
C INTO CORRESPONDING FIELD OF TABLE
X
D END SELECT
6. Si selecciona datos de tablas específicas de mandante sin especificar el mandante, se leen los registros de datos del mandante actual y de todos los otros mandantes. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
7. En el peor escenario, el sistema deberá buscar las entradas requeridas en toda la tabla o, como mínimo, en gran parte de ella. Este concepto se denomina ________. Seleccione la respuesta correcta. X
A búsqueda directa
X
B búsqueda binaria
X
C búsqueda secuencial
X
D búsqueda indirecta
8. ¿Cuál de las siguientes opciones debería especificar cuando define un enlace de tabla? Seleccione las respuestas correctas.
502
X
A Tablas de unión
X
B Condiciones de enlace
X
C Filas de enlace
X
D Columnas de unión
© Copyright . Reservados todos los derechos.
Capítulo 10: Evaluación de la formación
9. Si un programa ABAP lee una tabla almacenada en memoria intermedia, la interfaz de base de datos intenta obtener los datos requeridos de la memoria intermedia de tabla SAP. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
10. ¿Cuáles de las siguientes sentencias contiene el Open SQL? Seleccione las respuestas correctas. X
A CREATE
X
B UPDATE
X
C INSERT
X
D SELECT
11. En tiempo de ejecución, ¿cuál de las siguientes sentencias puede utilizar para verificar si el usuario real dispone de la autorización requerida para ejecutar la función en el registro maestro de usuario? Seleccione la respuesta correcta. X
A AUTHORITY
X
B SELECT
X
C AUTHORITY-CHECK
X
D VALID AUTHORITY
© Copyright . Reservados todos los derechos.
503
Capítulo 10
478
Respuestas a la Evaluación de la formación
1. Por cada entidad fijada en el modelo de datos, el programador crea una tabla transparente en el _________. Seleccione las respuestas correctas. X
A campo transparente
X
B Dictionary ABAP
X
C campo de datos
X
D base de datos
2. Cuando se utiliza la tabla transparente como tipo de datos, son relevantes otras propiedades, como la definición clave o las propiedades técnicas. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
3. ¿Cuáles de las siguientes opciones son los tipos de componentes de reutilización que encapsulan los accesos a la base de datos? Seleccione las respuestas correctas.
504
X
A Base de datos conceptual
X
B Módulos de funciones
X
C Business Application Programming Interfaces (BAPI)
X
D Métodos de clases locales
© Copyright . Reservados todos los derechos.
Capítulo 10: Respuestas a la Evaluación de la formación
4. La cláusula SELECT determina las líneas que se leen en la estructura de destino y que se procesan mediante el bloque de sentencias especificado en el cuerpo del loop. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
5. Si desea adjuntar filas en una sentencia Select, puede utilizar el suplemento _________. Seleccione la respuesta correcta. X
A INTO TABLE
X
B APPENDING TABLE
X
C INTO CORRESPONDING FIELD OF TABLE
X
D END SELECT
6. Si selecciona datos de tablas específicas de mandante sin especificar el mandante, se leen los registros de datos del mandante actual y de todos los otros mandantes. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
7. En el peor escenario, el sistema deberá buscar las entradas requeridas en toda la tabla o, como mínimo, en gran parte de ella. Este concepto se denomina ________. Seleccione la respuesta correcta. X
A búsqueda directa
X
B búsqueda binaria
X
C búsqueda secuencial
X
D búsqueda indirecta
© Copyright . Reservados todos los derechos.
505
Capítulo 10: Respuestas a la Evaluación de la formación
8. ¿Cuál de las siguientes opciones debería especificar cuando define un enlace de tabla? Seleccione las respuestas correctas. X
A Tablas de unión
X
B Condiciones de enlace
X
C Filas de enlace
X
D Columnas de unión
9. Si un programa ABAP lee una tabla almacenada en memoria intermedia, la interfaz de base de datos intenta obtener los datos requeridos de la memoria intermedia de tabla SAP. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
10. ¿Cuáles de las siguientes sentencias contiene el Open SQL? Seleccione las respuestas correctas. X
A CREATE
X
B UPDATE
X
C INSERT
X
D SELECT
11. En tiempo de ejecución, ¿cuál de las siguientes sentencias puede utilizar para verificar si el usuario real dispone de la autorización requerida para ejecutar la función en el registro maestro de usuario? Seleccione la respuesta correcta.
506
X
A AUTHORITY
X
B SELECT
X
C AUTHORITY-CHECK
X
D VALID AUTHORITY
© Copyright . Reservados todos los derechos.
CAPÍTULO 11
Informe ABAP clásico
Lección 1 Implementación de listas ABAP
508
Lección 2 Implementar pantallas de selección Ejercicio 29: Crear una Pantalla de selección y una Lista ABAP clásica
513 521
Lección 3 Implementación de eventos de informes ABAP Ejercicio 30: Implementar eventos de informes ABAP
528 535
OBJETIVOS DEL CAPÍTULO ●
Implementar listas ABAP
●
Describir los atributos y los beneficios de las pantallas de selección
●
Implementar opciones para restringir las selecciones de las pantallas de selección
●
Implementar eventos de informes ABAP
© Copyright . Reservados todos los derechos.
507
Capítulo 11 Lección 1 482
Implementación de listas ABAP
RESUMEN DE LA LECCIÓN En este módulo se analizan los informes ABAP clásicos. Este tipo de programas ABAP está estrechamente vinculado a la técnica de control de eventos clásica, así como a la pantalla de selección especial y a los diálogos de usuario lista ABAP. Ejemplo empresarial Desea desarrollar un programa que utilice selecciones en una pantalla de selección para leer y listar datos de una base de datos. Por este motivo, se requieren los siguientes conocimientos: ●
Comprender cómo describir los atributos y beneficios de las listas ABAP According to the latest ABAP programming guidelines for new developments, executable programs (type 1 programs) should no longer be used. The only area of application where there is still no alternative to type 1 programs is background execution (SUBMIT ... VIA JOB ...). Still, an introduction to the oldest type of ABAP programming must be included in a basic course. After all, this technique is still used in many existing programs. Consequently, every ABAP developer will be confronted with it sooner or later. Likewise, customers are also free to continue using this program type as long as it is supported by the runtime environment. This lesson will focus on the basic aspects of ABAP programming, concentrating on Web Dynpro UI technology. In contrast to older versions of this course, it has been decided to dispense with the handling of interactive lists (AT LINE-SELECTION event) and the hide area (HIDE statement) in particular.
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
508
Implementar listas ABAP
© Copyright . Reservados todos los derechos.
Lección: Implementación de listas ABAP
Propiedades de una lista ABAP
Figura 219: Características de las listas
La lista se utiliza para minimizar el esfuerzo de programación para emitir datos. Las listas tienen en cuenta los requisitos especiales de los datos empresariales en las siguientes maneras: ● Las listas se pueden diseñar para algunos idiomas. Por ejemplo, los textos y las cabeceras aparecen en el idioma de trabajo, siempre que exista una traducción correspondiente. ●
Las listas pueden visualizar valores monetarios en la moneda adecuada.
Al presentar una lista, están disponibles las siguientes opciones: ● Procesador Puede añadir colores e iconos en la pantalla. ●
Impresora Puede imprimir listas.
●
Internet o intranet El sistema puede convertir la lista a formato HTML.
●
Grabar Puede grabar listas tanto dentro como fuera del sistema SAP, por ejemplo, para su procesamiento en programas de hojas de cálculo. You will now show the standard list functions, primarily the menu path System → List. You will also demonstrate list headers, text symbols, and the multilingual capability.
© Copyright . Reservados todos los derechos.
509
Capítulo 11: Informe ABAP clásico
You can show the syntax for color output and for displaying icons and symbols if you have enough time. The Pattern function for the WRITE statement is useful here.
Funciones de lista estándar
Figura 220: Funciones de lista estándar
La interfaz de usuario estándar de una lista ofrece varias funciones. Puede utilizar el Menu Painter para adaptar la interfaz de lista por defecto a sus propias necesidades. Dispone de más información acerca de esta herramienta en la documentación y en el curso de formación correspondiente.
510
© Copyright . Reservados todos los derechos.
Lección: Implementación de listas ABAP
Títulos de listas y cabeceras de columnas
Figura 221: Cabeceras de listas y de columnas
Sabe cómo implementar símbolos de texto traducibles para hacer que la interfaz de su programa sea dependiente del idioma de trabajo del usuario. Los símbolos de texto están disponibles en todos los tipos de programas, por ejemplo, para modulpools, grupos de funciones y clases globales. Para los programas ejecutables (informes) en particular, tiene la opción de actualizar una cabecera de lista de una sola línea y hasta cuatro filas de cabeceras de columnas además de los símbolos de texto de la lista ABAP clásica. Junto a los símbolos de texto y textos de selección, las cabeceras de lista y de columna conforman los elementos de texto de un programa. Para la actualización inicial de las cabeceras, debe activar su programa y, a continuación, crear la lista ejecutando el programa. Puede actualizar las cabeceras directamente encima de la lista mediante el menú Sistema → Lista → Cabecera de lista. La siguiente vez que inicie el programa, aparecerán directamente en la lista. Para modificar la cabecera actualizada (actualización posterior), no es necesario que vuelva a iniciar el programa y a generar la lista. En lugar de esto, empezando por el editor en el cual carga el programa, puede acceder al entorno de actualización para modificar las cabeceras seleccionando Pasar a → Elementos de texto → Cabeceras de lista. Para traducir las cabeceras de lista y de columna desde dentro del Editor ABAP, seleccione Pasar a → Traducción.
How to Define List Titles and Column Headers Demonstrate the functionality of the initial title and column header creation.
© Copyright . Reservados todos los derechos.
511
Capítulo 11: Informe ABAP clásico
RESUMEN DE LA LECCIÓN Ahora podrá: ●
512
Implementar listas ABAP
© Copyright . Reservados todos los derechos.
Capítulo 11 Lección 2 485
Implementar pantallas de selección
RESUMEN DE LA LECCIÓN En este módulo se analizan los informes ABAP clásicos. Este tipo de programa ABAP está estrechamente vinculado a la técnica de control de eventos clásica, así como a la pantalla de selección especial. Ejemplo empresarial Desea desarrollar un programa que utilice selecciones en una pantalla de selección para leer. Por este motivo, se requieren los siguientes conocimientos: ●
●
Comprender las propiedades de la lista ABAP y los beneficios de las pantallas de selección Comprender cómo implementar las opciones para delimitar las selecciones en la pantalla de selección
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Describir los atributos y los beneficios de las pantallas de selección
●
Implementar opciones para restringir las selecciones de las pantallas de selección
Propiedades de la pantalla de selección
Figura 222: Arquitectura y finalidad de las pantallas de selección
Las pantallas de selección se utilizan para introducir criterios de selección para la selección de datos. Por ejemplo, si el programa crea una lista de datos a partir de una tabla de base de datos con muchos registros, tiene sentido para los usuarios seleccionar solo los registros que
© Copyright . Reservados todos los derechos.
513
Capítulo 11: Informe ABAP clásico
realmente necesitan, de manera que el sistema lea únicamente estos datos de la base de datos. A parte de reducir los requisitos de memoria, también se reduce la carga de la red. Desde una perspectiva técnica, las pantallas de selección son dynpros. Sin embargo, el programador no las diseña directamente con el Screen Painter; el sistema las genera de acuerdo con sentencias declarativas en el código fuente. Atributos de la pantalla de selección
Figura 223: Atributos de la pantalla de selección
La pantalla de selección tiene las funciones estándar siguientes: ● Puede actualizar textos en la pantalla de selección en varios idiomas. En tiempo de ejecución, el sistema visualiza los textos en el idioma de trabajo del usuario. ●
●
●
●
●
514
El sistema realiza automáticamente una verificación de tipo: Si el usuario introduce algo que no corresponda con el tipo del campo de entrada, el SAP GUI lo ignorará. Puede implementar selecciones complejas (SELECT-OPTIONS) en la pantalla de selección además de entradas de valor individuales (PARAMETERS). De este modo, el usuario puede introducir intervalos, condiciones comparativas o incluso patrones como restricciones. El usuario puede visualizar la documentación de campo para el campo de entrada pulsando F1 si el programador define el campo de entrada mediante un elemento del diccionario (por ejemplo, elemento de datos). El usuario puede llamar la ayuda búsqueda adjunta al tipo Diccionario para visualizar posibles entradas pulsando F4. El usuario puede grabar pantallas de selección completadas como variantes para (re)utilizarlas en operaciones de fondo.
© Copyright . Reservados todos los derechos.
Lección: Implementar pantallas de selección
Uso de opciones de selección
Figura 224: Uso de opciones de selección
En la figura se muestra la utilización de opciones de selección, que permiten entradas complejas. Para obtener más información acerca de la operación en cuestión, seleccione el pulsador Ayuda en pantalla en la pantalla adicional para selecciones múltiples. Información semántica acerca de tipos globales de la pantalla de selección
Figura 225: Información semántica acerca de tipos globales de la pantalla de selección
© Copyright . Reservados todos los derechos.
515
Capítulo 11: Informe ABAP clásico
Si se tipifica un campo de entrada con un elemento de datos, la siguiente información semántica adicional estará disponible en la pantalla de selección: ● La etiqueta de campo larga del elemento de datos se puede tomar para describir el campo de entrada en la pantalla de selección (texto de selección). ●
●
La documentación del elemento de datos está disponible automáticamente como una ayuda para entradas (ayuda F1). Esta ayuda de búsqueda está disponible como ayuda para entradas (F4) si se enlace al elemento de datos.
Cuando indique un campo de entrada con un campo de estructura un lugar de un elemento de datos, la información semántica también está disponible en la pantalla de selección. La información semántica después se toma del elemento de datos usado en la definición del campo de estructura. Para obtener más información, consulte la documentación online del Dictionary ABAP. Textos de selección
Figura 226: Textos de selección
En la pantalla de selección, los nombres de los campos de entrada aparecen como su descripción por defecto. Sin embargo, los puede sustituir por textos de selección correspondientes y, a continuación, puede traducir estos textos en todos los idiomas que necesite. En tiempo de ejecución, el sistema visualiza los textos de selección en el idioma de trabajo del usuario (idioma automático). Igual que las cabeceras de lista y los símbolos de texto, los textos de selección pertenecen a los elementos de texto del programa. Desde el Editor ABAP, seleccione Pasar a → Elementos de texto → Textos de selección para actualizarlos. Puede implementar la traducción mediante Pasar a → Traducción. Si tipifica el campo de entrada directa o indirectamente con un elemento de datos, puede asumir el nombre de campo largo de uno de los textos almacenados en el Dictionary ABAP
516
© Copyright . Reservados todos los derechos.
Lección: Implementar pantallas de selección
(“Referencia de diccionario”). Esto le proporciona una opción fácil para estandarizar textos para todas las pantallas de selección.
Entrada de valor individual
Figura 227: Entrada de valor individual (sentencia PARAMETERS)
En la figura se muestra la utilización y el comportamiento en tiempo de ejecución de una variable de entrada definida mediante una sentencia PARAMETERS. La definición de una variable de entrada de este tipo crea una variable en el sistema y genera una pantalla de selección con una opción de entrada correspondiente. La única diferencia entre definir una variable de entrada y una variable común es que se usa la palabra clave PARAMETERS en lugar de DATA. Considere los siguientes aspectos: ● El nombre de la variable de entrada puede tener hasta 8 caracteres de longitud. ●
●
La variable de entrada no se debe tipificar con los tipos estándar F, STRING y XSTRING. La asignación de un valor por defecto se implementa con el suplemento DEFAULT, no con el suplemento VALUE.
El sistema muestra un valor predeterminado mediante el DEFAULT como un valor predeterminado que puede sobrescribirse. Por ejemplo, si el usuario indica un valor y selecciona el pulsador Ejecutar, el sistema transfiere el valor de entrada a la variable interna. A continuación, el sistema puede utilizarse para restringir la selección de la base de datos.
How to Achieve a Single-Value Input Develop and demonstrate the functionality of PARAMETERS.
© Copyright . Reservados todos los derechos.
517
Capítulo 11: Informe ABAP clásico
Selecciones complejas
Figura 228: Introducción de selecciones complejas (sentencia SELECT-OPTIONS)
Puede utilizar la sentencia SELECT-OPTIONS FOR para definir una opción de selección para indicar selecciones complejas, donde es el nombre de la opción de selección y es una variable predefinida. Dicha definición crea una tabla interna del nombre especificado dentro del programa (so_car) y genera una pantalla de selección con una opción de entrada para limitar la variable especificada (gs_spfli-carrid). El sistema transporta las entradas del usuario a la tabla interna que se generó automáticamente cuando el usuario selecciona el pulsador Ejecutar. La tabla interna tiene cuatro columnas: sign, option, low y high. En la figura se muestran las siguientes entradas creadas para la entrada de usuario: Si se introduce LH, se genera una fila con los valores I (incluido), EQ (igual), LH y espacio.
●
●
●
Si se introduce el intervalo AA a DL, se genera una fila con los valores I (incluido), BT (entre), AA y DL. Si se introduce BA como único valor para excluir, se genera una fila con los valores E (excluido), EQ (igual), BA y espacio.
Una vez que la tabla interna se haya rellenado con los criterios de selección, se puede utilizar para limitar la selección de contenido de la base de datos,como se muestra en la figura. El contenido de tabla se interpreta como se describe a continuación: If I_1, ... , I_n and E_1, ... , E_m son las condiciones incluidas y excluidas de la tabla interna, la condición compuesta que se utiliza para limitar la selección de datos es ( I_1 OR ... OR I_n ) AND ( NOT E_1 ) AND ... AND ( NOT E_m ).
●
●
518
Si la tabla está vacía, se cumple la condición WHERE para el campo relevante porque no existen selecciones.
© Copyright . Reservados todos los derechos.
Lección: Implementar pantallas de selección
Consejo: El operador IN también puede utilizarse en expresiones lógicas, por ejemplo, IF GS_SPFLI-CARRID IN SO_CAR. Las mismas tres características especiales se aplican para la definición de las opciones de selección y la sentencia PARAMETERS. Si el programa rellena la tabla interna de la opción de selección con el suplemento DEFAULT o la sentencia APPEND antes de visualizar la pantalla de selección (INITIALIZATION), el sistema visualiza el contenido de la pantalla de selección como condiciones propuestas que se pueden sobrescribir. Para obtener más información, consulte la documentación de palabra clave de SELECTOPTIONS. The participants should do the first exercise on classic reports here (selection screen and classic ABAP list).
How to Enter Complex Selections Develop and demonstrate the functionality of SELECT-OPTIONS.
© Copyright . Reservados todos los derechos.
519
Capítulo 11: Informe ABAP clásico
520
© Copyright . Reservados todos los derechos.
Capítulo 11 Ejercicio 29 493
Crear una Pantalla de selección y una Lista ABAP clásica
Ejemplo empresarial En lugar de un número de vuelo individual, desea poder introducir criterios de selección complejos en la pantalla de selección. Además, desea hacer que el diseño de la pantalla de selección y la lista ABAP sean más atractivos utilizando textos traducibles y, posiblemente, colores e iconos. Modelo BC400_RPT_REP_A Solución BC400_RPS_REP_A Utilice la sentencia ABAP SELECT-OPTIONS para implementar una opción de selección compleja en la pantalla de selección, transferir selecciones complejas a un método de obtención de datos, utilizar elementos de texto traducibles en la pantalla de selección y en la lista ABAP, y utilizar iconos y colores en una lista clásica (opcional). Tarea 1 1. Copie el modelo con el nombre ZBC400_##_REP_A.
Tarea 2 Sustituya el parámetro del número de vuelo en la pantalla de selección por una selección compleja (select-options). Para ajustar la obtención de datos de tal forma que se utilicen las opciones de selección, llame un método de clase CL_BC400_FLIGHTMODEL para el cual puede transferir la tabla de opciones de selección. 1. Sustituya la declaración del parámetro PA_CON por la declaración de una opción de selección (nombre sugerido: so_con). Consejo: Haga referencia al mismo tipo de estructura del diccionario cuando tipifique la opción de selección y el parámetro PA_CAR, de manera que la ayuda para búsqueda correspondiente en la pantalla de selección dependa del contexto. 2. Sustituya la llamada del método CL_BC400_FLIGHTMODEL=>GET_FLIGHTS por una llamada del método CL_BC400_FLIGHTMODEL=>GET_FLIGHTS_RANGE. Transfiera la tabla de opción de selección al método como parámetro real.
© Copyright . Reservados todos los derechos.
521
Capítulo 11: Informe ABAP clásico
Consejo: El objeto de datos SO_CON es una tabla interna con una cabecera. Los parámetros solo se pueden transferir si transfiere explícitamente el cuerpo de la tabla (también SO_CON[]). 3. Active y realice un test del programa.
Tarea 3 Asegúrese de que los textos dependientes del idioma se visualicen en la pantalla de selección en lugar de los nombres de los objetos de datos. 1. Actualice los elementos de texto del programa y defina textos de selección. Utilice textos que ya se hayan definido y traducido en el Dictionary ABAP. 2. Active y realice un test del programa.
Tarea 4 Si no hay datos disponibles, muestre un texto traducible en la lista y cree cabeceras traducibles. 1. Actualice un símbolo de texto y muéstrelo con la sentencia WRITE si el método no devuelve datos. 2. Actualice las cabeceras de la lista.
Tarea (Opcional) Defina los campos clave para los horarios de vuelo en azul claro. Presente un icono al principio de cada fila para mostrar la utilización mediante un semáforo. Utilice rojo para vuelos completos, amarillo para vuelos bastante llenos y verde para vuelos con pocas reservas o ninguna. 1. Proporcione a cada uno de los campos clave (CARRID, CONNID, FLDATE) un suplemento COLOR y la constante de color para los campos clave del grupo de tipos COL. 2. Presente un icono de semáforo al principio de cada fila. Utilice una de las constantes ICON_RED_LIGHT, ICON_YELLOW_LIGHT e ICON_GREEN_LIGHT del grupo de tipos ICON, según el porcentaje de utilización del vuelo.
522
© Copyright . Reservados todos los derechos.
Capítulo 11 Solución 29 495
Crear una Pantalla de selección y una Lista ABAP clásica
Ejemplo empresarial En lugar de un número de vuelo individual, desea poder introducir criterios de selección complejos en la pantalla de selección. Además, desea hacer que el diseño de la pantalla de selección y la lista ABAP sean más atractivos utilizando textos traducibles y, posiblemente, colores e iconos. Modelo BC400_RPT_REP_A Solución BC400_RPS_REP_A Utilice la sentencia ABAP SELECT-OPTIONS para implementar una opción de selección compleja en la pantalla de selección, transferir selecciones complejas a un método de obtención de datos, utilizar elementos de texto traducibles en la pantalla de selección y en la lista ABAP, y utilizar iconos y colores en una lista clásica (opcional). Tarea 1 1. Copie el modelo con el nombre ZBC400_##_REP_A. a) Realice este paso de la forma habitual.
Tarea 2 Sustituya el parámetro del número de vuelo en la pantalla de selección por una selección compleja (select-options). Para ajustar la obtención de datos de tal forma que se utilicen las opciones de selección, llame un método de clase CL_BC400_FLIGHTMODEL para el cual puede transferir la tabla de opciones de selección. 1. Sustituya la declaración del parámetro PA_CON por la declaración de una opción de selección (nombre sugerido: so_con). Consejo: Haga referencia al mismo tipo de estructura del diccionario cuando tipifique la opción de selección y el parámetro PA_CAR, de manera que la ayuda para búsqueda correspondiente en la pantalla de selección dependa del contexto. a) Consulte el extracto del código fuente de la solución modelo.
© Copyright . Reservados todos los derechos.
523
Capítulo 11: Informe ABAP clásico
2. Sustituya la llamada del método CL_BC400_FLIGHTMODEL=>GET_FLIGHTS por una llamada del método CL_BC400_FLIGHTMODEL=>GET_FLIGHTS_RANGE. Transfiera la tabla de opción de selección al método como parámetro real. Consejo: El objeto de datos SO_CON es una tabla interna con una cabecera. Los parámetros solo se pueden transferir si transfiere explícitamente el cuerpo de la tabla (también SO_CON[]). a) Consulte el extracto del código fuente de la solución modelo. 3. Active y realice un test del programa. a) Realice este paso de la forma habitual.
Tarea 3 Asegúrese de que los textos dependientes del idioma se visualicen en la pantalla de selección en lugar de los nombres de los objetos de datos. 1. Actualice los elementos de texto del programa y defina textos de selección. Utilice textos que ya se hayan definido y traducido en el Dictionary ABAP. a) Abra la actualización de la pantalla de selección mediante Pasar a → Elementos de texto → Textos de selección. b) Seleccione la casilla de verificación de la columna Referencia de diccionario para todos los elementos listados de la pantalla de selección. Consejo: Solo aparecerán los parámetros y las opciones de selección que sean parte de la versión activa del código fuente. c) Grabe y active los textos. 2. Active y realice un test del programa. a) Realice este paso de la forma habitual. Consejo: Debe activar los textos (tipo REPT objeto de Repository) antes de que se visualicen al ejecutar el programa.
Tarea 4 Si no hay datos disponibles, muestre un texto traducible en la lista y cree cabeceras traducibles. 1. Actualice un símbolo de texto y muéstrelo con la sentencia WRITE si el método no devuelve datos.
524
© Copyright . Reservados todos los derechos.
Lección: Implementar pantallas de selección
a) Abra la actualización de los símbolos de texto mediante Pasar a → Elementos de texto → Símbolos de texto. b) Asigne una abreviación de tres caracteres e introduzca un texto. c) Grabe y active los textos. d) Presente el símbolo de texto en la lista tal y como se muestra en el extracto de código fuente de la solución modelo. 2. Actualice las cabeceras de la lista. a) Ejecute el programa. b) Bifurque desde la visualización de la lista a la actualización de cabecera (Sistema → Lista → Cabecera de lista). c) Actualice las cabeceras. d) Reinicie el programa para realizar un test. Consejo: La lista se almacenará en la memoria intermedia del servidor de presentación. Las cabeceras se visualizarán únicamente cuando reinicie el programa.
Tarea (Opcional) Defina los campos clave para los horarios de vuelo en azul claro. Presente un icono al principio de cada fila para mostrar la utilización mediante un semáforo. Utilice rojo para vuelos completos, amarillo para vuelos bastante llenos y verde para vuelos con pocas reservas o ninguna. 1. Proporcione a cada uno de los campos clave (CARRID, CONNID, FLDATE) un suplemento COLOR y la constante de color para los campos clave del grupo de tipos COL. a) Consulte el extracto del código fuente de la solución modelo. 2. Presente un icono de semáforo al principio de cada fila. Utilice una de las constantes ICON_RED_LIGHT, ICON_YELLOW_LIGHT e ICON_GREEN_LIGHT del grupo de tipos ICON, según el porcentaje de utilización del vuelo. a) Consulte el extracto del código fuente de la solución modelo. Extracto del código fuente: *&----------------------------------------------* *& Report BC400_RPS_REP_A *&----------------------------------------------* REPORT bc400_rps_rep_a. TYPE-POOLS: icon, col. CONSTANTS: gc_limit_red TYPE s_flghtocc VALUE 98, gc_limit_yellow TYPE s_flghtocc VALUE 75.
© Copyright . Reservados todos los derechos.
525
Capítulo 11: Informe ABAP clásico
DATA:
gt_flights TYPE bc400_t_flights, gs_flight TYPE bc400_s_flight.
PARAMETERS: pa_car TYPE bc400_s_flight-carrid. SELECT-OPTIONS: so_con FOR gs_flight-connid. TRY.
CALL METHOD cl_bc400_flightmodel=>get_flights_range EXPORTING iv_carrid = pa_car it_connid = so_con[] " brackets needed for so_con IMPORTING et_flights = gt_flights. CATCH cx_bc400_no_data. WRITE / 'No flights for selected flight connection'(non). * WRITE / text-non. "alternative usage of text symbol ENDTRY. LOOP AT gt_flights INTO gs_flight. NEW-LINE. IF gs_flight-percentage >= gc_limit_red. WRITE icon_red_light AS ICON. ELSEIF gs_flight-percentage >= gc_limit_yellow. WRITE icon_yellow_light AS ICON. ELSE. WRITE icon_green_light AS ICON. ENDIF. WRITE:
gs_flight-carrid color COL_KEY, gs_flight-connid color COL_KEY, gs_flight-fldate color COL_KEY, gs_flight-seatsmax, gs_flight-seatsocc, gs_flight-percentage.
ENDLOOP.
526
© Copyright . Reservados todos los derechos.
Lección: Implementar pantallas de selección
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Describir los atributos y los beneficios de las pantallas de selección
●
Implementar opciones para restringir las selecciones de las pantallas de selección
© Copyright . Reservados todos los derechos.
527
Capítulo 11 Lección 3 500
Implementación de eventos de informes ABAP
RESUMEN DE LA LECCIÓN En este módulo se explica la implementación de los informes ABAP. Ejemplo empresarial Desea desarrollar un programa que demuestre la implementación de informes ABAP. Por este motivo, se requieren los siguientes conocimientos: ●
Comprender cómo implementar los eventos de los informes ABAP
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Implementar eventos de informes ABAP
Eventos ABAP
Figura 229: Estructuras y procedimientos de un programa ABAP ejecutable
Event control is an SAP-specific concept. In this section, explain the way the ABAP runtime system works with regard to an executable (type 1) program. The participants should be introduced to the most important events, understand their purpose, and be able to use them effectively in their programs. You should also show how a
528
© Copyright . Reservados todos los derechos.
Lección: Implementación de eventos de informes ABAP
more complex, executable program is structured and why the previous programs (type 1) can be executed.
Consejo: The LOAD-OF-PROGRAM event, which exists since Release 4.6 parallel to INITIALIZATION, should not be used in executable programs for the following reasons: ● LOAD-OF-PROGRAM has been designed mainly for use in function groups and module pools that did not have a start action prior to Release 4.6. INITIALIZATION is still used for executable programs to implement the dynamic default settings for the selection screen. (See also the documentation for the corresponding events.)
Al iniciar un programa ABAP, el sistema crea todos los objetos de datos globales de los programas en la memoria de trabajo. El sistema de tiempo de ejecución desencadena a continuación varios eventos de forma sucesiva. Si existe un bloque de procesamiento para un evento desencadenado en el programa, el sistema ejecuta las sentencias de este bloque secuencialmente. En la figura se muestran los eventos básicos que se desencadenaron y la secuencia en la que se desencadenaron; el programa implementa los bloques de procesamiento correspondientes. Un programa ABAP ejecutable es una colección de bloques de procesamiento que se procesan para sus eventos correspondientes. Las salidas creadas por medio de sentencias WRITE se almacenan en memorias intermedias de lista y solo se visualizan como una lista después de que el sistema haya procesado el bloque START-OF-SELECTION. Uso de eventos ABAP
Figura 230: Uso de eventos ABAP
© Copyright . Reservados todos los derechos.
529
Capítulo 11: Informe ABAP clásico
Si asigna valores a las variables PARAMETERS en el bloque INITIALIZATION, el sistema las muestra como valores por defecto modificables en los campos de entrada cuando se muestra la pantalla de selección. Tiene la opción de especificar un valor por defecto para el campo de entrada respectivo en la definición PARAMETERS mediante el suplemento DEFAULT. Sin embargo, puede utilizar la asignación de valores descrita en el bloque INITIALIZATION para asignar otro valor por defecto (asignación previa dinámica de la pantalla de selección) dinámicamente (es decir, con referencia a la situación). Si el usuario hace clic en un pulsador de la pantalla de selección (y desencadena el Process After Input [PAI]), el sistema transporta las entradas en las variables internas PARAMETERS correspondientes del programa y desencadena el evento AT SELECTION-SCREEN. Por este motivo, el bloque de procesamiento correspondiente es adecuado para una verificación de entrada o de autorización. Si, por ejemplo, se envía un mensaje del tipo E en este bloque de evento porque un usuario no tiene la autorización requerida, la pantalla de selección mostrará de nuevo el mensaje de error, lo que permite que los usuarios corrijan sus entradas. Solo si no se envía ningún mensaje de error en el bloque AT SELECTION-SCREEN, se desencadena el bloque START-OF-SELECTION. Entonces debería tener lugar el procesamiento principal del programa en el bloque de procesamiento correspondiente. The general input or authorization checks are implemented in the AT SELECTION-SCREEN block and, if necessary, an error message can be sent and the selection screen displayed again for a new entry. To make the difference between these two events more apparent, you should emphasize that there is no longer the option of displaying the selection screen again in the START-OF-SELECTION block.
Características de bloque de evento
Figura 231: Características de bloque de evento
Los bloques de procesamiento no se pueden anidar porque el anidamiento contradiría el concepto de los eventos ABAP. El sistema no ejecuta ninguna sentencia ni desencadena el próximo evento si falta el bloque de procesamiento.
530
© Copyright . Reservados todos los derechos.
Lección: Implementación de eventos de informes ABAP
El sistema de tiempo de ejecución ABAP controla el desencadenado de los eventos y la ejecución de los bloques de procesamiento. La secuencia en la que se colocan los bloques de evento en el programa no es importante. Si no se implementan bloques en el programa, el sistema asigna todas las sentencias al bloque de procesamiento estándar START-OF-SELECTION. Tell the participants that the above reasons are why previous programs in this course can be executed.
El evento INITIALIZATION
Figura 232: Programa de ejemplo
El ejemplo que se ilustra aquí contiene una pantalla de selección con un campo de entrada para una fecha. En circunstancias normales, debería aparecer la fecha actual como valor por defecto (DEFAULT sy-datum). Sin embargo, bajo determinadas condiciones (IF), la fecha del mismo día de la semana de la semana siguiente (pa_date = pa_date + 7.) se visualiza como valor por defecto. En la figura también se muestra cómo reacciona el sistema de tiempo de ejecución cuando falta el bloque de procesamiento. No existen sentencias ejecutadas para el evento correspondiente y se desencadena el evento siguiente.
How to Work with the INITIALIZATION Event Demonstrate the above example program without the AT SELECTION-SCREEN block (if necessary, using the ABAP Debugger). It is not available as a standard demonstration in the system. You can decide which dynamic check condition is used. For example, the following options are available: IF sy-datum = '20051231'.
© Copyright . Reservados todos los derechos.
531
Capítulo 11: Informe ABAP clásico
IF sy-langu = 'D'.
IF sy-uname = .
Evento AT SELECTION-SCREEN
Figura 233: Evento AT SELECTION-SCREEN
Desde la pantalla de selección, se desencadena el evento AT SELECTION-SCREEN tanto si selecciona Intro como F8 (Ejecutar). Después de procesar el bloque correspondiente, si el usuario selecciona el pulsador Ejecutar se desencadena el siguiente evento START-OFSELECTION y se inicia el procesamiento correspondiente. Sin embargo, si el usuario selecciona Intro, el sistema muestra de nuevo la pantalla de selección.
532
© Copyright . Reservados todos los derechos.
Lección: Implementación de eventos de informes ABAP
Mensajes de error en AT SELECTION-SCREEN
Figura 234: Mensajes de error en AT SELECTION-SCREEN
Inmediatamente antes de procesar el bloque AT SELECTION-SCREEN, el sistema transfiere las entradas de usuario a las variables correspondientes del programa. Por lo tanto, tiene sentido implementar verificaciones de entrada y de autorización requeridas en este bloque de procesamiento. Si el resultado de la verificación es negativo, simplemente puede enviar un mensaje de error al usuario y hacer que se visualice de nuevo la pantalla de selección. Entonces, el usuario tiene la oportunidad de realizar entradas nuevas. En caso contrario, el sistema genera un mensaje de error en el bloque START-OF-SELECTION con la finalización del programa.
© Copyright . Reservados todos los derechos.
533
Capítulo 11: Informe ABAP clásico
Syntax Example – Authorization Check with Error Dialog
Figura 235: Syntax Example – Authorization Check with Error Dialog
En la figura se ilustra un programa de ejemplo simple con verificación de autorización y diálogo de error en la pantalla de selección. Puede encontrar información adicional en la documentación de palabra clave de AT SELECTION-SCREEN.
How to Work with the AT SELECTION-SCREEN Event Develop and demonstrate the functionality of AT SELECTION-SCREEN.
534
© Copyright . Reservados todos los derechos.
Capítulo 11 Ejercicio 30 507
Implementar eventos de informes ABAP
Ejemplo empresarial Desea realizar una asignación previa dinámica para el ID de compañía aérea en la pantalla de selección. Si los usuarios introducen una compañía aérea para la cual no tienen autorización de visualización, debería aparecer un mensaje de error y visualizarse de nuevo la pantalla de selección. Modelo BC400_RPS_REP_A Solución BC400_RPS_REP_B Implemente una asignación previa dinámica en la pantalla de selección y diálogos de error para la pantalla de selección estándar. Tarea 1 Copie su programa ZBC400_##_REP_A o el modelo de copia. 1. Copie el modelo al nombre ZBC400_##_REP_B.
Tarea 2 Cree un bloque de eventos ABAP que se ejecute antes de que se visualice la pantalla de selección e implemente una asignación previa dinámica del parámetro para el ID de compañía aérea. 1. Cree el bloque de evento INITIALIZATION y rellene el parámetro PA_CAR dinámicamente con el valor LH. Consejo: Debe asignar la parte ejecutable previa del programa explícitamente al bloque de evento START-OF-SELECTION antes de definir el bloque de evento INITIALIZATION.
Tarea 3 Asegúrese de que después de una acción de usuario en la pantalla de selección, el sistema verifique si el usuario tiene autorización para visualizar datos de la compañía aérea introducida. Implemente el registro de manera que pueda visualizar la pantalla de selección de nuevo con un mensaje de error si la autorización no existe.
© Copyright . Reservados todos los derechos.
535
Capítulo 11: Informe ABAP clásico
1. Cree el bloque de evento AT SELECTION-SCREEN e implemente una verificación de autorización. Para ello, utilice un método check _authority de la clase CL_BC400_FLIGHTMODEL. 2. Si falta la autorización, envíe un mensaje apropiado de la clase de mensajes BC400. 3. ¿Qué mensaje se debe utilizar para que se visualice de nuevo la pantalla de selección y el usuario no pueda acceder al bloque de procesamiento START-OF-SELECTION sin autorización?
536
© Copyright . Reservados todos los derechos.
Capítulo 11 Solución 30 509
Implementar eventos de informes ABAP
Ejemplo empresarial Desea realizar una asignación previa dinámica para el ID de compañía aérea en la pantalla de selección. Si los usuarios introducen una compañía aérea para la cual no tienen autorización de visualización, debería aparecer un mensaje de error y visualizarse de nuevo la pantalla de selección. Modelo BC400_RPS_REP_A Solución BC400_RPS_REP_B Implemente una asignación previa dinámica en la pantalla de selección y diálogos de error para la pantalla de selección estándar. Tarea 1 Copie su programa ZBC400_##_REP_A o el modelo de copia. 1. Copie el modelo al nombre ZBC400_##_REP_B. a) Realice este paso de la forma habitual.
Tarea 2 Cree un bloque de eventos ABAP que se ejecute antes de que se visualice la pantalla de selección e implemente una asignación previa dinámica del parámetro para el ID de compañía aérea. 1. Cree el bloque de evento INITIALIZATION y rellene el parámetro PA_CAR dinámicamente con el valor LH. Consejo: Debe asignar la parte ejecutable previa del programa explícitamente al bloque de evento START-OF-SELECTION antes de definir el bloque de evento INITIALIZATION. a) Consulte el extracto del código fuente de la solución modelo.
Tarea 3 Asegúrese de que después de una acción de usuario en la pantalla de selección, el sistema verifique si el usuario tiene autorización para visualizar datos de la compañía aérea
© Copyright . Reservados todos los derechos.
537
Capítulo 11: Informe ABAP clásico
introducida. Implemente el registro de manera que pueda visualizar la pantalla de selección de nuevo con un mensaje de error si la autorización no existe. 1. Cree el bloque de evento AT SELECTION-SCREEN e implemente una verificación de autorización. Para ello, utilice un método check _authority de la clase CL_BC400_FLIGHTMODEL. a) Consulte el extracto del código fuente de la solución modelo. 2. Si falta la autorización, envíe un mensaje apropiado de la clase de mensajes BC400. a) Consulte el extracto del código fuente de la solución modelo. 3. ¿Qué mensaje se debe utilizar para que se visualice de nuevo la pantalla de selección y el usuario no pueda acceder al bloque de procesamiento START-OF-SELECTION sin autorización? a) Mensaje de error, tipo de mensaje E. Extracto del código fuente: *&-------------------------------------------*& Report BC400_RPS_REP_B *&-------------------------------------------REPORT bc400_rps_rep_b. TYPE-POOLS: icon, col. CONSTANTS: gc_limit_red TYPE s_flghtocc VALUE 98, gc_limit_yellow TYPE s_flghtocc VALUE 75, gc_actvt_display TYPE activ_auth VALUE '03'. DATA:
gt_flights TYPE bc400_t_flights, gs_flight TYPE bc400_s_flight.
PARAMETERS: pa_car TYPE bc400_s_flight-carrid. SELECT-OPTIONS: so_con FOR gs_flight-connid. INITIALIZATION. pa_car = 'LH'. AT SELECTION-SCREEN. TRY. CALL METHOD cl_bc400_flightmodel=>check_authority EXPORTING iv_carrid = pa_car iv_activity = gc_actvt_display. CATCH cx_bc400_no_auth . MESSAGE e046(bc400) WITH pa_car. ENDTRY. START-OF-SELECTION. TRY.
CALL METHOD cl_bc400_flightmodel=>get_flights_range EXPORTING
538
© Copyright . Reservados todos los derechos.
Lección: Implementación de eventos de informes ABAP
iv_carrid = pa_car it_connid = so_con[] "brackets needed for so_con IMPORTING et_flights = gt_flights. CATCH cx_bc400_no_data. WRITE / 'No flights for the selected flight connection'(non). ENDTRY. LOOP AT gt_flights INTO gs_flight. NEW-LINE. IF gs_flight-percentage >= gc_limit_red. WRITE icon_red_light AS ICON. ELSEIF gs_flight-percentage >= gc_limit_yellow. WRITE icon_yellow_light AS ICON. ELSE. WRITE icon_green_light AS ICON. ENDIF. WRITE:
ENDLOOP.
gs_flight-carrid COLOR COL_KEY, gs_flight-connid COLOR COL_KEY, gs_flight-fldate COLOR COL_KEY, gs_flight-seatsmax, gs_flight-seatsocc, gs_flight-percentage.
© Copyright . Reservados todos los derechos.
539
Capítulo 11: Informe ABAP clásico
RESUMEN DE LA LECCIÓN Ahora podrá: ●
540
Implementar eventos de informes ABAP
© Copyright . Reservados todos los derechos.
Capítulo 11
513
Evaluación de la formación
1. Puede utilizar __________ para adaptar la interfaz de lista por defecto a sus propias necesidades. Seleccione la respuesta correcta. X
A Sentencia WRITE
X
B Menu Painter
X
C Función Patrón
2. ¿Cuál de las siguientes opciones tienen funcionalidad estándar en una pantalla de selección? Seleccione las respuestas correctas. X
A Capacidad singular
X
B Verificación de tipo
X
C Variantes
X
D Entrada de valor
3. ¿Cuál de las siguientes sentencias se utiliza para definir una variable de entrada? Seleccione la respuesta correcta. X
A DATA
X
B VALUE
X
C PARAMETERS
X
D DEFAULT
© Copyright . Reservados todos los derechos.
541
Capítulo 11: Evaluación de la formación
4. ¿Cuál de las siguientes opciones son las características de un bloque de evento? Seleccione las respuestas correctas.
542
X
A Finaliza al inicio del siguiente bloque de procesamiento
X
B Se puede anidar
X
C Existencia no es absolutamente necesaria
X
D Secuencia de bloques de eventos importante
© Copyright . Reservados todos los derechos.
Capítulo 11
515
Respuestas a la Evaluación de la formación
1. Puede utilizar __________ para adaptar la interfaz de lista por defecto a sus propias necesidades. Seleccione la respuesta correcta. X
A Sentencia WRITE
X
B Menu Painter
X
C Función Patrón
2. ¿Cuál de las siguientes opciones tienen funcionalidad estándar en una pantalla de selección? Seleccione las respuestas correctas. X
A Capacidad singular
X
B Verificación de tipo
X
C Variantes
X
D Entrada de valor
3. ¿Cuál de las siguientes sentencias se utiliza para definir una variable de entrada? Seleccione la respuesta correcta. X
A DATA
X
B VALUE
X
C PARAMETERS
X
D DEFAULT
© Copyright . Reservados todos los derechos.
543
Capítulo 11: Respuestas a la Evaluación de la formación
4. ¿Cuál de las siguientes opciones son las características de un bloque de evento? Seleccione las respuestas correctas.
544
X
A Finaliza al inicio del siguiente bloque de procesamiento
X
B Se puede anidar
X
C Existencia no es absolutamente necesaria
X
D Secuencia de bloques de eventos importante
© Copyright . Reservados todos los derechos.
CAPÍTULO 12
Herramientas de análisis de programa
Lección 1 Usar el Code Inspector
546
OBJETIVOS DEL CAPÍTULO ●
Explicar la finalidad y la utilización del Code Inspector
●
Utilizar el Code Inspector para análisis simples de los programas
© Copyright . Reservados todos los derechos.
545
Capítulo 12 Lección 1 518
Usar el Code Inspector
RESUMEN DE LA LECCIÓN En este módulo se explica la función básica y la finalidad del Code Inspector. Esto es sólo una breve introducción a la herramienta. Encontrará más información en la documentación relevante o asistiendo a los cursos avanzados. Ejemplo empresarial Necesita verificar el rendimiento, los típicos errores semánticos de programación y los intervalos de seguridad en sus programas. Por este motivo, se requieren los siguientes conocimientos: ●
Comprender la finalidad y la utilización del Code Inspector
●
Comprender las propiedades más importantes del Code Inspector
●
Comprender cómo utilizar el Code Inspector para análisis simples de los programas This unit provides a brief introduction to and demonstration of the tool to inform the participants of its purpose and basic functions. You should avoid giving detailed information here due to time constraints. If necessary, refer to the online documentation and the training course BC402.
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Explicar la finalidad y la utilización del Code Inspector
●
Utilizar el Code Inspector para análisis simples de los programas
Code Inspector El Code Inspector le ofrece la opción de analizar sus programas centrándose en el rendimiento, la seguridad y los típicos errores semánticos. Aquí vemos algunos ejemplos de lo que se puede verificar: Problemas de rendimiento típicos: ● ¿Se utilizan índices para el acceso a la base de datos? ●
¿Las sentencias SELECT están incrustadas en bucles?
Problemas de seguridad típicos: ● ¿Los datos se leen de un mandante que no es el mandante de inicio de sesión? ●
¿En la sentencia SELECT se especifica la tabla de datos o la cláusula WHERE dinámicamente?
Errores de semántica típicos:
546
© Copyright . Reservados todos los derechos.
Lección: Usar el Code Inspector
●
¿Se verifica el campo sy-subrc después de cada sentencia AUTHORITY-CHECK?
●
¿Hay un mandante especificado para CLIENT SPECIFIED?
●
¿Se envían varios mensajes del tipo E (mensajes E) sucesivamente?
Llamada del Code Inspector
Figura 236: Llamada de Code Inspector
Existen varias formas distintas de llamar al Code Inspector. La figura muestra una posibilidad. Llame al Code Inspector desde el menú contextual de la lista de objetos seleccionando Verificar → Code Inspector y lleve a cabo una inspección. Obtendrá la misma llamada si selecciona Módulo de funciones → Verificar → Code Inspector.
© Copyright . Reservados todos los derechos.
547
Capítulo 12: Herramientas de análisis de programa
Uso del Code Inspector
Figura 237: Resultado de la inspección
Como resultado de la inspección, recibirá una lista de errores y mensajes de advertencia. El información del mensaje muestra una descripción detallada de los errores, pulsador además de sugerencias para la mejora. Sin embargo, si hace doble clic en el texto del error, pasará a la sentencia de programa correspondiente. En algunos casos, es práctico, o incluso imprescindible, escribir en el código fuente ABAP que Code Inspector realiza una consulta, como una llamada de transacción. Puede proporcionar el comentario "#EC * para tales comandos, que es la misma acción que tomaría con una verificación de sintaxis extendida. Cuando inicia una verificación desde dentro del Editor ABAP, el inspector de código utiliza la variante de verificación predeterminada con un grupo predefinido de verificaciones que deben utilizarse. Puede sobrescribir esta variante de verificación por defecto creando una nueva con el nombre DEFAULT. Sin embargo, esta nueva variante de verificación sustituirá la variante estándar de su usuario en todos los mandantes. Si elimina la variante de verificación por defecto, se utiliza automáticamente la variante estándar para futuras verificaciones. Por este motivo, se recomienda que defina sus propias variantes de verificación en lugar de sobrescribir la variante por defecto.
548
© Copyright . Reservados todos los derechos.
Lección: Usar el Code Inspector
Definición de variantes de verificación, sets de objetos e inspecciones
Figura 238: Verificación Code Inspector avanzada
Para definir verificaciones individuales, inicie el Code Inspector con el código de transacción SCI, o desde el menú SAP Easy Access seleccionando Herramientas → Workbench ABAP → Test → Code Inspector. La pantalla inicial contiene las siguientes áreas: ● Variante de verificación La variante de verificación determina qué verificaciones se realizarán en el sistema, como las convenciones de programación o una verificación del rendimiento. ●
Conjunto de objetos El set de objetos determina qué objetos del Repository se verificarán.
●
Inspección La inspección se trata del nombre de la verificación real. Para grabar la inspección y su resultado, o para ejecutarla en el fondo, debe darle un nombre. Si no indica un nombre para la inspección, el sistema no graba el resultado.
La inspección utiliza una variante de verificación y un set de objetos definidos previamente. Sin embargo, también es posible crear sets de objetos y variantes de verificación temporales que solo sean válidos para una inspección, y que no se puedan reutilizar en otras inspecciones.
Consejo: Puede crear variantes de verificación, sets de objetos e inspecciones como privados o públicos. Para alternar entre las dos categorías, utilice el pulsador que está situado delante del campo de entrada. Tenga en cuenta que sólo usted puede utilizar los objetos privados, mientras que los públicos estarán disponibles para todos los usuarios del sistema.
© Copyright . Reservados todos los derechos.
549
Capítulo 12: Herramientas de análisis de programa
Una variante de verificación consta de una o varias categorías de verificación que, a su vez, constan de una o más verificaciones (inspecciones) sencillas. Puede elegir los parámetros para estas verificaciones mediante una palabra clave o un indicador para un aspecto parcial específico de la verificación. En la mayoría de los casos, las verificaciones sencillas investigan un tipo de objeto específico, como la "Verificación de atributos de tabla", que solo examina tablas DDIC. Variante de verificación
Figura 239: Variante de verificación
El sistema asigna verificaciones sencillas a varias categorías de verificación. Las categorías de verificación más importantes son las siguientes: ● Verificaciones generales Las verificaciones generales contienen el formato de datos, como la lista de nombres de tablas de sentencias SELECT. ●
Verificaciones del rendimiento Las verificaciones de rendimiento contienen verificaciones para el rendimiento y el uso de recursos, como un análisis de la condición WHERE para SELECT o UPDATE y DELETE, las sentencias SELECT que omiten la memoria intermedia de la tabla y el acceso de bajo rendimiento a las tablas internas.
●
Verificaciones de seguridad Las verificaciones de seguridad contienen verificaciones de sentencias críticas, consultas de todos los mandantes y verificaciones de autoridad insuficientes.
●
Verificación de sintaxis y generación La verificación y generación de sintaxis contienen la verificación de sintaxis ABAP, una verificación y generación de programa extendidas.
●
Convenciones de programación Las convenciones de programación contienen verificaciones de convenciones para fijar nombres.
550
© Copyright . Reservados todos los derechos.
Lección: Usar el Code Inspector
●
Funciones de búsqueda Las funciones de búsqueda contienen búsquedas para tokens (palabras) y sentencias en el código fuente ABAP. Demonstration: How to Work with the Code Inspector Demonstrate the simple call of the Code Inspector from the ABAP editor. The function group BC400_CID is available for the demonstration. Demonstrate and discuss the errors that are found in function module BC400_CID_WRONG. Compare it with function module BC400_CID_RIGHT and discuss why no errors are found here. Run transaction SCI .
DISCUSIÓN CON MODERADOR ¿También existen estas herramientas de análisis en otros entornos de desarrollo?
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Explicar la finalidad y la utilización del Code Inspector
●
Utilizar el Code Inspector para análisis simples de los programas
© Copyright . Reservados todos los derechos.
551
Capítulo 12: Herramientas de análisis de programa
552
© Copyright . Reservados todos los derechos.
Capítulo 12
525
Evaluación de la formación
1. ¿Cuáles de las siguientes afirmaciones relativas al Code Inspector son verdaderas? Seleccione las respuestas correctas. X
A Solo puede usar la variante de verificación DEFAULT.
X
B Puede crear una variante de verificación para definir los detalles que se verificarán.
X
C La inspección estándar se lleva a cabo cuando la verificación se realiza a través del menú contextual desde el Object Navigator.
X
D Puede definir las variantes de verificación, los sets de objetos y las inspecciones mediante la transacción SCI.
2. ¿Qué aspectos toma en cuenta el Code Inspector cuando examina un programa? Seleccione las respuestas correctas. X
A Verificación de sintaxis
X
B Errores semánticos típicos (por ejemplo, sentencia AUTHORITY-CHECK con subsiguiente verificación SY-SUBRC)
X
C Rendimiento (por ejemplo, sentencias SELECT anidadas)
X
D Seguridad (por ejemplo, accesos a datos de todos los mandantes)
X
E Formato del código fuente (por ejemplo, sangrado de las líneas del programa con bucles)
© Copyright . Reservados todos los derechos.
553
Capítulo 12
526
Respuestas a la Evaluación de la formación
1. ¿Cuáles de las siguientes afirmaciones relativas al Code Inspector son verdaderas? Seleccione las respuestas correctas. X
A Solo puede usar la variante de verificación DEFAULT.
X
B Puede crear una variante de verificación para definir los detalles que se verificarán.
X
C La inspección estándar se lleva a cabo cuando la verificación se realiza a través del menú contextual desde el Object Navigator.
X
D Puede definir las variantes de verificación, los sets de objetos y las inspecciones mediante la transacción SCI.
2. ¿Qué aspectos toma en cuenta el Code Inspector cuando examina un programa? Seleccione las respuestas correctas.
554
X
A Verificación de sintaxis
X
B Errores semánticos típicos (por ejemplo, sentencia AUTHORITY-CHECK con subsiguiente verificación SY-SUBRC)
X
C Rendimiento (por ejemplo, sentencias SELECT anidadas)
X
D Seguridad (por ejemplo, accesos a datos de todos los mandantes)
X
E Formato del código fuente (por ejemplo, sangrado de las líneas del programa con bucles)
© Copyright . Reservados todos los derechos.
CAPÍTULO 13
Llamadas de programa y gestión de memoria
Lección 1 Llamada de programas de manera síncrona Ejercicio 31: Implementación de llamadas de programa
556 565
Lección 2 Un resumen del tiempo de ejecución ABAP y gestión de memoria Ejercicio 32: Utilizar la memoria de ABAP y la memoria de SAP
572 593
OBJETIVOS DEL CAPÍTULO ●
Llamar programas de manera síncrona
●
Generar y activar programas
●
Explicar la gestión de memoria de sesión de usuario
●
Transferir datos entre programas
●
Explicar la gestión de memoria de objetos de datos profundos
●
Utilizar componentes encasillados
© Copyright . Reservados todos los derechos.
555
Capítulo 13 Lección 1 528
Llamada de programas de manera síncrona
RESUMEN DE LA LECCIÓN En este módulo, se analizan varias técnicas para llamar programas completos de manera síncrona. También analiza cómo insertar y reiniciar programas, y cómo transferir datos al programa llamado durante las llamadas. When demonstrating memory analysis during the lesson on memory management for strings and internal tables, give priority to the use of the debugger. The subject of shared objects may not be relevant for all participants. If necessary, you can leave it until the end of the course or omit it entirely. Ejemplo empresarial Desea llamar los programas existentes de una nueva aplicación. Para hacerlo, debe familiarizarse con las técnicas para llamar programas. Por este motivo, se requieren los siguientes conocimientos: ●
●
Cómo se llaman los programas dentro de otros programas Un resumen de las distintas opciones para transferir datos al programa llamado durante las llamadas de programa Emphasize that program calls are not a modularization technique in the conventional sense. Program calls must only be used in cases where existing programs must be integrated in new applications with minimum effort. If you know that a function needs to be reused, SAP recommends implementing the corresponding functions in a function module or global class.
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
556
Llamar programas de manera síncrona
© Copyright . Reservados todos los derechos.
Lección: Llamada de programas de manera síncrona
Llamadas de programa síncronas
Figura 240: Llamadas de programa síncronas
Tiene dos opciones al llamar otro programa de manera síncrona: Insertar
●
El flujo de proceso del programa de llamada se pausa mientras el programa llamado se ejecuta y se reanuda cuando el programa llamado está completo. ●
Nuevo inicio El programa de llamada se cancela y el programa llamado se inicia.
Los programas completos solo se pueden ejecutar en una secuencia dentro de una sesión de usuario individual. SAP se refiere a este esquema de procesamiento como llamadas secuenciales. Para ejecutar las actividades en paralelo, debe utilizar módulos de funciones.
Nota: Encontrará más información sobre la ejecución síncrona en otros cursos de formación y en la documentación de palabras clave ABAP para la sentencia CALL FUNCTION ... STARTING NEW TASK ...
© Copyright . Reservados todos los derechos.
557
Capítulo 13: Llamadas de programa y gestión de memoria
Llamadas síncronas de programas ejecutables
Figura 241: Llamada de un programa ejecutable
Para iniciar un programa ejecutable (tipo 1), utilice la declaración SUBMIT. Si utiliza el suplemento VIA SELECTION-SCREEN, el sistema muestra la pantalla de selección estándar. Si utiliza el suplemento AND RETURN, el sistema reanuda el proceso con la primera sentencia del programa de llamada después de la sentencia SUBMIT, una vez que haya finalizado la ejecución del programa llamado.
Nota: Para obtener más información, consulte la documentación de palabras clave de ABAP para la sentencia SUBMIT.
558
© Copyright . Reservados todos los derechos.
Lección: Llamada de programas de manera síncrona
Traspaso de datos mediante la interfaz del programa
Figura 242: Traspaso de datos mediante la interfaz del programa
Al llamar programas ABAP que tienen una pantalla de selección estándar, puede pasar datos para los campos de entrada en la llamada. Los datos para los campos de entrada pueden transferirse en las siguientes maneras: ● Especificando una variante para la pantalla de selección cuando llama el programa ●
Especificando valores específicos para campos de entrada cuando llama el programa
Asignación previa de campos de entrada
Figura 243: Asignación previa de campos de entrada
© Copyright . Reservados todos los derechos.
559
Capítulo 13: Llamadas de programa y gestión de memoria
El suplemento WITH en la sentencia SUBMIT permite asignar valores a los campos en una pantalla de selección estándar. Los operadores relacionales como EQ, NE, etc., y los operadores de inclusión I y E son similares en significado a SELECT OPTIONS. Si desea establecer varias selecciones para una opción de selección, puede utilizar el tipo RANGE en lugar de suplementos WITH individuales. Con el tipo RANGE, se crea una tabla de selección que puede rellenar como si fuera una opción de selección. A continuación, debe transferir la tabla al programa ejecutable. Para visualizar la pantalla de selección estándar cuando llame al programa, utilice el suplemento VIA SELECTION-SCREEN. Utilice el modelo de sentencia en el Editor ABAP para insertar una llamada de programa mediante SUBMIT. La estructura proporciona automáticamente los nombres de los parámetros y las opciones de selección disponibles en la imagen de selección estándar. For more information about working with variants and about other syntax variants of the WITH addition, see the ABAP keyword documentation for the SUBMIT statement.
How to Debug Synchronous Calls of Executable Programs Use the program SAPBC414D_CALLTECHNIQUES (transaction code BC414D_CALL) to demonstrate the options for program and transaction calls. Use the program SAPBC414D_DATATRANSFER (transaction code BC414D_DATATRANSFER) to demonstrate the data transfer for program and transaction calls.
Llamadas de transacción síncronas
Figura 244: Llamada de una transacción
560
© Copyright . Reservados todos los derechos.
Lección: Llamada de programas de manera síncrona
Si utiliza la sentencia LEAVE TO TRANSACTION 'T_CODE', el sistema cancela el programa actual e inicia la transacción con el código de transacción T_CODE. La sentencia es el equivalente a registrar /NT_CODE en el campo de comando. Con la sentencia CALL TRANSACTION ‘T_CODE’, puede pausar la ejecución del programa de llamada hasta que el programa llamado finalice su ejecución. Puede utilizar la sentencia LEAVE PROGRAM para forzar la cancelación de un programa. En los casos donde esta sentencia se ejecuta en un programa llamado por CALL TRANSACTION 'T_CODE' o SUBMIT prog_name AND RETURN, continúe con la siguiente sentencia después de esta llamada. En el resto de los casos, el sistema regresa al menú de aplicación desde el que el usuario inició el programa. Si utiliza el suplemento ... AND SKIP FIRST SCREEN, el sistema no muestra el contenido de la primera imagen en la transacción.
Atención: El sistema procesa la lógica de proceso.
Cuando inicia una transacción usando CALL TRANSACTION 'T_CODE' y esa transacción utiliza técnicas de actualización, puede usar el suplemento UPDATE para especificar la técnica de actualización (asíncrona [por defecto], síncrona o local) que el programa puede usar. For more information, see training course BC414 (Programming Database Updates) and the SAP Library. Traspasar datos mediante una tabla interna
Figura 245: Traspaso de datos mediante una tabla interna
Al llamar una transacción mediante la sentencia CALL TRANSACTION 'T_CODE' USING bi_itab, puede ejecutar la transacción T_CODE usando los valores de la tabla interna bi_itab en los campos de la pantalla.
© Copyright . Reservados todos los derechos.
561
Capítulo 13: Llamadas de programa y gestión de memoria
Esta tabla interna debe tener el tipo de estructura global BDCDATA y debe rellenarla como corresponda. El suplemento MODE permite especificar si la pantalla muestra todo el contenido (opción estándar: A), solo si se produce un error (E) o en ningún caso (N). Puede utilizar el suplemento MESSAGES INTO para especificar una tabla interna en la que pueden escribirse los mensajes del sistema. La tabla interna correspondiente debe tener el tipo de estructura global BDCMSGCOLL. Puede utilizar el código de retorno (SY-SUBRC), para verificar que el sistema ejecute bien la transacción. Esta técnica de traspaso de datos mediante una tabla interna es útil en los siguientes casos: ● Procesamiento en diálogo, pero no rellenado de los campos de entrada mediante parámetros GET ●
Procesamiento de la transacción en el fondo, en cuyo caso donde también debe traspasar los códigos de funciones en la tabla
Campos del tipo global BDCDATA Estos son los campos en el tipo global BDCDATA: Nombre de campo
Longitud
Descripción
Observe al rellenar
programa
40
Nombre del programa
Solo el primer registro para la pantalla
dynpro
4
Número de pantalla
Solo el primer registro para la pantalla
dynbegin
1
Primer registro
‘x’ para el primer registro para la pantalla, de lo contrario ‘ ‘
fnam
132
Nombre de campo
fval
132
Valor de campo
Independiente de mayúsculas/ minúsculas
Esta es la información que necesita para rellenar la tabla interna en formato batch input: ● Identifique cada pantalla que desee rellenar y procesar automáticamente en la transacción mediante una línea en la que únicamente se rellenan los campos PROGRAM, DYNPRO y DYNBEGIN. ●
562
Después de que el registro identifica la pantalla, utilice un nuevo registro BDCDATA para cada registro que desee rellenar. Estos registros utilizan los campos FNAM y FVAL. Puede proporcionar valores para los siguientes tipos de campos: campos de entrada o de salida (con datos), el campo de comando BDC_OKCODE (con un código de funciones) o el campo para el posicionamiento del cursor BDC_CURSOR (con un nombre de campo).
© Copyright . Reservados todos los derechos.
Lección: Llamada de programas de manera síncrona
La técnica de traspaso de datos mediante una tabla interna es además uno de los posibles modos de transferir datos de sistemas distintos de SAP. Al proceder así, la tabla interna debe contener la entrada completa necesaria para la ejecución de la transacción en el fondo. For more information about transferring data using internal table, see training course BC420 (Data Transfer) and the SAP Library. Transferencia de datos mediante una tabla interna, ejemplo de aplicación
Figura 246: Transferencia de datos mediante una tabla interna, ejemplo de aplicación
La figura muestra un ejemplo de la transacción BC402_CALD_CTA_U. Cuando el usuario crea una nueva entrada de cliente, el programa llama la transacción BC402_CALD_CRE_CUST. Esta transacción no implementa una importación desde la memoria ABAP y los campos de entrada de la transacción no se establecen como parámetros GET. Después de la sentencia CALL TRANSACTION, el sistema transfiere los datos del cliente mediante una tabla interna y los procesa en el fondo. Si la operación es satisfactoria, puede introducir el nuevo registro de cliente en la lista de espera. En la figura se muestra la tabla interna en la que rellena, en formato BDCDATA. En el tiempo de ejecución, CURRENT_NAME indica el nombre de cliente del campo de entrada y CURRENT_CITY indica la ciudad. Direccione el campo de comando mediante BDC_OKCODE, que capta el código de función que el usuario desencadena eligiendo una clave de función, botón u opción de menú durante el flujo de diálogo. El usuario también puede introducir un código directamente en el campo de comando.
© Copyright . Reservados todos los derechos.
563
Capítulo 13: Llamadas de programa y gestión de memoria
564
© Copyright . Reservados todos los derechos.
Capítulo 13 Ejercicio 31 535
Implementación de llamadas de programa
Ejemplo empresarial Un programa existente muestra una lista de datos. Desea mejorar el programa permitiéndoles a los usuarios acceder a un informe existente o una transacción de diálogo, haciendo doble clic en una línea. Debe implementar llamadas de programas ejecutables, implementar llamadas de transacción y transferir datos a los programas ejecutables y transacciones. Tarea 1 Copie el programa BC402_PCT_CONN_LIST y todos sus componentes al nombre ZBC402_##_CONN_LIST, donde ## representa su número de grupo. Familiarícese con el programa y su funcionamiento. 1. Copie el modelo. 2. Active y realice un test del programa. 3. Analice el código fuente. ¿Cómo se implementa la visualización de las conexiones de vuelos?
4. El programa ya está establecido para tratar eventos de doble clic. ¿Qué bloque de procesamiento debe mejorar para hacerlo?
Tarea 2 Implemente el método de controlador que se ejecuta cuando un usuario hace doble clic en una conexión de vuelo. Asegúrese de que se devuelva una lista de vuelos para la conexión elegida si el usuario hace doble clic en la columna CARRID. Para hacerlo, utilice el programa ejecutable BC402_INS_FLIGHT_LIST, o su propio programa, ZBC402_##_FLIGHT_LIST. 1. Implemente el método on_double_click de la clase local lcl_handler. El parámetro para import COLUMN contiene la información de la columna en la cual el usuario hizo clic. Utilice la sentencia SUBMIT para llamar el programa ejecutable. 2. Asegúrese de que los usuarios puedan regresar a la visualización de conexiones de vuelo después de visualizar las fechas.
© Copyright . Reservados todos los derechos.
565
Capítulo 13: Llamadas de programa y gestión de memoria
3. Facilite la interfaz del programa llamado con los valores clave de la conexión de vuelo elegida. Para hacerlo, determine los nombres de los campos de entrada en la pantalla de selección.
Tarea 3 Implemente el método de controlador que se ejecuta cuando un usuario hace doble clic en una conexión de vuelo. Asegúrese de que los detalles de la aerolínea se muestren para la conexión elegida si el usuario hace doble clic en la columna CARRID. Para ello, llame la transacción de diálogo BC402MCAR. 1. Llame la transacción para insertarla de manera síncrona. 2. En la transacción, transfiera el ID de aerolínea de la conexión elegida. Para ello, utilice el modificador USING. Determine el nombre del programa, el número de pantalla y el denominador de campo de campo de entrada en la pantalla inicial de transacción BC402MCAR. 3. Transfiera el código de función que se encuentra enlazado con el pulsador de la pantalla inicial en la transacción. 4. Asegúrese de que la transacción se procese sin la visualización de pantalla. Para ello, utilice el modificador MODE con un valor adecuado.
566
© Copyright . Reservados todos los derechos.
Capítulo 13 Solución 31 537
Implementación de llamadas de programa
Ejemplo empresarial Un programa existente muestra una lista de datos. Desea mejorar el programa permitiéndoles a los usuarios acceder a un informe existente o una transacción de diálogo, haciendo doble clic en una línea. Debe implementar llamadas de programas ejecutables, implementar llamadas de transacción y transferir datos a los programas ejecutables y transacciones. Tarea 1 Copie el programa BC402_PCT_CONN_LIST y todos sus componentes al nombre ZBC402_##_CONN_LIST, donde ## representa su número de grupo. Familiarícese con el programa y su funcionamiento. 1. Copie el modelo. a) Realice este paso de la forma habitual. 2. Active y realice un test del programa. a) Realice este paso de la forma habitual. 3. Analice el código fuente. ¿Cómo se implementa la visualización de las conexiones de vuelos? El programa utiliza una instancia de la clase cl_salv_table. El método estático de factory se llama para generar una instancia de la clase y transferir la tabla con los datos. El método de visualización muestra los datos en un control Grid ALV. 4. El programa ya está establecido para tratar eventos de doble clic. ¿Qué bloque de procesamiento debe mejorar para hacerlo? El método on_double_click de la clase local lcl_handler.
Tarea 2 Implemente el método de controlador que se ejecuta cuando un usuario hace doble clic en una conexión de vuelo. Asegúrese de que se devuelva una lista de vuelos para la conexión elegida si el usuario hace doble clic en la columna CARRID. Para hacerlo, utilice el programa ejecutable BC402_INS_FLIGHT_LIST, o su propio programa, ZBC402_##_FLIGHT_LIST. 1. Implemente el método on_double_click de la clase local lcl_handler. El parámetro para import COLUMN contiene la información de la columna en la cual el usuario hizo clic. Utilice la sentencia SUBMIT para llamar el programa ejecutable. a) Consulte el extracto del código fuente de la solución modelo.
© Copyright . Reservados todos los derechos.
567
Capítulo 13: Llamadas de programa y gestión de memoria
2. Asegúrese de que los usuarios puedan regresar a la visualización de conexiones de vuelo después de visualizar las fechas. a) Modificador AND RETURN; consulte el extracto del código fuente de la solución modelo. 3. Facilite la interfaz del programa llamado con los valores clave de la conexión de vuelo elegida. Para hacerlo, determine los nombres de los campos de entrada en la pantalla de selección. a) Consulte el extracto del código fuente de la solución modelo.
Tarea 3 Implemente el método de controlador que se ejecuta cuando un usuario hace doble clic en una conexión de vuelo. Asegúrese de que los detalles de la aerolínea se muestren para la conexión elegida si el usuario hace doble clic en la columna CARRID. Para ello, llame la transacción de diálogo BC402MCAR. 1. Llame la transacción para insertarla de manera síncrona. a) CALL TRANSACTION. Consulte el extracto del código fuente de la solución modelo. 2. En la transacción, transfiera el ID de aerolínea de la conexión elegida. Para ello, utilice el modificador USING. Determine el nombre del programa, el número de pantalla y el denominador de campo de campo de entrada en la pantalla inicial de transacción BC402MCAR. a) Consulte el extracto del código fuente de la solución modelo. 3. Transfiera el código de función que se encuentra enlazado con el pulsador de la pantalla inicial en la transacción. a) Consulte el extracto del código fuente de la solución modelo. 4. Asegúrese de que la transacción se procese sin la visualización de pantalla. Para ello, utilice el modificador MODE con un valor adecuado. a) Un extracto del código fuente de la solución modelo aparece de la siguiente manera: REPORT
bc402_pcs_conn_list MESSAGE-ID bc402.
TYPES: BEGIN OF gty_s_conn, carrid TYPE spfli-carrid, connid TYPE spfli-connid, cityfrom TYPE spfli-cityfrom, cityto TYPE spfli-cityto, deptime TYPE spfli-deptime, arrtime TYPE spfli-arrtime, period TYPE spfli-period, END OF gty_s_conn. TYPES gty_t_conn TYPE STANDARD TABLE OF gty_s_conn WITH NON-UNIQUE DEFAULT KEY. DATA gt_conn TYPE gty_t_conn. DATA gv_msg TYPE string. DATA: go_alv TYPE REF TO cl_salv_table, go_evt TYPE REF TO cl_salv_events_table,
568
© Copyright . Reservados todos los derechos.
Lección: Llamada de programas de manera síncrona
go_fct TYPE REF TO cl_salv_functions_list, gx_msg TYPE REF TO cx_salv_msg. *------------------------------------------------* * CLASS lcl_handler DEFINITION *------------------------------------------------* * *-----------------------------------------------* CLASS lcl_handler DEFINITION. PUBLIC SECTION. CLASS-METHODS: on_double_click FOR EVENT double_click OF if_salv_events_actions_table IMPORTING row column. ENDCLASS.
"lcl_handler DEFINITION
*----------------------------------------------------* * CLASS lcl_handler IMPLEMENTATION *---------------------------------------------------* * *---------------------------------------------------* CLASS lcl_handler IMPLEMENTATION. METHOD on_double_click. DATA: lt_bdc TYPE TABLE OF bdcdata, ls_bdc TYPE bdcdata. DATA ls_conn LIKE LINE OF gt_conn. READ TABLE gt_conn INTO ls_conn INDEX row. CASE column. WHEN 'CARRID'. ls_bdc-program = 'SAPMBC402_IND_CARRIER'. ls_bdc-dynpro = '0100'. ls_bdc-dynbegin = 'X'. APPEND ls_bdc TO lt_bdc. CLEAR ls_bdc. ls_bdc-fnam = 'BC402_S_CARRIER-CARRID'. ls_bdc-fval = ls_conn-carrid. APPEND ls_bdc TO lt_bdc. CLEAR ls_bdc. ls_bdc-fnam = 'BDC_OKCODE'. ls_bdc-fval = 'GO'. APPEND ls_bdc TO lt_bdc. CALL TRANSACTION 'BC402MCAR' USING lt_bdc MODE 'E'. WHEN OTHERS. SUBMIT bc402_ins_flight_list
© Copyright . Reservados todos los derechos.
569
Capítulo 13: Llamadas de programa y gestión de memoria
AND RETURN WITH pa_car EQ ls_conn-carrid WITH so_con EQ ls_conn-connid. ENDCASE. ENDMETHOD. ENDCLASS.
"on_double_click "lcl_handler IMPLEMENTATION
*-------------------------------------------------* START-OF-SELECTION. SELECT carrid connid cityfrom cityto deptime arrtime period FROM spfli INTO TABLE gt_conn. TRY.
CALL METHOD cl_salv_table=>factory IMPORTING r_salv_table = go_alv CHANGING t_table = gt_conn. CATCH cx_salv_msg INTO gx_msg. gv_msg = gx_msg->get_text( ). MESSAGE gv_msg TYPE 'E'. ENDTRY. go_evt = go_alv->get_event( ). SET HANDLER lcl_handler=>on_double_click FOR go_evt. go_alv->display( ).
570
© Copyright . Reservados todos los derechos.
Lección: Llamada de programas de manera síncrona
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Llamar programas de manera síncrona
© Copyright . Reservados todos los derechos.
571
Capítulo 13 Lección 2 542
Un resumen del tiempo de ejecución ABAP y gestión de memoria
RESUMEN DE LA LECCIÓN En este módulo se explica en detalle cómo el entorno del tiempo de ejecución de ABAP ejecuta un programa. En este módulo también se explica la memoria ABAP y la memoria SAP, y sus técnicas de uso para intercambiar datos temporales entre límites del programa. Además, este módulo explica cómo se administran en la memoria los objetos de datos con longitud variable, conocidos como objetos de datos dinámicos. Ejemplo empresarial Desea desarrollar aplicaciones complejas que incluyan llamadas de programas, modularización y objetos de datos dinámicos. Para garantizar que sus aplicaciones tengan un diseño robusto de alto rendimiento, desea averiguar en detalle el funcionamiento del entorno de tiempo de ejecución y de la gestión de memoria. También desea conocer las opciones presentadas por la memoria ABAP y la memoria SAP para intercambiar datos entre límites de programas durante llamadas de programas. Por este motivo, se requieren los siguientes conocimientos: ●
Un resumen de cómo el entorno del tiempo de ejecución de ABAP ejecuta programas
●
Un resumen de la importancia del objeto de tiempo de ejecución
●
Un resumen del área de roll y el área de ejecución del programa (PXA)
●
Un resumen de la gestión de memoria en el entorno de ejecución ABAP
●
Un resumen de cómo se gestionan los objetos de datos dinámicos
●
Un resumen de cómo se gestionan los componentes encasillados y cuándo deben utilizarse This lesson contains extensive background technical information. Some of the participants may be familiar with such information, while others may have little or no technical knowledge. Make sure your explanation of ABAP runtime and memory management is appropriate for the participants’ knowledge level. Emphasize the hazards posed by unintended reuse of a function group in the same internal session. Also explain the insufficient delimitation of programs during external subroutine calls. Explain why the participants should no longer use this modularization technique. For the management of dynamic data objects, point out the various effects of CLEAR and FREE, as well as the meaning of COPY-ON-WRITE, on memory and CPU requirements. Boxed components are a recent addition to the ABAP programming language. Do not go into detail as most of the participants might not yet have enhancement package 2 (EhP2).
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá:
572
© Copyright . Reservados todos los derechos.
Lección: Un resumen del tiempo de ejecución ABAP y gestión de memoria
●
Generar y activar programas
●
Explicar la gestión de memoria de sesión de usuario
●
Transferir datos entre programas
●
Explicar la gestión de memoria de objetos de datos profundos
●
Utilizar componentes encasillados
Compilador ABAP y objetos en tiempo de ejecución
Figura 247: Versión desarrollada
Los objetos de desarrollo se almacenan en el Repository con el formato en que se han desarrollado. En el Workbench, solo se pueden mostrar las versiones de los objetos de desarrollo. Para ejecutar un programa en el entorno de ejecución de ABAP, primero debe generar el programa, usando el Compilador ABAP.
© Copyright . Reservados todos los derechos.
573
Capítulo 13: Llamadas de programa y gestión de memoria
Versión generada
Figura 248: Versión generada
Cuando genere un objeto de desarrollo, el sistema genera un objeto de tiempo de ejecución o CARGA. La CARGA consta principalmente de sentencias de código byte que se enlazan con las funciones C. Para evitar generar programas cada vez que se ejecutan, grabe las CARGAS de programa en la base de datos y grábelas en memoria intermedia en el servidor de aplicación. El sistema genera la CARGA automáticamente en las siguientes situaciones. ●
Cuando el programa se llama y aún no existe una CARGA.
●
Cuando la CARGA en la base de datos o la memoria intermedia del programa es obsoleta.
También puede generar programas de manera explícita, por ejemplo, en Editor ABAP mediante el acceso vía menús Programa → Generar. Una CARGA grabada o almacenada en memoria intermedia se considera obsoleta en alguna de las siguientes condiciones: ● La versión desarrollada del programa se modifica. ●
574
El objeto utilizado por el programa se modifica en el Data Dictionary.
© Copyright . Reservados todos los derechos.
Lección: Un resumen del tiempo de ejecución ABAP y gestión de memoria
Consejo: Los transportes entre sistemas SAP siempre conciernen las versiones desarrolladas. Después de importarse a un sistema destino, el sistema elimina todos los objetos de tiempo de ejecución afectados. El sistema no genera nuevas CARGAS automáticamente. Se generan en la primera instancia, cuando un usuario llama el programa correspondiente (de manera directa o indirecta). Después de un import, los usuarios pueden experimentar temporalmente tiempos de espera y un rendimiento bajo hasta que todas las CARGAS requeridas se generen nuevamente. Para evitar esto, puede iniciar el generador de carga SAP (código de transacción SGEN) después del import.
El concepto de fuentes inactivas
Figura 249: Versiones activa e inactiva
Cuando modifica un objeto de desarrollo y lo graba, el sistema crea una versión activa y una versión inactiva.
Consejo: La grabación de una versión inactiva no tiene efecto en la CARGA del programa. Por consiguiente, la sintaxis de la versión inactiva no necesariamente debe ser correcta. También puede grabar una versión provisional, no ejecutable del objeto de desarrollo de manera inactiva. Sin embargo, la versión activa permanece disponible como versión ejecutable. Puede cambiar la vista de versión activa a inactiva, pero solo puede tratar la versión inactiva. El sistema realiza una verificación de sintaxis en la versión en desarrollo (la versión inactiva), pero no en la versión generada. Al ejecutar el código fuente para los programas ejecutables
© Copyright . Reservados todos los derechos.
575
Capítulo 13: Llamadas de programa y gestión de memoria
del Editor ABAP, el sistema hace referencia de vuelta a la versión inactiva. En este caso, el sistema crea una versión generada temporalmente que no se graba en la memoria intermedia ni se almacena en la base de datos. En el resto de los casos, el sistema accede siempre a la versión activa cuando genera el programa. Activación del programa
Figura 250: Activación de un programa
Todos los objetos inactivos que el sistema asigna al ID de usuario se enumeran en el pool de trabajo. Los siguientes pasos se siguen cuando activa un objeto: 1. El objeto se graba; es decir, se crea una nueva versión inactiva. Esto está sujeto a una verificación de sintaxis. 2. El sistema sobrescribe la versión activa actual. La versión inactiva anterior ahora es la versión activa, lo que significa que ya no es una versión inactiva. 3. El sistema crea una nueva versión de tiempo de ejecución y actualiza la CARGA.
576
© Copyright . Reservados todos los derechos.
Lección: Un resumen del tiempo de ejecución ABAP y gestión de memoria
PXA y área de roll
Figura 251: Carga de un objeto en tiempo de ejecución a la memoria de trabajo
Cuando el sistema de tiempo de ejecución genera un objeto en tiempo de ejecución (la CARGA) de un programa o lo carga de la base de datos, coloca el programa en la memoria de trabajo del servidor de la aplicación. En el proceso, el sistema de tiempo de ejecución no trata las partes del programa que pueden modificarse como las partes que no pueden modificarse. Las partes de un programa que no pueden modificarse son las siguientes: ●
Código byte para sentencias
●
Valores de constantes y literales
●
Textos de programas
●
Definiciones de pantalla
Las partes de un programa que pueden modificarse son los objetos de datos (variables). El sistema almacena las partes que no se pueden modificar del programa en el PXA y graba en memoria intermedia al máximo. Todos los usuarios comparten esta área de memoria en el servidor de aplicación y solo existe una vez en cada servidor. Después de que el sistema ejecuta un programa, el código byte del programa sigue grabado en memoria intermedia en el PXA hasta el límite máximo. La grabación en memoria intermedia evita que el sistema cargue el código de la base de datos nuevamente durante la próxima ejecución. Las partes del programa que pueden modificarse se crean en la memoria durante cada ejecución, en un espacio de la memoria llamado área de roll. Cuando el programa se ejecuta varias veces simultáneamente (por el mismo usuario o por usuarios diferentes), cada ejecución posee su propia área de roll. Esto garantiza que el sistema ejecute los programas de manera independiente uno de otro.
© Copyright . Reservados todos los derechos.
577
Capítulo 13: Llamadas de programa y gestión de memoria
How to Check Whether a Program is Loaded into PXA Start transaction ST02 and show content of PXA.
Gestión de memoria desde la perspectiva del programa
Figura 252: Modelo de memoria lógica
En la figura se muestra la forma en que la memoria principal se organiza desde la perspectiva del programa. Esta es la diferencia entre los modos internos y externos: Sesión externa (modo principal)
●
Un modo externo corresponde a una ventana SAPGUI. Puede crear un nuevo modo seleccionado Sistema → Nuevo modo, o llamando /o. A partir de SAP NetWeaver 7.0, se admiten hasta 16 modos externos. El número máximo de modos disponible en un sistema determinado se define por el parámetro de sistema rdisp/max_alt_modes, que tiene un valor propuesto de 6. ●
Modo interno Las sesiones externas están subdivididas en sesiones internas (colocadas en una pila). Cada llamada de un programa ABAP (SUBMIT, CALL TRANSACTION, etc.) genera una nueva sesión interna. En cada modo externo, puede existir un máximo de nueve modos internos. El modo interno debe pertenecer a la misma pila de llamadas.
Consejo: El sistema reserva un área de roll para cada modo interno.
578
© Copyright . Reservados todos los derechos.
Lección: Un resumen del tiempo de ejecución ABAP y gestión de memoria
Grupos de programas
Figura 253: Grupos de programas
Cuando un programa llama unidades de modularización externas, carga los programas correspondientes en el mismo modo interno. Los programas dentro de un modo interno conforman grupos de programas. Cuando el sistema abre un modo interno con una llamada de programa, siempre crea el grupo de programas principal. Puede haber uno o más grupos de programas adicionales. Cada grupo de programas contiene un programa principal y también otros programas. Los objetos de datos de un programa solo son visibles dentro de su grupo de programas, lo cual significa que los programas en diferentes grupos de programas no comparten objetos de datos. Todos los programas y los objetos de un modo interno pueden utilizar instancias de clases. Un objeto continúa existiendo siempre y cuando tenga usuarios; es decir, referencias.
© Copyright . Reservados todos los derechos.
579
Capítulo 13: Llamadas de programa y gestión de memoria
Gestión de memoria para llamadas de programas
Figura 254: Antes de la inserción de un programa
En la figura se ilustra cómo cambia una pila de modos internos en un modo externo con diversas llamadas de programa. Cuando se inserta un programa, el punto inicial para el primer caso es la ejecución de las sentencias SUBMIT ... AND RETURN o CALLTRANSACTION dentro de un programa. Programa insertado
Figura 255: Ejecución del programa insertado
Al insertar un programa, el sistema crea un modo interno nueva que contiene el nuevo contexto del programa. El sistema coloca el nuevo modo en la pila. El contexto del programa de la llamada permanece en la pila.
580
© Copyright . Reservados todos los derechos.
Lección: Un resumen del tiempo de ejecución ABAP y gestión de memoria
Tras la finalización del programa insertado
Figura 256: Tras la finalización del programa insertado
Cuando se completa el programa llamado, el sistema elimina el modo interno del programa llamado (el primero en la pila). A continuación, el sistema comienza a procesar el modo interno que sigue desde arriba en la pila. Antes de iniciar un nuevo programa ejecutable
Figura 257: Antes de iniciar un nuevo programa ejecutable
El sistema distingue entre llamar un programa ejecutable y llamar una transacción, con respecto a las áreas de memoria. El punto inicial para el segundo caso es la ejecución de una sentencia SUBMIT en un programa.
© Copyright . Reservados todos los derechos.
581
Capítulo 13: Llamadas de programa y gestión de memoria
Ejecución del nuevo programa ejecutable
Figura 258: Ejecución del nuevo programa ejecutable
Cuando inicia un programa ejecutable con la sentencia SUBMIT, ocurren las siguientes acciones: ● El sistema finaliza el programa de llamada. ●
●
582
El sistema destruye el modo interno del programa que está finalizando (el primer programa en la pila). El sistema crea una nueva sesión interna que contiene el contexto del programa llamado. A continuación, el sistema coloca el nuevo modo en la pila y mantiene todo contexto de programa creado anteriormente. Por lo tanto, el primer modo interno de la pila se reemplaza.
© Copyright . Reservados todos los derechos.
Lección: Un resumen del tiempo de ejecución ABAP y gestión de memoria
Antes de iniciar una nueva transacción
Figura 259: Antes de iniciar una nueva transacción
El punto inicial para el tercer caso es la ejecución de una sentencia LEAVE TO TRANSACTION en un programa. Ejecución de la nueva transacción
Figura 260: Ejecución de la nueva transacción
Cuando inicia un programa mediante su código de transacción, el sistema destruye todos los modos internos de la pila. El sistema crea a continuación un nuevo modo interno, que contiene el contexto del programa llamado. El sistema inicializa la pila completa de modos internos, que también significa que inicializa la memoria ABAP después de la llamada.
© Copyright . Reservados todos los derechos.
583
Capítulo 13: Llamadas de programa y gestión de memoria
Gestión de memoria para llamadas de módulos de funciones y métodos
Figura 261: Grupo de programas principal o adicional
La figura explica el impacto de las llamadas externas de procedimientos en los pools de funciones (tipo F) y en los pools de clases (tipo K). La modularización para todos los programas, que llama módulos de funciones y utiliza clases globales, no se implementa utilizando modos internos. En lugar de ello, los grupos de programas juegan un papel central. Cuando abre un modo interno, el sistema siempre crea el grupo de programas principal. También puede crear cualquier número de grupos de programas adicionales en el mismo modo interno. Cada grupo de programas tiene solo un programa principal. Un grupo de programas adicional se crea en los siguientes casos: Cuando el programa llama un módulo de funciones desde un grupo de funciones que no se haya cargado aún.
●
●
Cuando el programa llama un método de una clase global que no se haya cargado aún.
El sistema carga cada grupo de funciones y cada clase global a una sesión interna dada solo una vez.
584
© Copyright . Reservados todos los derechos.
Lección: Un resumen del tiempo de ejecución ABAP y gestión de memoria
El mismo grupo de funciones en distintas sesiones internas
Figura 262: El mismo grupo de funciones en distintas sesiones internas
Cuando dos programas que se ejecutan en diferentes sesiones internas llaman módulos de funciones desde el mismo grupo de funciones, el sistema carga el grupo de funciones en cada una de las sesiones internas de manera separada. El sistema crea los datos globales del grupo de funciones por separado en cada sesión interna. Por consiguiente, no existe la posibilidad o el riesgo de que los dos programas principales intercambien datos a través del grupo de funciones.
© Copyright . Reservados todos los derechos.
585
Capítulo 13: Llamadas de programa y gestión de memoria
La misma clase en distintas sesiones internas
Figura 263: La misma clase en distintas sesiones internas
Cuando los programas que se ejecutan en diferentes sesiones internas utilizan la misma clase global, la cual se crea por separado en cada sesión interna. Los atributos estáticos de la clase pueden tener valores diferentes en las distintas sesiones internas. El mismo Grupo de funciones o Clase en una sesión interna
Figura 264: El mismo Grupo de funciones o Clase en una sesión interna
Cuando los dos programas se ejecutan en la misma sesión interna, por ejemplo, un programa ejecutable y el grupo de funciones AB con el que trabaja, y ambos programas trabajan con el mismo grupo de funciones XY, el sistema carga el grupo de funciones XY una vez en una
586
© Copyright . Reservados todos los derechos.
Lección: Un resumen del tiempo de ejecución ABAP y gestión de memoria
sesión interna. Por consiguiente, el programa principal y el grupo de funciones AB pueden intercambiar datos mediante del grupo de funciones XY. Esto también es válido para las clases globales.
Atención: En la práctica, esta situación puede provocar errores frecuentes, porque el programa principal y el grupo de funciones AB (o la clase CL_A) se afectan uno a otro accidentalmente. El programa principal puede grabar datos en memoria intermedia en el grupo de funciones XY, por ejemplo, pero el grupo de funciones AB o la clase CL_A pueden sobrescribir involuntariamente los datos o inicializarlos. Esto puede provocar la terminación del programa e incluso inconsistencias de datos. Las causas de dichos errores son difíciles de encontrar, en especial cuando el programa no utiliza el grupo de funciones AB o la clase CL_A directamente y, en cambio, utiliza otros grupos de funciones u otras clases.
Consejo: Cuando el programa compartido es una clase global (clase CL_B en la figura), solo existe un riesgo de interacción accidental con respecto a los atributos estáticos. Los dos programas utilizados solo observan las mismas instancias (y, por lo tanto, los valores de atributo de instancias) de una clase cuando intercambian específicamente las referencias a estas instancias. Una buena forma de evitar la interacción accidental para las clases globales es utilizar atributos de instancia en lugar de atributos estáticos. Además, asegúrese de que cada usuario de la clase genere una instancia separada. Varios programas en el mismo grupo de programas
Figura 265: Varios programas en el mismo grupo de programas
La figura explica el impacto de las llamadas externas de subrutinas en los programas ejecutables (tipo 1), los pools de módulos (tipo M) y los pools de subrutinas (tipo S).
© Copyright . Reservados todos los derechos.
587
Capítulo 13: Llamadas de programa y gestión de memoria
Cuando el usuario llama una subrutina de manera externa, el sistema no genera ningún grupo de programas en la sesión interna. En lugar de ello, carga el programa principal de esta subrutina en el grupo de programas existente del programa de llamada.
Consejo: Las subrutinas de un grupo de funciones son una excepción. Cuando una subrutina de un grupo de funciones se llama de manera externa, el sistema carga el correspondiente grupo de funciones en un grupo de programas adicional. Cuando hay dos programas en el mismo grupo de programas, el desarrollador debe observar las siguientes restricciones: ● Dentro de un grupo de programas, todos los programas comparten las áreas de trabajo de la interfaz declaradas con TABLES, NODES y COMMON PART. ●
En un grupo de programas, CALL SCREEN solo se puede utilizar para llamar pantallas del programa principal.
Atención: Cuando utiliza llamadas de subrutinas externas, siempre existe el riesgo de que los objetos de datos de un programa puedan compartirse con otros programas. Aunque puede hacer esto de manera intencional en algunos casos excepcionales, debe evitarlo siempre que sea posible considerando los aspectos de encapsulación y facilidad de mantenimiento. Por lo tanto, evite el uso de las llamadas de subrutinas externas.
How to Analyze the User Session Memory Layout Show transactions SM04 and AL08. Show how number of internal sessions change while executing a program with SUBMIT/CALL TRANSACTION/LEAVE TO TRANSACTION in separate user session.
588
© Copyright . Reservados todos los derechos.
Lección: Un resumen del tiempo de ejecución ABAP y gestión de memoria
Resumen de las opciones de transferencia de datos
Figura 266: Transferencia de datos entre programas – Resumen
Cuando los programas se ejecutan en distintos grupos de programas, sesiones internas o sesiones externas, no comparten objetos de datos. Sin embargo, hay varias opciones disponibles para intercambiar datos entre estos programas. Estas son algunas técnicas para transferir datos: ● Interfaz del programa llamado ●
Memoria ABAP
●
Memoria SAP
●
Tablas de bases de datos
●
Archivos locales en el servidor de presentación
Nota: Para obtener más información sobre el traspaso de datos mediante tablas de base de datos o la memoria intermedia compartida, consulte la información sobre sentencias EXPORT e IMPORT de la documentación de palabras clave ABAP. Para obtener más información sobre la transferencia de datos entre un programa ABAP y su servidor de presentación, consulte la documentación de módulos de funciones WS_UPLOAD y WS_DOWNLOAD. Para ello, también puede utilizar los métodos de clase CL_GUI_FRONTEND_SERVICES.
© Copyright . Reservados todos los derechos.
589
Capítulo 13: Llamadas de programa y gestión de memoria
Memoria ABAP y memoria SAP
Figura 267: Margen de memoria ABAP y memoria SAP
Cuando necesita transferir datos entre dos programas diferentes, pero no puede especificar los datos como un suplemento en la llamada del programa, puede utilizar la memoria SAP y la memoria de ABAP para transferir datos entre programas. Considere lo siguiente mientras utiliza las memorias de SAP y ABAP para transferir datos entre programas: ● La memoria SAP es un área de memoria específica del usuario para almacenar valores de campo. Por tanto, no resulta útil para el traspaso de datos entre sesiones internas. El sistema mantiene los valores en la memoria de SAP durante la sesión terminal del usuario. También puede utilizar la memoria SAP entre sesiones en la misma sesión terminal. Todas las sesiones externas de una sesión de usuario pueden acceder a la memoria SAP. Puede utilizar el contenido de la memoria SAP como valores por defecto para los campos de pantalla. ●
La memoria ABAP también es específica del usuario. Existe una memoria ABAP local para cada sesión externa. Puede utilizar una memoria ABAP local para intercambiar cualquier objeto de datos ABAP (como campos, estructuras, tablas internas y objetos complejos) entre las sesiones internas de cualquier sesión externa. Cuando el usuario sale de un modo externo (en el campo de comando), el sistema automáticamente inicializa o libera la memoria ABAP correspondiente.
590
© Copyright . Reservados todos los derechos.
Lección: Un resumen del tiempo de ejecución ABAP y gestión de memoria
Acceder a la memoria ABAP
Figura 268: Traspaso de datos mediante la memoria ABAP
La sentencia EXPORT ... TO MEMORY copia cualquier número de objetos de datos ABAP con sus valores actuales (cluster de datos) en la memoria ABAP. El suplemento ID, que puede tener una longitud máxima de 60 caracteres, le permite identificar diferentes clusters. Cuando utiliza una nueva sentencia EXPORT TO MEMORY para un cluster de datos existente, la nueva sentencia sobrescribe la anterior. La sentencia IMPORT ... FROM MEMORY ... le permite copiar datos de la memoria ABAP en los campos correspondientes de su programa ABAP. También puede restringir la selección a una parte del cluster de datos en la declaración IMPORT. Las variables en las que desea leer datos del cluster de la memoria ABAP deben tener los mismos tipos tanto en programas de exportación como de importación. Utilice la sentencia FREE MEMORY ID ... para liberar un cluster de datos explícitamente.
Atención: Al llamar programas mediante el código de transacción, solo puede utilizar la memoria ABAP para traspasar datos a la transacción en el caso de inserción (CALL TRANSACTION).
How to use ABAP Memory Develop a program that uses the ABAP memory to return data after SUBMIT AND RETURN.
© Copyright . Reservados todos los derechos.
591
Capítulo 13: Llamadas de programa y gestión de memoria
Acceder a la memoria de SAP
Figura 269: Traspaso de parámetros mediante la memoria SAP
Puede definir áreas de memoria (llamadas parámetros) en la memoria SAP en formas diferentes, como las siguientes: ● Puede crear campos de entrada o salida con referencia al Dictionary ABAP. Estos campos toman los nombres de parámetros de los elementos de datos a los cuales se refieren. De manera alternativa, puede introducir un nombre en los atributos de los campos de entrada o salida. A continuación, también puede decidir si desea transferir las entradas del campo al parámetro (SET) o rellenar el campo de entrada con el valor del parámetro (GET). Para obtener los nombres de los parámetros asignados a los campos de entrada, visualice la ayuda de campo con la tecla F1 y seleccione el pulsador Datos técnicos. ●
●
También puede rellenar las áreas de memoria directamente utilizando la sentencia SET PARAMETER ID 'PAR_ID' FIELD var. y leerlas mediante la sentencia GET PARAMETER ID 'PAR_ID' FIELD var. Puede definir parámetros en el Object Navigator y dejar que el usuario introduzca los valores.
How to Use SAP Memory Develop a program that uses the SAP memory to preset fields before a CALL TO TRANSACTION.
592
© Copyright . Reservados todos los derechos.
Capítulo 13 Ejercicio 32 563
Utilizar la memoria de ABAP y la memoria de SAP
Ejemplo empresarial Un programa existente selecciona datos basado en las entradas del usuario y los muestra en una lista. Usted llama este programa desde otro programa. En lugar de mostrar los datos directamente con el informe llamado, desea cargar los datos seleccionados en la memoria SAP y procesarlos luego en el programa de llamadas. También desea utilizar parámetros de la memoria ABAP para asignar campos previamente cuando llama una transacción. Modelo BC402_INS_FLIGHT_LIST (programa llamado) BC402_PCS_CONN_LIST (Programa de llamadas) Solución BC402_MMS_FLIGHT_LIST (programa llamado) BC402_MMS_CONN_LIST (Programa de llamadas) Utilice la memoria ABAP para intercambiar datos entre programas y la memoria SAP para asignar los campos previamente en una llamada de transacción. Tarea 1 Copie el programa llamado, BC402_INS_FLIGHT_LIST (o su propio programa, ZBC402_##_FLIGHT_LIST), al nombre ZBC402_##_FLIGHT_LIST_MEM. Mejore el programa para que pueda mostrar selectivamente los vuelos en una lista o grabe la tabla interna con sus datos en la memoria ABAP. Cree un parámetro invisible en la pantalla de selección que habilita el almacenamiento en la memoria ABAP cuando el programa se llama con SUBMIT. 1. Copie el programa y todos sus subcomponentes. 2. Defina un parámetro adicional para la pantalla de selección (nombre sugerido: PA_LIST). Tipifique el parámetro con el tipo ABAP_BOOL del grupo de tipos ABAP, por ejemplo. 3. Verifique la documentación para encontrar un suplemento adecuado para la secuencia PARAMETERS que suprima el parámetro cuando se visualiza la pantalla de selección. 4. Suplemente el programa para que suprima la salida de listas cuando el parámetro no esté establecido en su valor propuesto. En este caso, desea exportar los datos de lectura en la memoria ABAP. Elija un ID adecuado para su cluster de datos (nombre sugerido: BC402_##_FLIGHTS).
Tarea 2 Copie el programa de llamada, BC402_PCS_CONN_LIST (o su propio programa, ZBC402_##_CONN_LIST) al nombre ZBC402_##_CONN_LIST_MEM y modifique el nombre
© Copyright . Reservados todos los derechos.
593
Capítulo 13: Llamadas de programa y gestión de memoria
del programa llamado en la sentencia SUBMIT. Llame el programa para que grabe los datos en la memoria ABAP en lugar de mostrarlos directamente. 1. Copie el programa de llamada. 2. Modifique la sentencia SUBMIT para llamar el programa ZBC402_##_FLIGHT_LIST_MEM. Facilite el nuevo parámetro con un valor para suprimir la visualización de la lista y escriba los datos en la memoria ABAP.
Tarea 3 Después de la llamada de programa, lea los datos de la memoria ABAP y utilice el módulo de función BC402_DISPLAY_TABLE para visualizar los datos en un Grid ALV. Elimine los datos de la memoria ABAP después de leerlos. 1. Después de la llamada de programa, importe los datos de la memoria ABAP creando una tabla interna adecuada. Cuando ocurra un error, responda con el mensaje de error 361 de la clase de mensaje BC402. 2. Implemente una llamada de módulo de funciones BC402_DISPLAY_TABLE. Pase los datos de la memoria ABAP a este módulo de funciones para la visualización. 3. Opcional: Trabaje con la excepción (basada en clases) del módulo de funciones. 4. Libere la memoria para su cluster para eliminar los datos de la memoria ABAP.
Tarea 4 Analice la transacción BC402MCAR. ¿Es posible asignar el campo de entrada previamente en la primera pantalla utilizando un parámetro en la memoria SAP? En caso afirmativo, use esta opción. Elimine los modificadores USING y MODE de la secuencia CALL TRANSACTION y suprima la visualización de la primera pantalla. 1. Averigüe si el campo de entrada de la pantalla 0100 en el programa SAPMBC402_IND_CARRIER se vincula con un ID de parámetro. Si es el caso, ¿cómo se llama el ID del parámetro? 2. Verifique si la asignación previa automática de la memoria SAP se encuentra activa para el campo. 3. Utilice una secuencia adecuada para configurar el valor del parámetro al valor deseado en la memoria SAP antes de la llamada de transacción. 4. Elimine los modificadores USING y MODE de la secuencia CALL TRANSACTION. En lugar de ello, utilice un modificador adecuado para suprimir la primera pantalla.
594
© Copyright . Reservados todos los derechos.
Capítulo 13 Solución 32 565
Utilizar la memoria de ABAP y la memoria de SAP
Ejemplo empresarial Un programa existente selecciona datos basado en las entradas del usuario y los muestra en una lista. Usted llama este programa desde otro programa. En lugar de mostrar los datos directamente con el informe llamado, desea cargar los datos seleccionados en la memoria SAP y procesarlos luego en el programa de llamadas. También desea utilizar parámetros de la memoria ABAP para asignar campos previamente cuando llama una transacción. Modelo BC402_INS_FLIGHT_LIST (programa llamado) BC402_PCS_CONN_LIST (Programa de llamadas) Solución BC402_MMS_FLIGHT_LIST (programa llamado) BC402_MMS_CONN_LIST (Programa de llamadas) Utilice la memoria ABAP para intercambiar datos entre programas y la memoria SAP para asignar los campos previamente en una llamada de transacción. Tarea 1 Copie el programa llamado, BC402_INS_FLIGHT_LIST (o su propio programa, ZBC402_##_FLIGHT_LIST), al nombre ZBC402_##_FLIGHT_LIST_MEM. Mejore el programa para que pueda mostrar selectivamente los vuelos en una lista o grabe la tabla interna con sus datos en la memoria ABAP. Cree un parámetro invisible en la pantalla de selección que habilita el almacenamiento en la memoria ABAP cuando el programa se llama con SUBMIT. 1. Copie el programa y todos sus subcomponentes. a) Realice este paso de la forma habitual. 2. Defina un parámetro adicional para la pantalla de selección (nombre sugerido: PA_LIST). Tipifique el parámetro con el tipo ABAP_BOOL del grupo de tipos ABAP, por ejemplo. a) Consulte el extracto del código fuente de la solución modelo. 3. Verifique la documentación para encontrar un suplemento adecuado para la secuencia PARAMETERS que suprima el parámetro cuando se visualiza la pantalla de selección. a) Suplemento NO-DISPLAY. Consulte el extracto del código fuente de la solución modelo. 4. Suplemente el programa para que suprima la salida de listas cuando el parámetro no esté establecido en su valor propuesto. En este caso, desea exportar los datos de lectura en la memoria ABAP. Elija un ID adecuado para su cluster de datos (nombre sugerido: BC402_##_FLIGHTS). a) Consulte el extracto del código fuente de la solución modelo.
© Copyright . Reservados todos los derechos.
595
Capítulo 13: Llamadas de programa y gestión de memoria
Tarea 2 Copie el programa de llamada, BC402_PCS_CONN_LIST (o su propio programa, ZBC402_##_CONN_LIST) al nombre ZBC402_##_CONN_LIST_MEM y modifique el nombre del programa llamado en la sentencia SUBMIT. Llame el programa para que grabe los datos en la memoria ABAP en lugar de mostrarlos directamente. 1. Copie el programa de llamada. a) Realice este paso de la forma habitual. 2. Modifique la sentencia SUBMIT para llamar el programa ZBC402_##_FLIGHT_LIST_MEM. Facilite el nuevo parámetro con un valor para suprimir la visualización de la lista y escriba los datos en la memoria ABAP.
Tarea 3 Después de la llamada de programa, lea los datos de la memoria ABAP y utilice el módulo de función BC402_DISPLAY_TABLE para visualizar los datos en un Grid ALV. Elimine los datos de la memoria ABAP después de leerlos. 1. Después de la llamada de programa, importe los datos de la memoria ABAP creando una tabla interna adecuada. Cuando ocurra un error, responda con el mensaje de error 361 de la clase de mensaje BC402. a) Consulte el extracto del código fuente de la solución modelo. 2. Implemente una llamada de módulo de funciones BC402_DISPLAY_TABLE. Pase los datos de la memoria ABAP a este módulo de funciones para la visualización. a) Consulte el extracto del código fuente de la solución modelo. 3. Opcional: Trabaje con la excepción (basada en clases) del módulo de funciones. 4. Libere la memoria para su cluster para eliminar los datos de la memoria ABAP. a) Consulte el extracto del código fuente de la solución modelo.
Tarea 4 Analice la transacción BC402MCAR. ¿Es posible asignar el campo de entrada previamente en la primera pantalla utilizando un parámetro en la memoria SAP? En caso afirmativo, use esta opción. Elimine los modificadores USING y MODE de la secuencia CALL TRANSACTION y suprima la visualización de la primera pantalla. 1. Averigüe si el campo de entrada de la pantalla 0100 en el programa SAPMBC402_IND_CARRIER se vincula con un ID de parámetro. Si es el caso, ¿cómo se llama el ID del parámetro? a) Inicie la transacción. b) Llame la ayuda (tecla F1) para el campo de entrada y luego la información técnica. c) El ID de parámetro tiene el valor CAR. 2. Verifique si la asignación previa automática de la memoria SAP se encuentra activa para el campo.
596
© Copyright . Reservados todos los derechos.
Lección: Un resumen del tiempo de ejecución ABAP y gestión de memoria
a) Diríjase a la pantalla 0100. b) Analice los atributos de la pantalla de entrada (ya sea en la lista de elementos o utilizando la ventada de atributos en el editor de layout gráfico). c) Se configura la casilla de selección Obtener parámetros. 3. Utilice una secuencia adecuada para configurar el valor del parámetro al valor deseado en la memoria SAP antes de la llamada de transacción. a) Consulte el extracto del código fuente de la solución modelo. 4. Elimine los modificadores USING y MODE de la secuencia CALL TRANSACTION. En lugar de ello, utilice un modificador adecuado para suprimir la primera pantalla. a) Suplemento AND SKIP FIRST SCREEN. Consulte el extracto del código fuente de la solución modelo. A source code excerpt from the model solution is as follows: BC402_MMS_FLIGHT_LIST (called program) REPORT
bc402_mms_flight_list MESSAGE-ID bc402.
TYPE-POOLS: abap. DATA: gt_flight TYPE TABLE OF sflight, gs_flight TYPE sflight. PARAMETERS pa_car TYPE sflight-carrid. SELECT-OPTIONS so_con FOR gs_flight-connid. PARAMETERS pa_list TYPE abap_bool DEFAULT abap_true NO-DISPLAY. START-OF-SELECTION. SELECT * FROM sflight INTO TABLE gt_flight WHERE carrid = pa_car AND connid IN so_con. IF sy-subrc 0. MESSAGE e038. ENDIF. IF pa_list = abap_true. LOOP AT gt_flight INTO gs_flight. WRITE: / gs_flight-carrid, gs_flight-connid, gs_flight-fldate, gs_flight-price CURRENCY gs_flight-currency, gs_flight-currency, gs_flight-planetype, gs_flight-seatsmax, gs_flight-seatsocc. ENDLOOP. ELSE.
© Copyright . Reservados todos los derechos.
597
Capítulo 13: Llamadas de programa y gestión de memoria
EXPORT flights FROM gt_flight TO MEMORY ID 'BC402_FLIGHTS'. ENDIF. BC402_MMS_CONN_LIST (calling program), Method: on_double_click METHOD on_double_click. DATA lt_sflight TYPE TABLE OF sflight. DATA ls_conn LIKE LINE OF gt_conn. READ TABLE gt_conn INTO ls_conn INDEX row. CASE column. WHEN 'CARRID'. SET PARAMETER ID 'CAR' FIELD ls_conn-carrid. CALL TRANSACTION 'BC402MCAR' AND SKIP FIRST SCREEN. WHEN OTHERS. SUBMIT bc402_mms_flight_list AND RETURN WITH pa_car EQ ls_conn-carrid WITH so_con EQ ls_conn-connid WITH pa_list EQ space. IMPORT flights TO lt_sflight FROM MEMORY ID 'BC402_FLIGHTS'. IF sy-subrc 0. MESSAGE e361. ELSE. CALL FUNCTION 'BC402_DISPLAY_TABLE' CHANGING ct_table = lt_sflight. ENDIF. FREE MEMORY ID 'BC402_FLIGHTS'. ENDCASE. ENDMETHOD.
598
"on_double_click
© Copyright . Reservados todos los derechos.
Lección: Un resumen del tiempo de ejecución ABAP y gestión de memoria
Objetos de datos dinámicos Los strings y las tablas internas son objetos de datos dinámicos (también llamados objetos de datos profundos) con requisitos de memoria que pueden cambiar durante el tiempo de ejecución del programa. El sistema gestiona los datos de trabajo de estos objetos de datos de forma interna, usando referencias.
Nota: Otros objetos de datos profundos incluyen referencias y estructuras que contienen, al menos, un componente profundo independientemente del anidamiento. La gestión de memoria trata objetos de datos profundos y objetos de datos planos de forma diferente.
Gestión de memoria para objetos de datos planos
Figura 270: Gestión de memoria para objetos de datos planos
Los objetos de datos planos son tipos de datos elementales con longitudes fijas y estructuras que solo poseen componentes planos. El contenido de objetos de datos planos representa los datos de trabajo reales. El sistema reserva memoria para los objetos de datos planos apenas carga el programa en el modo interno. El sistema no libera la memoria reservada para objetos planos hasta que elimine el modo interno.
© Copyright . Reservados todos los derechos.
599
Capítulo 13: Llamadas de programa y gestión de memoria
Gestión de memoria para strings
Figura 271: Gestión de memoria para strings
Cuando el sistema carga un programa, al principio, solo crea una referencia para los objetos de datos profundos declarados de manera estática, como los strings y las tablas internas. El requisito de memoria estática para esta referencia es de 8 bytes. Cuando utiliza los objetos de datos profundos, se solicita memoria de trabajo adicional durante el tiempo de ejecución del programa. Para los objetos de datos dinámicos (strings y tablas internas), esta memoria sirve para la información de administración (cabecera) y los objetos de datos en sí. El requisito de memoria para una cabecera depende de la plataforma de hardware, pero generalmente es de 100 bytes. Cuando la memoria solicitada (asignada) no es suficiente para un acceso posterior, la memoria adicional puede grabarse. El sistema asigna más memoria que la requerida para el contenido actual del objeto de datos, para evitar solicitudes frecuentes mientras aumente el contenido. El sistema también limita el tamaño de strings al bloque contiguo más grande de la memoria que se requiere. Este límite es un máximo de 2 GB, pero generalmente se limita más con el parámetro del perfil ztta/ max_memreq_MB.
Atención: La memoria solicitada debe estar disponible en el código interno actual; en caso contrario, se produce un error de tiempo de ejecución. Cuando inicia un string con CLEAR o FREE, el sistema elimina los datos, pero las variables de referencia y la cabecera se mantienen y vuelven a utilizar durante la próxima solicitud de memoria. Por consiguiente, cuando se utilizó y se eliminó un string, su requisito de memoria está compuesto por la referencia y el requisito de la cabecera.
600
© Copyright . Reservados todos los derechos.
Lección: Un resumen del tiempo de ejecución ABAP y gestión de memoria
How to Use the Debugger to Analyze the Memory Consumption of Strings This source code is located in program BC402_MMD_ALLOC_STRING. You can run it through the debugger (memory analysis and memory objects) for demonstration purposes.
Gestión de memoria para tablas internas
Figura 272: Gestión de memoria para tablas internas
La gestión de memoria para las tablas internas es similar a la gestión para strings. La gestión de memoria para tablas internas difiere de la gestión de strings como sigue: ● Las cabeceras de las tablas internas requieren más memoria que otras cabeceras, porque los datos de la cabecera de la tabla interna pueden distribuirse entre varios bloques. Esto significa que la cabecera de la tabla interna puede gestionar referencias a estos bloques. ●
●
Las sentencias CLEAR, REFRESH y FREE poseen efectos diferentes. CLEAR y REFRESH solo eliminan los datos, mientras que FREE también puede eliminar la cabecera de la tabla si ocupa demasiada memoria. La cantidad de memoria que se asigna durante el acceso inicial puede modificarse cuando define la tabla interna (suplemento opcional INITIAL SIZE).
Puede especificar la cantidad de filas, n, como literales numéricos o constantes numéricas en el suplemento INITIAL SIZE. A continuación, el sistema selecciona el tamaño del primer bloque en la memoria para que se adecue a esta cantidad exacta de líneas.
Consejo: Para los tipos de tabla globales en el ABAP Dictionary, el campo de entrada Cantidad inicial de líneas en la etiqueta Inicialización y acceso realiza esta función.
© Copyright . Reservados todos los derechos.
601
Capítulo 13: Llamadas de programa y gestión de memoria
Si no especifica el suplemento, el sistema especifica automáticamente el número 0. Cuando el valor de n supera un valor máximo, el sistema asigna automáticamente un área de memoria adecuada durante el primer acceso. El sistema asigna memoria adicional según el número de líneas que supera el valor especificado n durante o después del acceso inicial. Por lo tanto, n no es un límite superior fijo para la capacidad de memoria de la tabla interna.
Atención: Superar el requisito de memoria inicial especificado cuando se rellena la tabla interna puede causar que el sistema asigne más memoria adicional que la realmente necesaria. Por lo tanto, SAP recomienda que solo especifique el requisito de memoria inicial cuando sepa el número de entradas en la tabla y desee especificar el tamaño del requisito de memoria principal inicial.
Consejo: La especificación de un requisito de memoria inicial es adecuada cuando las tablas internas son componentes de los tipos de tabla (tablas anidadas) y las tablas internas solo contienen unas pocas líneas.
How to Use the Debugger to Analyze the Memory Consumption of Internal Tables This source code is located in program BC402_MMD_ALLOC_ITAB. You can run it through the debugger (memory analysis and memory objects) for demonstration purposes.
Compartir objetos de datos dinámicos
Figura 273: Conexión en red entre strings
Para minimizar el tiempo de ejecución y conservar memoria, los valores asignados se comparten entre strings y entre tablas internas.
602
© Copyright . Reservados todos los derechos.
Lección: Un resumen del tiempo de ejecución ABAP y gestión de memoria
Compartir significa que el sistema primero no copia los valores de datos reales durante una asignación. En cambio, copia solo las entradas de gestión necesarias. El objeto de destino, por lo tanto, se refiere al mismo dato que el objeto fuente. Cuando los strings están implicados, la segunda referencia interna se completa hasta la cabecera de string existente. El sistema cancela la conexión cuando accede a la fuente o al destino en el modo de modificación. Este enfoque se llama semántica de copia sobre escritura. En este caso, el sistema en realidad copia los valores de datos y modifica las referencias y la cabecera según corresponda. Compartir datos en tablas internas
Figura 274: Conexión en red entre tablas internas
Con tablas internas, solo se comparten los datos reales. El sistema asigna a cada tabla una cabecera de tabla diferente, que hace referencia al cuerpo de la tabla existente. No se comparten las tablas cuyos tipos de línea contienen otros tipos de tabla.
Consejo: Compartir también se utiliza para transferir valores a procedimientos. Por lo tanto, no existe una diferencia principal entre utilizar llamada por valor y llamada por referencia en cuanto a los requisitos de tiempo de ejecución para transferir strings y tablas internas a formularios. Una operación de copia que consume mucho tiempo de ejecución se lleva a cabo si usted llama por valor y, a continuación, accede a los parámetros formales en modo de modificación dentro del procedimiento. En cambio, cuando utiliza una llamada por referencia, los parámetros reales y formales continúan utilizando la misma memoria.
How to Analyze the Memory Sharing with the Debugger This source code is located in program BC402_MMD_SHARE_STRING. You can run it through the debugger (memory analysis, memory objects) for demonstration purposes.
© Copyright . Reservados todos los derechos.
603
Capítulo 13: Llamadas de programa y gestión de memoria
This source code is located in program BC402_MMD_SHARE_ITAB. You can run it through the debugger (memory analysis, memory objects) for demonstration purposes.
Definición de componentes encasillados Los objetos de datos estáticos pueden utilizar una gran capacidad de memoria incluso cuando son INITIAL. Cuando tiene muchos objetos de datos estáticos idénticos sin utilizar en su programa, puede llevar a desperdicio de la memoria. Considere el siguiente ejemplo: ● Un atributo de instancia con una estructura estática que es INITIAL en la mayoría de las instancias de una clase. ●
Una tabla interna donde un gran número de columnas no se utilizan para muchas líneas de tablas.
A partir de SAP NetWeaver 7.0 EhP2, puede utilizar componentes encasillados para reducir el consumo de memoria de objetos de datos estáticos. Los objetos encasillados pueden ser de la siguiente manera: Subestructuras de estructuras anidadas
●
●
Atributos subestructurados de clases e interfaces
Estos componentes también se llaman casillas estáticas. Una casilla estática se declara con el suplemento BOXED cuando se definen subestructuras utilizando TYPES o cuando se declaran atributos estructurados de clases o interfaces utilizando DATA. Para los tipos de estructuras globales, clases e interfaces, está disponible un nuevo valor para la propiedad Tipificación de método. Go to ABAP Dictionary, open a random global structure type, and show the dropdown list in the Typing Method column for any of its components. Go to Class Builder, open any global class or interface on the Attributes tab page and show the dropdown list in the Typing column.
Consejo: No es posible utilizar el suplemento BOXED en las sentencias DATA que se encuentran fuera de las definiciones de clases. Para definir componentes encasillados fuera de las definiciones de clases, debe utilizar la sentencia TYPES o definir un tipo de estructura global adecuado.
604
© Copyright . Reservados todos los derechos.
Lección: Un resumen del tiempo de ejecución ABAP y gestión de memoria
Componentes encasillados y compartimiento de valor inicial
Figura 275: Estructura con componente encasillado
En la figura se ilustra un ejemplo de una estructura anidada con una subestructura estática encasillada. Los contenidos del subcomponente encasillado SUB no se almacenan dentro de la estructura GS_BOXED directamente. En cambio, el subcomponente está representado internamente por una referencia. Siempre que el subcomponente sea INITIAL, esta referencia señala a una estructura inicial tipificada de manera adecuada almacenada centralmente en el PXA. Esto se llama compartimiento de valor inicial para los componentes encasillados. El sistema revoca el compartimiento de valor inicial si, por ejemplo, se realiza un acceso de escritura en la subestructura, después del cual la subestructura ya no es inicial. Como se muestra en la figura, el sistema crea la subestructura de manera dinámica dentro de la sesión interna del programa y cambia la referencia para que señale a la nueva subestructura.
Consejo: Una vez que revoque el compartimiento de valor inicial, se mantiene. La sentencia CLEAR o FREE solo inicializa los componentes de la subestructura, pero no libera la memoria asignada para la subestructura. Las operaciones que revocan el compartimiento del valor inicial de un componente encasillado son las siguientes: ● Acceso de escritura a una casilla estática o uno de sus componentes ●
●
Casilla estática o uno de sus componentes como un parámetro real para llamadas de procedimiento Dirigir el componente estático encasillado o uno de sus subcomponentes con una referencia de datos o un Field Symbol
© Copyright . Reservados todos los derechos.
605
Capítulo 13: Llamadas de programa y gestión de memoria
Consejo: Una estructura que contenga un componente encasillado siempre es profundo incluso cuando todos los componentes, incluido el subcomponente encasillado, son de longitud estática.
Ejemplos de componentes encasillados
Figura 276: Atributo de instancia definido como componente encasillado
En la figura se muestra un ejemplo de un atributo de instancia de una clase definido como un componente encasillado. Si el atributo encasillado sigue siendo inicial en muchas instancias de la clase, todas las instancias comparten el mismo valor inicial. Esto puede reducir significativamente el consumo de memoria del programa.
606
© Copyright . Reservados todos los derechos.
Lección: Un resumen del tiempo de ejecución ABAP y gestión de memoria
Ejemplo – Tablas internas y componentes encasillados
Figura 277: Ejemplo – Tablas internas y componentes encasillados
Puede reducir el tamaño general de una tabla interna si utiliza un tipo de estructura que tenga un componente encasillado como tipo de línea. Esto se ilustra en la figura.
Casos de uso de componentes encasillados Los objetos encasillados deben cumplir requisitos de la siguiente manera: ● El componente encasillado suele permanecer inicial La ventaja de componentes encasillados yace en el menor uso de memoria a través del compartimiento de valor inicial. Esto implica que un componente encasillado no tiene ventaja si este nunca permanece INITIAL la mayoría de las veces. ●
El componente encasillado es demasiado pequeño Si la subestructura o el atributo estructura son pequeños, el ahorro de memoria no puede contrarrestar los datos no útiles de 8 bytes para la referencia.
●
A menudo, se utiliza el componente encasillado El ahorro de memoria a través de componentes encasillados se compara con la cantidad de veces que la estructura inicial realmente se comparte.
Consejo: No es necesario que la clase o la estructura anidada deban tener varias instancias dentro de la misma ejecución del programa. Como el PXA solo existe una vez por instancia de servidor, puede beneficiarse también de los componentes encasillados si el sistema ejecuta el programa muchas veces en la misma instancia de servidor.
© Copyright . Reservados todos los derechos.
607
Capítulo 13: Llamadas de programa y gestión de memoria
How to Analyze Boxed Components in the Debugger The below mentioned programs are the demonstrations that exist in the system: ●
BC402_MMD_BOXED_STRUCT Structure with boxed substructure and same structure with non-boxed substructure. Run the program and compare the memory consumption of these two structures in the debugger. Demonstrate that the memory consumption of a structure with boxed component is dynamic.
●
BC402_MMD_BOXED_ATTR Local class with boxed instance attribute and same class with non-boxed attribute. Run the program and compare the memory consumption of these two structures in the debugger. Demonstrate that the memory consumption of an object with boxed component is dynamic.
●
BC402_MMD_BOXED_SHARE Internal table with a line type containing a boxed substructure and the same internal table where the substructure is not boxed. Run the program and compare the memory consumption of these two structures in the debugger. Demonstrate that the memory consumption of the table with the boxed component is significantly smaller when the substructure is left initial (always or mostly).
608
© Copyright . Reservados todos los derechos.
Lección: Un resumen del tiempo de ejecución ABAP y gestión de memoria
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Generar y activar programas
●
Explicar la gestión de memoria de sesión de usuario
●
Transferir datos entre programas
●
Explicar la gestión de memoria de objetos de datos profundos
●
Utilizar componentes encasillados
© Copyright . Reservados todos los derechos.
609
Capítulo 13: Llamadas de programa y gestión de memoria
610
© Copyright . Reservados todos los derechos.
Capítulo 13
579
Evaluación de la formación
1. Si utiliza la sentencia ___________________, el sistema cancela el programa actual e inicia la transacción con el código de transacción T_CODE. Seleccione la respuesta correcta. X
A SUBMIT
X
B AND RETURN
X
C LEAVE TO TRANSACTION 'T_CODE'
X
D CALL TRANSACTION 'T_CODE'
2. Una CARGA grabada o almacenada en memoria intermedia se considera obsoleta si la versión desarrollada del programa se modificó. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
3. Las partes que pueden modificarse de un programa se crean en memoria en áreas de roll durante cada ejecución. Incluso si el mismo usuario ejecuta el programa varias veces, cada ejecución tiene su propia área de roll. ¿Cuál de las siguientes opciones es un ejemplo de partes que se pueden modificar de un programa? Seleccione la respuesta correcta. X
A Código byte para sentencias
X
B Valores de constantes y literales
X
C Textos de programas
X
D Definiciones de pantalla
X
E Objetos de datos (variables)
© Copyright . Reservados todos los derechos.
611
Capítulo 13: Evaluación de la formación
4. ¿Cuál de las siguientes opciones es verdadera cuando activa un nuevo objeto, por ejemplo, un programa? Seleccione las respuestas correctas. X
A El objeto se graba
X
B La sintaxis del objeto se verifica
X
C La versión recientemente creada se convierte en la versión activa actual
X
D Se genera un archivo binario ejecutable
5. ¿Qué sentencias también pueden eliminar la cabecera de la tabla si consume mucha memoria? Seleccione la respuesta correcta. X
A CLEAR
X
B REFRESH
X
C FREE
6. Para definir componentes encasillados fuera de las definiciones de clase, debe usar la sentencia DATA. Indique si esta afirmación es verdadera o falsa.
612
X
Verdadero
X
Falso
© Copyright . Reservados todos los derechos.
Capítulo 13
581
Respuestas a la Evaluación de la formación
1. Si utiliza la sentencia ___________________, el sistema cancela el programa actual e inicia la transacción con el código de transacción T_CODE. Seleccione la respuesta correcta. X
A SUBMIT
X
B AND RETURN
X
C LEAVE TO TRANSACTION 'T_CODE'
X
D CALL TRANSACTION 'T_CODE'
2. Una CARGA grabada o almacenada en memoria intermedia se considera obsoleta si la versión desarrollada del programa se modificó. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
3. Las partes que pueden modificarse de un programa se crean en memoria en áreas de roll durante cada ejecución. Incluso si el mismo usuario ejecuta el programa varias veces, cada ejecución tiene su propia área de roll. ¿Cuál de las siguientes opciones es un ejemplo de partes que se pueden modificar de un programa? Seleccione la respuesta correcta. X
A Código byte para sentencias
X
B Valores de constantes y literales
X
C Textos de programas
X
D Definiciones de pantalla
X
E Objetos de datos (variables)
© Copyright . Reservados todos los derechos.
613
Capítulo 13: Respuestas a la Evaluación de la formación
4. ¿Cuál de las siguientes opciones es verdadera cuando activa un nuevo objeto, por ejemplo, un programa? Seleccione las respuestas correctas. X
A El objeto se graba
X
B La sintaxis del objeto se verifica
X
C La versión recientemente creada se convierte en la versión activa actual
X
D Se genera un archivo binario ejecutable
5. ¿Qué sentencias también pueden eliminar la cabecera de la tabla si consume mucha memoria? Seleccione la respuesta correcta. X
A CLEAR
X
B REFRESH
X
C FREE
6. Para definir componentes encasillados fuera de las definiciones de clase, debe usar la sentencia DATA. Indique si esta afirmación es verdadera o falsa.
614
X
Verdadero
X
Falso
© Copyright . Reservados todos los derechos.
CAPÍTULO 14
ABAP Open SQL en detalle
Lección 1 Implementación de condiciones complejas WHERE y cláusulas especiales INTO
616
Lección 2 Procesamiento y adición de sets de datos en la base de datos Ejercicio 33: Mantener sets de datos clasificados y condensados desde la base de datos Ejercicio 34: Realizar cálculos en la base de datos
626 631 645
Lección 3 Lectura de múltiples tablas de base de datos Ejercicio 35: Implementar un JOIN para tres tablas de bases de datos Ejercicio 36: Implementar almacenamiento completo en memoria intermedia según demanda Ejercicio 37: Leer datos adicionales con el suplemento FOR ALL ENTRIES
OBJETIVOS DEL CAPÍTULO ●
Delimitar los sets de datos seleccionados en la base de datos con la cláusula WHERE
●
Utilizar diferentes tipos de objetos de datos como el destino para sentencias SELECT
●
Leer grandes volúmenes de datos de la base de datos
●
Mantener sets de datos clasificados o condensados desde la base de datos
●
Realizar cálculos en la base de datos
●
Identificar las desventajas de SELECT anidada
●
Utilizar vistas de bases de datos y ABAP JOINs
●
Explicar técnicas especiales para la lectura desde varias tablas de base de datos
●
Utilizar las técnicas explícitas de almacenamiento en memoria intermedia
© Copyright . Reservados todos los derechos.
615
651 657 669 679
Capítulo 14 Lección 1 584
Implementación de condiciones complejas WHERE y cláusulas especiales INTO
RESUMEN DE LA LECCIÓN En este módulo se explican las expresiones lógicas que se utilizan en las condiciones WHERE de las sentencias de Open SQL. También se analiza una variedad de otros operadores además de las comparaciones de valor sencillas con “=” y “EQ”. Ejemplo empresarial Desea implementar accesos a bases de datos con Open SQL en sus aplicaciones. Estos accesos a bases de datos deben ser sofisticados y eficaces. Por lo tanto, necesita descubrir las opciones especiales de uso de expresiones lógicas en la condición WHERE y la especificación de objetos de datos en las cláusulas INTO. Por este motivo, se requieren los siguientes conocimientos: ●
Un resumen de la importancia de los posibles operadores en las condiciones WHERE
●
Un resumen de cómo utilizar los diferentes operadores correctamente
●
●
Un resumen de las opciones disponibles para especificar objetos de datos después de INTO Un resumen de cómo implementar procesamiento secuencial de grandes volúmenes de datos The objective of this lesson is to introduce the participants to variants of SELECT statements. SELECT statements are easy to demonstrate and follow. Make sure to point out that SELECT statements are special techniques that should only be used in specific application cases.
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Delimitar los sets de datos seleccionados en la base de datos con la cláusula WHERE
●
Utilizar diferentes tipos de objetos de datos como el destino para sentencias SELECT
●
Leer grandes volúmenes de datos de la base de datos
Operadores en las condiciones WHERE Al formular condiciones WHERE, comparó principalmente con valores individuales y evaluó las tablas de selección (opciones de selección). Los valores de comparación en este caso fueron objetos de datos (variables y literales). Sin embargo, Open SQL también admite una variedad de operadores y le permite comparar campos de tablas de bases de datos con otros. Los posibles operadores en las condiciones WHERE se enumeran en la siguiente tabla:
616
© Copyright . Reservados todos los derechos.
Lección: Implementación de condiciones complejas WHERE y cláusulas especiales INTO
Operador
Significado y uso
=, ,
View more...
Comments