TAW12 Programación ABAP - Avanzado Parte 2
.
.
MANUAL DEL PARTICIPANTE FORMACIÓN CON INSTRUCTOR
. Versión del curso: 10 Duración del curso: 5 Días Número de material: 50117660
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.
Sobre este manual Este manual intenta complementar la presentación de la guía de instructores de este curso y servir como una fuente de referencia. No es adecuado como material de auto-estudio. 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: Ajuste del software SAP estándar
2 7 17 18 23 26 35 36 44 57 61 65 69 77 85 86 89 94 101 102 112 119 124 128
Lección: Explicación de los términos para ajustar el software SAP estándar Lección: Descripción de las clases de ampliación clásica Capítulo 2: Ampliación de elementos de diccionario Lección: Ampliación de la tablas con estructuras append e includes de Customizing Ejercicio 1: Ampliación de una tabla Lección: Ampliación de los textos de elementos de datos Capítulo 3: Exits de cliente Lección: Manejo de proyectos de ampliación Lección: Ampliación de programas con exits de programa Ejercicio 2: Implementación de un exit de cliente: exit de programa Lección: Ampliación de menús con exits de menú Ejercicio 3: Implementación de un exit de cliente: exit de menú Lección: Ampliación de dynpros con exits de dynpro Ejercicio 4: Implementación de un exit de cliente: exit de dynpro Capítulo 4: Add-ins empresariales clásicos Lección: Descripción de una interfaz de objetos ABAP Lección: Descripción de los Add-ins empresariales (BAdI) clásicos Lección: Explicación de los detalles avanzados de los BAdI Capítulo 5: Modificaciones de la versión estándar de SAP Lección: Modificación del software SAP estándar Lección: Modificación con el asistente de modificación Ejercicio 5: Implementación de modificaciones Lección: Implementación de exits de usuario Lección: Ajuste de modificaciones
© Copyright . Reservados todos los derechos.
vii
139 141 146
Lección: Descripción del concepto de ampliación Lección: Uso de ampliaciones explícitas
151 155 157
Ejercicio 6: Uso de ampliaciones explícitas Lección: Descripción de ampliaciones implícitas Lección: Uso de ampliaciones implícitas en los módulos de funciones SAP Ejercicio 7: Uso de las ampliaciones implícitas de un módulo de funciones de SAP Lección: Uso de ampliaciones implícitas en clases globales de SAP Ejercicio 8: Amplíe una clase de SAP global. Lección: Uso de otras ampliaciones implícitas Ejercicio 9: Ampliación de estructuras y subrutinas de SAP
159 163 167 174 177 187 188 193 196 203 206 213 216 221 229 230 235 239 245 247 255 257 263
273 274
viii
Capítulo 6: Puntos de ampliación, opciones de ampliación y secciones de ampliación
Capítulo 7: Add-ins empresariales (BAdI) Lección: Comprensión del cambio de las Add-ins empresariales clásicas a las nuevas Add-ins empresariales Ejercicio 10: Implementación de exits de programa para BAdI clásicos Lección: Implementación de exits de programa para nuevas Add-ins empresariales (BAdI) Ejercicio 11: Implementación de exits de programa para nuevos BAdI Lección: Implementación de exits de menú de nuevos Add-ins empresariales (BAdI) Ejercicio 12: Implementación de exits de menú para nuevas BAdI Lección: Implementación de nuevos exits de dynpro de Add-ins empresariales (BAdI) Ejercicio 13: Implementación de exits de dynpro para nuevas BAdI Capítulo 8: Introducción a Web Dynpro Lección: Resumen de los beneficios de Web Dynpro Lección: Explicación de la arquitectura de Web Dynpro Ejercicio 14: Crear un Web Dynpro simple Lección: Navegación entre vistas Ejercicio 15: Navegar entre vistas Web Dynpro Lección: Utilización de conjuntos de vistas Ejercicio 16: Utilizar conjuntos de vistas Lección: Explicación de la arquitectura de Web Dynpro y relaciones entre entidades Capítulo 9: Controladores Web Dynpro Lección: Explicación de los controladores de Web Dynpro
© Copyright . Reservados todos los derechos.
285
Capítulo 10:
Contexto de Web Dynpro
286 292
Lección: Definición de contexto Lección: Establecer propiedades a los nodos del contexto
300 303
Lección: Asignación de contextos Ejercicio 17: Definir, asignar y vincular datos al contexto
311 312 327 334 342 351 367 368 379 389 394 401 409 411
Capítulo 11: Interfaz de usuario de Web Dynpro Lección: Definición del layout de visualización Ejercicio 18: Usar gestores de layout para disponer elementos de UI Lección: Vinculación de datos y control del comportamiento del elemento de UI Lección: Utilización de elementos de UI compuestos Ejercicio 19: Usar el asistente de servicio y visualizar tablas Capítulo 12:Programación de contextos y controladores Lección: Comprensión de métodos y atributos de controlador Lección: Utilización de métodos de controlador para acceder al contexto en tiempo de ejecución Ejercicio 20: Acceso al contexto en tiempo de ejecución Lección: Adición de elementos nuevos a un nodo de contexto Ejercicio 21: Visualizar datos en masa mediante tablas Lección: Implementación de las funciones de suministro Ejercicio 22: Implementar las funciones de suministro
© Copyright . Reservados todos los derechos.
ix
x
© Copyright . Reservados todos los derechos.
Resumen del curso PÚBLICO OBJETIVO Este curso está dirigido al siguiente público objetivo: ●
Consultor de desarrollo
●
Gestor de proyecto
●
Programador
© Copyright . Reservados todos los derechos.
xi
xii
© Copyright . Reservados todos los derechos.
CAPÍTULO 1
Ajuste del software SAP estándar
Lección 1 Explicación de los términos para ajustar el software SAP estándar
2
Lección 2 Descripción de las clases de ampliación clásica
7
OBJETIVOS DEL CAPÍTULO ●
Describir las opciones para el ajuste del sistema estándar de SAP
●
Describir las clases de ampliación clásica
© Copyright . Reservados todos los derechos.
1
Capítulo 1 Lección 1 Explicación de los términos para ajustar el software SAP estándar
RESUMEN DE LA LECCIÓN En este módulo se ofrece un resumen de las opciones disponibles para modificar el sistema SAP y se esbozan las directrices que le permitirán decidir qué opción utilizar. Ejemplo empresarial Necesita conocer las opciones disponibles para modificar y ampliar su sistema SAP. Por este motivo, se requieren los siguientes conocimientos: ●
●
Una buena comprensión de los distintos niveles en los que se pueden realizar modificaciones en la versión estándar que suministra SAP. Una buena comprensión del método más adecuado para modificar el sistema estándar.
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Describir las opciones para el ajuste del sistema estándar de SAP
Resumen de los niveles de modificación
Figura 1: Diagrama de resumen: modificación del estándar de SAP
Puede modificar el software estándar de SAP utilizando alguna de las siguientes técnicas:
2
© Copyright . Reservados todos los derechos.
Lección: Explicación de los términos para ajustar el software SAP estándar
●
Personalización
●
Modificación
●
Ampliación
Niveles de modificación
Figura 2: Niveles de modificación
Puede modificar el sistema basado en ABAP en los siguientes niveles: ● Customizing En el nivel de Customizing, puede configurar procesos empresariales específicos y funciones para su sistema en función de una Guía de implementación (IMG). ●
Personalización En el nivel de personalización, puede realizar cambios en los atributos de visualización globales de ciertos campos (como configurar valores predeterminados y ocultar campos) y crear secuencias de menú específicas del usuario.
●
Modificación En el nivel de modificación, puede modificar los objetos de repository de SAP en el sitio del cliente. Si SAP suministra una versión modificada del objeto, debe ajustar el sistema del cliente para reflejar estas modificaciones. Antes del release 4.0B, estos ajustes tenían que hacerse manualmente mediante utilidades de actualización. A partir del release 4.5A, este procedimiento se ha automatizado a través del uso del Asistente de modificaciones.
●
Ampliación En el nivel de ampliación, puede crear objetos de repository para clientes individuales que hacen referencia a objetos que ya existen en el repository de SAP.
●
Desarrollo de cliente
© Copyright . Reservados todos los derechos.
3
Capítulo 1: Ajuste del software SAP estándar
En el nivel de desarrollo del cliente, puede crear objetos de repository que son únicos para los clientes individuales en las áreas de nombre del cliente. El Customizing y la personalización se realizan utilizando las herramientas que se encuentran en el Business Engineer. Los desarrollos, las ampliaciones y las modificaciones del cliente se realizan mediante las herramientas disponibles en el Workbench ABAP. Procedimiento para la modificación de funcionalidad
Figura 3: Procedimiento para la modificación de funcionalidad
Si el Customizing o la personalización no cumple sus requisitos, puede iniciar un proyecto de desarrollo o utilizar un Programa de software complementario (CSP). Una lista de CSP certificados por SAP está disponible en la extranet de SAP Service Marketplace bajo el alias / softwarepartner. En la categoría de desarrollo del cliente hay un proyecto de desarrollo si la versión estándar de SAP no contiene ya funciones parecidas a la que se está intentando desarrollar. Sin embargo, si existe una función SAP parecida, intente incluirla en su proyecto de desarrollo ampliándola o modificándola mediante un exit de usuario o haciendo una copia del programa SAP adecuado. Las modificaciones pueden provocar problemas. Después de un upgrade, debe comparar las nuevas versiones de objetos SAP con las versiones modificadas que ha creado. Si es necesario, también debe ajustar las versiones nuevas para incorporar los ajustes realizados en versiones anteriores. Realice las modificaciones solo en las siguientes situaciones: ● El Customizing o la personalización no cumplen sus requisitos.
4
●
No hay previstos exits de usuario ni ampliaciones similares.
●
Copiar el objeto de SAP al área de nombres del cliente no puede considerarse una opción.
© Copyright . Reservados todos los derechos.
Lección: Explicación de los términos para ajustar el software SAP estándar
Customizing
Figura 4: Customizing
Business Engineer está compuesto por todas las herramientas de implementación de SAP. Estos son ejemplos de las herramientas de implementación de SAP: ● El modelo de referencia R/3 ●
La guía de implementación (IMG)
●
Una lista completa de todas las actividades de Customizing El Modelo de referencia R/3 contiene todos los modelos utilizados para describir los procesos industriales (los modelos de proceso, datos y organización).
Personalización Las siguientes opciones pueden ayudarlo a lograr la personalización: ●
●
Atributos de visualización global de campos -
Transacciones de variante
-
Parámetro SET/GET
-
Opciones de control de tabla dependientes de usuario o de mandante
Menús personalizados -
Menú según función
-
Favoritos
-
Accesos directos en el escritorio
© Copyright . Reservados todos los derechos.
5
Capítulo 1: Ajuste del software SAP estándar
La personalización acelera y simplifica el procesamiento de escenarios empresariales del sistema basado en ABAP. Con la personalización, puede ajustar las transacciones de aplicación individuales para cubrir las necesidades empresariales de su compañía en su conjunto o las necesidades de grupos de usuarios específicos en su compañía. Se desactivan todas las funciones y los datos innecesarios encontrados en la transacción. Con la personalización, puede simplificar una aplicación sin tener que usar el Workbench ABAP. Los atributos de visualización globales permiten definir valores predeterminados para campos de dynpro específicos. También se pueden suprimir columnas de control de tabla o campos individuales de una transacción concreta o de toda la pantalla. Los menús personalizados, como los basados en roles, favoritos y de acceso rápido del Escritorio, le permiten ajustar las secuencias de menús para reflejar las necesidades de distintos grupos de usuarios en la empresa. RESUMEN DE LA LECCIÓN Ahora podrá: ●
6
Describir las opciones para el ajuste del sistema estándar de SAP
© Copyright . Reservados todos los derechos.
Capítulo 1 Lección 2 Descripción de las clases de ampliación clásica
RESUMEN DE LA LECCIÓN En este módulo se describen las clases de ampliación disponibles y sus usos. Ejemplo empresarial Para trabajar en el sistema SAP, será necesario aprender varias técnicas de ampliación. Por este motivo, se requieren los siguientes conocimientos: ●
Una buena comprensión de las clases de ampliación disponibles y sus usos.
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Describir las clases de ampliación clásica
Niveles de modificación mediante el Workbench ABAP
Figura 5: Niveles de modificación mediante el Workbench ABAP
Los niveles de modificación del software SAP con el Workbench ABAP son los siguientes: Modificación
●
●
Ampliación
●
Desarrollo de cliente
© Copyright . Reservados todos los derechos.
7
Capítulo 1: Ajuste del software SAP estándar
Las modificaciones son cambios en los objetos SAP de los sistemas del cliente. Concretamente: ●
●
Se ejecutan con ayuda de exits de usuario (subrutinas reservadas a los clientes en objetos del área de nombres de SAP). Varios puntos de los objetos de Repository SAP son "de codificación fija".
Los desarrollos de cliente son programas desarrollados por el cliente que puede llamar objetos del Repository SAP. Por ejemplo, los clientes pueden crear programas que llaman los módulos de funciones SAP. Se invierte la distribución de roles en los conceptos de ampliación. Los programas SAP llaman objetos del Repository que un cliente ha creado o modificado. Por ejemplo, utiliza un exit de módulo de funciones llamado por un programa SAP. Puede ampliar el sistema en los niveles siguientes: En programas ABAP por exits de módulo de funciones
●
●
●
●
●
En los GUI mediante el uso de exits de menú En dynpros, mediante la inserción de exits de dynpro en un subscreen de un área especificada por SAP En los dynpros, mediante exits de campo para procesar el código de cliente que hace referencia a un campo específico en el dynpro En estructuras o tablas de Dictionary ABAP mediante ampliaciones de tabla
Ampliaciones de tabla
Figura 6: Ampliaciones de tabla
Puede ampliar tablas y estructuras con campos utilizando las siguientes opciones: ● Estructuras append ●
Includes de Customizing (CI)
Las dos técnicas le permiten adjuntar campos a una tabla sin tener que modificar la tabla.
8
© Copyright . Reservados todos los derechos.
Lección: Descripción de las clases de ampliación clásica
Una estructura append es una estructura que asigna exactamente a una tabla. Puede haber varias estructuras append para una tabla. Durante la activación, el sistema busca todas las estructuras append activas para la tabla en cuestión y las adjunta a la tabla. Las estructuras append difieren de las estructuras include en el modo en que hacen referencia a las tablas. Para incluir campos de una estructura include en una tabla, debe añadir una línea .INCLUDE... a la tabla. En este caso, la tabla hace referencia a la subestructura. Las estructuras append hacen referencia a sus tablas. En este caso, la referencia no altera las tablas de ninguna manera. Ampliaciones de tabla: SAP y el cliente
Figura 7: Ampliaciones de tabla: SAP y el cliente
Las estructuras append le permiten adjuntar campos a una tabla sin tener que modificar la tabla. Por lo tanto, los desarrolladores de SAP no tienen que planificar ampliaciones de tabla mediante estructuras append. Una estructura append solo puede pertenecer a una tabla. En cambio, los includes de Customizing permiten usar la misma estructura en varias tablas. La sentencia include debe existir ya en la estructura o en la tabla SAP. Sin embargo, los desarrolladores de SAP deben planificar las ampliaciones de tabla mediante includes de Customizing.
© Copyright . Reservados todos los derechos.
9
Capítulo 1: Ajuste del software SAP estándar
Ampliaciones de programa
Figura 8: Ampliaciones de programa: cómo funcionan
La finalidad de una ampliación de programa es llamar un objeto en el área de nombres de cliente. Puede utilizar las siguientes técnicas en las ampliaciones de programa: Técnica
Descripción
Exit de usuario
Un exit de usuario es una subrutina.
Exit de cliente
Un exit de cliente es un módulo de función de exit especial que llama el programa de aplicación SAP. Este módulo de función forma parte de un grupo de función que el sistema maneja de manera especial.
10
Evento de operación
El programa de aplicación SAP llama dinámicamente un módulo de funciones en el área de nombres de cliente.
Add-in empresarial
El programa de aplicación llama un método de una clase o una instancia de una clase. Esta clase se encuentra en el área de nombres de cliente.
© Copyright . Reservados todos los derechos.
Lección: Descripción de las clases de ampliación clásica
Ampliaciones de programa: SAP y cliente
Figura 9: Ampliaciones de programa: SAP y cliente
Las ampliaciones de programa le permiten ejecutar una lógica de programa adicional para un programa de aplicación SAP. En la actualidad, SAP proporciona las técnicas que se describen en la figura.
Ampliaciones de menú
Figura 10: Ampliaciones de menú: SAP y cliente
Las ampliaciones de menú permiten añadir opciones adicionales a un menú estándar de SAP. El sistema SAP proporciona las siguientes opciones:
© Copyright . Reservados todos los derechos.
11
Capítulo 1: Ajuste del software SAP estándar
●
Exits de cliente
●
Add-ins empresariales
Las opciones de menú adicionales se fusionan en GUI. Cuando se implementa el código de función, puede modificar el texto de la opción de menú y cambiar los iconos. Sin embargo, esto es posible solo si el desarrollador de SAP proporciona la opción.
Ampliaciones de pantalla
Figura 11: Ampliaciones de pantalla
Los exits de dynpro son un tipo de exit de cliente. Permiten visualizar objetos adicionales en el dynpro del programa de aplicación de SAP. Para proporcionar exits de dynpro, el desarrollador debe realizar las siguientes tareas: Definir las áreas de subscreen
●
●
Especificar las llamadas correspondientes en la lógica de proceso
●
Proporcionar el framework para transportar los datos
●
Incluir el exit de dynpro en una ampliación
●
Actualizar la documentación
A partir de SAP NetWeaver Application Server 6.20, los add-ins empresariales también pueden contener exits de dynpro.
12
© Copyright . Reservados todos los derechos.
Lección: Descripción de las clases de ampliación clásica
Modificaciones
Figura 12: Modificaciones
Cualquier cambio que realice en un objeto que SAP suministró se denomina modificación. Después de un upgrade, debe comparar las nuevas versiones de objetos SAP con las versiones modificadas que ha creado. Si es necesario, también debe ajustar las versiones nuevas para incorporar los ajustes realizados en versiones anteriores. Antes del release 4.0B, el sistema registró las modificaciones en el nivel de objeto del Repository (por ejemplo, un programa de include). Desde el release 4.5A, la granularidad para registrar modificaciones es más precisa. El Asistente de modificaciones lo hace posible. El proceso de ajuste de modificaciones también se renovó. RESUMEN DE LA LECCIÓN Ahora podrá: ●
Describir las clases de ampliación clásica
© Copyright . Reservados todos los derechos.
13
Capítulo 1: Ajuste del software SAP estándar
14
© Copyright . Reservados todos los derechos.
Capítulo 1 Evaluación de la formación
1. De las siguientes técnicas, ¿cuáles incluyen las opciones para ajustar el software estándar de SAP? Seleccione las respuestas correctas. X
A Personalización
X
B Ampliación
X
C Desarrollo de cliente
X
D Modificación
2. ¿Cuáles son los niveles de modificación del software SAP con el Workbench ABAP? Seleccione las respuestas correctas. X
A Modificación
X
B Desarrollo de cliente
X
C Ampliaciones
X
D Personalización
© Copyright . Reservados todos los derechos.
15
Capítulo 1 Respuestas a la Evaluación de la formación
1. De las siguientes técnicas, ¿cuáles incluyen las opciones para ajustar el software estándar de SAP? Seleccione las respuestas correctas. X
A Personalización
X
B Ampliación
X
C Desarrollo de cliente
X
D Modificación
2. ¿Cuáles son los niveles de modificación del software SAP con el Workbench ABAP? Seleccione las respuestas correctas.
16
X
A Modificación
X
B Desarrollo de cliente
X
C Ampliaciones
X
D Personalización
© Copyright . Reservados todos los derechos.
CAPÍTULO 2
Ampliación de elementos de diccionario
Lección 1 Ampliación de la tablas con estructuras append e includes de Customizing Ejercicio 1: Ampliación de una tabla
18 23
Lección 2 Ampliación de los textos de elementos de datos
26
OBJETIVOS DEL CAPÍTULO ●
Ampliar tablas mediante estructuras append
●
Ampliar tablas mediante includes de Customizing
●
Ampliar textos de elementos de datos
© Copyright . Reservados todos los derechos.
17
Capítulo 2 Lección 1 Ampliación de la tablas con estructuras append e includes de Customizing
RESUMEN DE LA LECCIÓN En este módulo se explica cómo ampliar las tablas utilizando estructuras append e includes de Customizing. Ejemplo empresarial Desea agregar campos a las tablas SAP, pero no quiere tener que implementar modificaciones. Por este motivo, se requieren los siguientes conocimientos: ●
Cómo ampliar tablas utilizando estructuras append
●
Cómo ampliar tablas utilizando includes de Customizing
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Ampliar tablas mediante estructuras append
●
Ampliar tablas mediante includes de Customizing
Ampliaciones de tabla
Figura 13: Ampliaciones al Dictionary ABAP: diagrama de resumen
18
© Copyright . Reservados todos los derechos.
Lección: Ampliación de la tablas con estructuras append e includes de Customizing
Puede añadir campos adicionales en una tabla de SAP sin modificar la tabla y utilizando estructuras append e includes de Customizing. Estas son las características de las estructuras append: ● Puede crear estructuras append para las tablas SAP sin preparativos de SAP, según sus requisitos empresariales. ●
Puede utilizar múltiples estructuras append con una sola tabla SAP.
●
Puede utilizar las estructuras append como estructuras normales en los programas.
Estas son las características de los includes de Customizing: ●
Los includes de Customizing vienen integrados en las tablas de SAP.
●
El cliente completa los includes de Customizing con los campos adicionales requeridos.
●
Los Includes de Customizing se proporcionan dentro de los Exits de cliente que también pueden contener exits de código fuente relacionados y exits de dynpro.
Si el desarrollador de aplicaciones SAP sabe de antemano que es necesario añadir campos específicos de cliente a una de las tablas o estructuras proporcionadas por SAP, el desarrollador incluirá estos campos en la tabla mediante una sentencia de include de Customizing. El mismo Include de Customizing se puede presentar en múltiples tablas o estructuras. De este modo se garantiza la coherencia en estas tablas y estructuras siempre que se utilice el include (si se añaden campos). No se producirán errores si no se implementan los Includes de Customizing proporcionados por SAP.
Estructuras append
Figura 14: Estructuras append
Las estructuras append le permiten adjuntar campos a una tabla sin tener que modificar la tabla propiamente dicha. También es posible asignar las estructuras append a una sola tabla. Sin embargo, una tabla tiene varias estructuras append adjuntas a ella. Cada vez que se activa una tabla, el sistema busca todas las estructuras append activas para la tabla en cuestión y las adjunta a la tabla.
© Copyright . Reservados todos los derechos.
19
Capítulo 2: Ampliación de elementos de diccionario
Si se crea una estructura append, o se modifica y luego se activa, la tabla a la cual está asignada también se activará. Todos los cambios realizados en la estructura append también se observan en la tabla. Puede usar los campos en estructuras append de programas ABAP como cualquier otro campo en la tabla. Si copia una tabla a la que se ha adjuntado una estructura append, los campos de la estructura append pasarán a ser campos normales de la tabla de destino. Estructuras append en el momento del upgrade
Figura 15: Estructuras append en el momento del upgrade
La creación de estructuras append en el área de nombres del cliente las protege contra sobrescritura durante un upgrade del sistema. Durante los upgrades se cargan nuevas versiones de las tablas estándares. Los campos incluidos en estructuras append activas se añaden entonces a las nuevas tablas estándares cuando se activan por primera vez. A partir del release 3.0, la secuencia de campos en el Dictionary ABAP puede ser diferente a la secuencia de campos en la base de datos. Por lo tanto, no es necesaria la conversión de la tabla de la base de datos cuando agrega una estructura append o inserta campos en una estructura existente. Todos los ajustes necesarios de la estructura se llevan a cabo automáticamente mediante el ajuste del catálogo de la base de datos ALTER TABLE. La definición de la tabla se cambia cuando se activa en el Dictionary ABAP y el nuevo campo se añade a la tabla de la base de datos. Preste atención a los siguientes puntos cuando utilice estructuras append: Las tablas y las estructuras de SAP pueden clasificarse de acuerdo con una determinada categoría de ampliación para evitar los problemas que surgen de las verificaciones de Unicode en el sistema. Los campos de un include de Customizing o una estructura append deben respetar esta clasificación.
●
●
●
20
No puede crear estructuras append para tablas pool y cluster. Si una tabla contiene un campo largo (ya sea la clase de datos LCHR o LRAW), no podrá ampliar la tabla utilizando una estructura append. Esto se debe a que los campos largos de este tipo siempre deben ser el último campo en sus respectivas tablas. No puede añadir campos de una estructura append después de los campos largos.
© Copyright . Reservados todos los derechos.
Lección: Ampliación de la tablas con estructuras append e includes de Customizing
●
Si usa una estructura append para ampliar una tabla SAP, los nombres de campo de la estructura append deben estar en el área de nombres de cliente, es decir, deben empezar por YY o ZZ. Esto evita conflictos de asignación de nombres con cualquier campo nuevo que SAP pueda insertar en el futuro.
Includes de Customizing
Figura 16: Includes de Customizing
Los includes de Customizing no forman parte del área de nombres de cliente. Los nombres de todos los includes de Customizing comienzan con CI_. Esta convención para fijar nombres permite garantizar que no se producirán errores por includes de Customizing inexistentes. El software estándar de SAP no ofrece ningún código para los Includes de Customizing. Crea los includes de Customizing mediante transacciones especiales de Customizing. Algunos ya forman parte de las ampliaciones de SAP y puede crearlos utilizando la Gestión de proyectos. Los nombres de campo de los includes de Customizing deben estar dentro del área de nombres de cliente, como los nombres de campo de las estructuras append. Las reglas para añadir campos de los includes de Customizing a su base de datos son las mismas reglas para las estructuras append.
© Copyright . Reservados todos los derechos.
21
Capítulo 2: Ampliación de elementos de diccionario
22
© Copyright . Reservados todos los derechos.
Capítulo 2 Ejercicio 1 Ampliación de una tabla
Ejemplo empresarial Usted trabaja como técnico informático para una agencia de viajes de gran tamaño. Sus empleados utilizan la transacción BC425_## para visualizar la información sobre vuelos cuando ayudan a los clientes. Querrían tener más información sobre un vuelo, como por ejemplo, el nombre del piloto o el menú principal. Los datos de su vuelo se almacenan en la tabla SFLIGHT##. Debe añadir dos columnas a esta tabla sin modificarla realmente. Amplíe tablas mediante estructuras append. 1. Añada dos campos a la tabla SFLIGHT## sin modificarla. 2. Cree su estructura append ZASFLIGHT## para la tabla SFLIGHT## (## es su número de grupo). 3. Brinde los detalles de una estructura append. 4. Seleccione una categoría de ampliación para la estructura append.
© Copyright . Reservados todos los derechos.
23
Capítulo 2 Solución 1 Ampliación de una tabla
Ejemplo empresarial Usted trabaja como técnico informático para una agencia de viajes de gran tamaño. Sus empleados utilizan la transacción BC425_## para visualizar la información sobre vuelos cuando ayudan a los clientes. Querrían tener más información sobre un vuelo, como por ejemplo, el nombre del piloto o el menú principal. Los datos de su vuelo se almacenan en la tabla SFLIGHT##. Debe añadir dos columnas a esta tabla sin modificarla realmente. Amplíe tablas mediante estructuras append. 1. Añada dos campos a la tabla SFLIGHT## sin modificarla. a) Llame el Dictionary ABAP mediante la transacción SE11. O bien, en el Navegador de objetos, seleccione Editar objeto → Editar objetos del Dictionary. b) Indique SFLIGHT## como el nombre de la tabla y seleccione Mostrar. 2. Cree su estructura append ZASFLIGHT## para la tabla SFLIGHT## (## es su número de grupo). a) Seleccione Pasar a → Estructura append o su pulsador correspondiente. b) Indique ZASFLIGHT## como el nombre de la estructura append. c) Introduzca una descripción breve para la estructura append. d) Grábela en el paquete que creó. 3. Brinde los detalles de una estructura append. a) La estructura debe incluir los siguientes campos: Descripción de campo
Nombre del campo
Elemento de datos
Nombre del piloto
YYPILOT
S_PILNAME
Menú
YYMEAL
S_MEAL
4. Seleccione una categoría de ampliación para la estructura append. a) Seleccione Categoría → de ampliación adicional. b) Seleccione el pulsador No es posible ampliar. c) Active la estructura append. Si se produce un error, los detalles se visualizarán en el log de activación.
24
© Copyright . Reservados todos los derechos.
Lección: Ampliación de la tablas con estructuras append e includes de Customizing
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Ampliar tablas mediante estructuras append
●
Ampliar tablas mediante includes de Customizing
© Copyright . Reservados todos los derechos.
25
Capítulo 2 Lección 2 Ampliación de los textos de elementos de datos
RESUMEN DE LA LECCIÓN En este módulo se explica cómo sobrescribir textos suministrados con elementos de datos de SAP con textos específicos de cliente. Ejemplo empresarial Le gustaría adaptar etiquetas de campo y documentación para elementos de datos de SAP con textos específicos de cliente. Por este motivo, se requieren los siguientes conocimientos: ●
Cómo cambiar etiquetas de campo y documentación para elementos de datos de SAP sin llevar a cabo una modificación
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Ampliar textos de elementos de datos
Ampliaciones de texto
Figura 17: Ampliaciones de texto: resumen
Las ampliaciones de texto abarcan etiquetas de campo específicas de cliente y documentación para elementos de datos de SAP. La función de ampliaciones de texto en todas las aplicaciones de SAP que utilizan el elemento de datos determinado. Son ampliaciones globales.
26
© Copyright . Reservados todos los derechos.
Lección: Ampliación de los textos de elementos de datos
Sobrescritura de etiquetas de campo de SAP
Figura 18: Sobrescritura de etiquetas de campo de SAP
Los programadores de aplicaciones de SAP definen etiquetas de campo de distintas longitudes y una descripción breve de cada elemento de datos. Los clientes pueden sobrescribir los textos de etiqueta de campo con textos específicos del cliente. Puede proporcionar nuevas etiquetas de campo para todos los campos de dynpro de esta manera. Requisitos previos para sobrescribir una etiqueta de campo de SAP
Figura 19: Requisitos previos para sobrescribir una etiqueta de campo de SAP
© Copyright . Reservados todos los derechos.
27
Capítulo 2: Ampliación de elementos de diccionario
Puede sobrescribir etiquetas de campo solo para aquellos campos de dynpro para los cuales el desarrollador no ha asignado una descripción. En estos casos, el atributo Dict. modificado del campo de dynpro tiene el valor F. La tabla siguiente muestra los valores que puede tener el atributo Dict. Modified: Valor
Función
ESPACIO
La etiqueta de campo que encaja mejor en la longitud del campo
1
Etiqueta de campo corta
2
Etiqueta de campo media
3
Etiqueta de campo larga
4
Etiqueta de campo para cabecera
V
Transferencia de texto de variable desde el Dictionary (como ESPACIO):
F
Fijo (no hay transferencia de texto desde el Dictionary)
Sobrescritura de etiquetas de campo de SAP: pasos
Figura 20: Sobrescritura de etiquetas de campo de SAP: pasos
La figura muestra el procedimiento para sobrescribir las etiquetas del campo SAP. Para sobrescribir las etiquetas de campo de SAP 1. Editar ampliaciones de texto. a) Seleccione Workbench ABAP → Utilidades → Ampliaciones → Gestión de proyecto. O bien, utilice la transacción CMOD.
28
© Copyright . Reservados todos los derechos.
Lección: Ampliación de los textos de elementos de datos
2. Abra la etiqueta de campo y la ampliación de documentación (sobrescritura) para elementos de datos SAP. a) Seleccione Pasar a → Ampliaciones globales.
Restablecer las etiquetas de campo del cliente
Figura 21: Textos sobrescritos durante upgrades
Si SAP vuelve a entregar etiquetas de campo existentes, tendrá que restablecer sus etiquetas de campo de cliente como parte de un upgrade de release o después de importar nuevas correcciones. Si desea conservar sus propias etiquetas de campo del release anterior, seleccione la opción de menú que restablece las etiquetas de campo de cliente. SAP recomienda restablecer siempre las etiquetas de campo después de realizar un upgrade de release.
© Copyright . Reservados todos los derechos.
29
Capítulo 2: Ampliación de elementos de diccionario
Restablecer las etiquetas de campo de SAP
Figura 22: Restablecimiento de etiquetas de campo de SAP
Para deshacer las modificaciones en etiquetas de campos, seleccione la opción de menú Restablecer SAP. Puede restablecer etiquetas de campo mediante un programa que se ejecuta en proceso de fondo. Este programa verifica todos los elementos de datos que ha editado y restablece sus etiquetas de campo en caso necesario. Para las etiquetas de campo principales, como los elementos de datos BUKRS, MANDT, etc., comience a restablecer cuando los contenidos de las tablas que utilizan BUKRS y MANDT no se estén modificando.
Documentación ampliada para elementos de datos
Figura 23: Documentación ampliada para elementos de datos
30
© Copyright . Reservados todos los derechos.
Lección: Ampliación de los textos de elementos de datos
Cuando se amplía la documentación del elemento de datos, se puede copiar la documentación de SAP como propia. En este caso, cuando presiona F1 para el campo de dynpro correspondiente, el sistema visualizará la documentación de SAP y la documentación específica del cliente. Se puede generar una lista de los elementos de datos modificados y editar la documentación de cliente al seleccionar las líneas correspondientes a los elementos. Si desea visualizar la documentación original de SAP, borre su documentación. Creación de la documentación del cliente
Figura 24: Creación de documentación de cliente
Cuando selecciona la ruta de menú que se muestra en la figura, se abre un cuadro de diálogo donde debe seleccionar una de las opciones, Texto original o Modelo. Seleccione la opción Texto original para añadir más texto a la documentación de SAP. Seleccione la opción Modelo para crear documentación específica del cliente sin el texto de la documentación de SAP. RESUMEN DE LA LECCIÓN Ahora podrá: ●
Ampliar textos de elementos de datos
© Copyright . Reservados todos los derechos.
31
Capítulo 2: Ampliación de elementos de diccionario
32
© Copyright . Reservados todos los derechos.
Capítulo 2 Evaluación de la formación
1. ¿Cuáles de las siguientes características de las estructuras append le permiten ampliar tablas? Seleccione las respuestas correctas. X
A Puede utilizar múltiples estructuras append con una sola tabla SAP.
X
B Puede utilizar las estructuras append como estructuras normales en los programas.
X
C Puede utilizar estructuras append en varias tablas.
X
D Los clientes pueden crear una estructura append para una tabla SAP sin preparación por parte de SAP.
2. ¿Cuáles de las siguientes características de los includes de Customizing le permiten ampliar tablas? Seleccione las respuestas correctas. X
A Algunos includes de Customizing ya vienen integrados en las tablas de SAP.
X
B Los includes de Customizing pueden contener código fuente o exits de dynpro facilitados por SAP para procesar o visualizar los campos de la tabla.
X
C Los includes de Customizing pueden utilizarse para crear tablas pool y cluster.
X
D Los includes de Customizing garantizan la coherencia en todas las tablas y estructuras afectadas.
3. De las siguientes opciones, ¿cuál debe modificarse para ampliar textos de los elementos de datos? Seleccione las respuestas correctas. X
A Estructuras append
X
B Elementos de datos
X
C Etiquetas de campo
X
D Documentación
© Copyright . Reservados todos los derechos.
33
Capítulo 2 Respuestas a la Evaluación de la formación
1. ¿Cuáles de las siguientes características de las estructuras append le permiten ampliar tablas? Seleccione las respuestas correctas. X
A Puede utilizar múltiples estructuras append con una sola tabla SAP.
X
B Puede utilizar las estructuras append como estructuras normales en los programas.
X
C Puede utilizar estructuras append en varias tablas.
X
D Los clientes pueden crear una estructura append para una tabla SAP sin preparación por parte de SAP.
2. ¿Cuáles de las siguientes características de los includes de Customizing le permiten ampliar tablas? Seleccione las respuestas correctas. X
A Algunos includes de Customizing ya vienen integrados en las tablas de SAP.
X
B Los includes de Customizing pueden contener código fuente o exits de dynpro facilitados por SAP para procesar o visualizar los campos de la tabla.
X
C Los includes de Customizing pueden utilizarse para crear tablas pool y cluster.
X
D Los includes de Customizing garantizan la coherencia en todas las tablas y estructuras afectadas.
3. De las siguientes opciones, ¿cuál debe modificarse para ampliar textos de los elementos de datos? Seleccione las respuestas correctas.
34
X
A Estructuras append
X
B Elementos de datos
X
C Etiquetas de campo
X
D Documentación
© Copyright . Reservados todos los derechos.
CAPÍTULO 3
Exits de cliente
Lección 1 Manejo de proyectos de ampliación
36
Lección 2 Ampliación de programas con exits de programa Ejercicio 2: Implementación de un exit de cliente: exit de programa
44 57
Lección 3 Ampliación de menús con exits de menú Ejercicio 3: Implementación de un exit de cliente: exit de menú
61 65
Lección 4 Ampliación de dynpros con exits de dynpro Ejercicio 4: Implementación de un exit de cliente: exit de dynpro
69 77
OBJETIVOS DEL CAPÍTULO ●
Gestionar proyectos de ampliación
●
Crear proyectos de ampliación
●
Manejo de exits de programa
●
Implementar grupos de función de exit
●
Ampliar menús mediante exits de menú
●
Ampliar dynpros con exits de dynpro
© Copyright . Reservados todos los derechos.
35
Capítulo 3 Lección 1 Manejo de proyectos de ampliación
RESUMEN DE LA LECCIÓN En este módulo se explican los aspectos fundamentales de un proyecto de ampliación que se debe usar para implementar exits de cliente existentes. Ejemplo empresarial Desea conocer el principio de proyecto de ampliación en el entorno de exit de cliente. Por este motivo, se requieren los siguientes conocimientos: ●
Una buena comprensión de cómo crear, activar y desactivar un proyecto de ampliación
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Gestionar proyectos de ampliación
●
Crear proyectos de ampliación
Gestión de ampliaciones
Figura 25: Ampliaciones de aplicación de SAP
Las ampliaciones de aplicación permiten a los clientes ampliar sus funciones de aplicación. SAP planifica los exits de cliente previamente, lo cual generalmente está compuesto por varios componentes. Las ampliaciones de aplicación son inactivas cuando se entregan, y el cliente las completa y activa cuando es necesario.
36
© Copyright . Reservados todos los derechos.
Lección: Manejo de proyectos de ampliación
Estas son las características de una ampliación de aplicación: Cada ampliación proporciona un conjunto de funciones definidas con precisión y planificadas previamente.
●
●
La interfaz entre las funciones del cliente y SAP está definida con claridad.
●
Los clientes no necesitan saber cómo se implementan las aplicaciones SAP.
●
Los clientes no necesitan ajustar las ampliaciones durante un upgrade debido a nuevas funciones desarrolladas por SAP.
Proyectos de ampliación del cliente
Figura 26: Proyectos de ampliación del cliente
Los programadores de las aplicaciones de SAP crean ampliaciones de SAP a partir de exits de programa, de menú y de dynpro. Para tal fin, el sistema proporciona una función de administración (código de transacción SMOD). Se proporciona a los clientes un catálogo que contiene un resumen de las ampliaciones SAP existentes. Ellos pueden combinar las ampliaciones de SAP que quieran en un proyecto de ampliación mediante la transacción CMOD. Ampliaciones y proyectos de ampliación
Figura 27: Ampliaciones y proyectos de ampliación
© Copyright . Reservados todos los derechos.
37
Capítulo 3: Exits de cliente
Las ampliaciones de SAP están integradas por piezas de componentes. Estos componentes incluyen exits de programa, exits de menú y exits de dynpro. Un componente específico puede asignarse a solo una ampliación de SAP. Esto garantiza que las ampliaciones de SAP sean únicas. SAP combina todos los componentes que pertenecen a una ampliación determinada. Los proyectos de ampliación de cliente están formados por ampliaciones de SAP. Puede utilizar cada ampliación de SAP individual solo una vez en un proyecto de ampliación de cliente. Esto garantiza que el proyecto de cliente sea único. El cliente debe editar las ampliaciones que se activarán juntas dentro de un proyecto de ampliación. Exits de cliente: gestión de ampliaciones
Figura 28: Procedimiento de creación de ampliación de SAP
Los siguientes pasos detallan el procedimiento para crear la ampliación de SAP: 1. Los programadores de la aplicación SAP planifican las posibles ampliaciones en una aplicación y definen los componentes necesarios. 2. El programador de aplicaciones combina estos componentes en las ampliaciones de SAP. 3. Los programadores documentan sus ampliaciones lo mejor que pueden de modo que los clientes puedan implementar las ampliaciones sin necesidad de analizar el código fuente del programa o el código fuente de dynpro.
38
© Copyright . Reservados todos los derechos.
Lección: Manejo de proyectos de ampliación
Procedimiento en la sede del cliente
Figura 29: Procedimiento en la sede del cliente
El procedimiento general para las ampliaciones en las instalaciones de cliente se describe a continuación: 1. Cree un proyecto de ampliación. 2. Seleccione las ampliaciones SAP que desea utilizar. 3. Edite sus componentes individuales mediante la función Gestión de proyecto. 4. Documente todo el proyecto de ampliación. 5. Active el proyecto de ampliación. Esto activa todas las piezas de componentes del proyecto.
© Copyright . Reservados todos los derechos.
39
Capítulo 3: Exits de cliente
Proyectos de ampliación del cliente
Figura 30: Creación de un proyecto de ampliación del cliente
Para crear un proyecto de ampliación del cliente, siga estos pasos: 1. Ejecute el código de transacción CMOD para iniciar la función Gestión de proyecto. 2. Asigne un nombre a su proyecto de ampliación. SAP le recomienda diseñar una convención para fijar nombres para todos sus proyectos. Por ejemplo, puede incluir el nombre de la transacción o el modulpool del proyecto en el nombre del proyecto. El nombre del proyecto identifica de forma exclusiva la ampliación en el sistema. 3. Acceda a los atributos del proyecto e introduzca un texto breve que describa el proyecto de ampliación. El sistema introduce los demás atributos (status, sello con el nombre y cronomarcador) para registrar la creación y modificación de detalles.
40
© Copyright . Reservados todos los derechos.
Lección: Manejo de proyectos de ampliación
Asignación de ampliaciones de SAP a proyectos del cliente
Figura 31: Asignación de ampliaciones de SAP a proyectos del cliente
Puede utilizar la función de Gestión de proyecto para asignar ampliaciones de SAP a proyectos de ampliación del cliente. Introduzca los nombres de las ampliaciones de SAP que desea utilizar en la pantalla adecuada. La función de búsqueda le ofrece una vista tipo catálogo de las ampliaciones de SAP actuales. A partir de ahí, puede seleccionar sus ampliaciones deseadas. Edición de componentes
Figura 32: Edición de componentes
Puede utilizar la función de Gestión de producto para editar los componentes del proyecto de ampliación.
© Copyright . Reservados todos los derechos.
41
Capítulo 3: Exits de cliente
En función de si el componente que está editando es un módulo de funciones, una opción de menú o una subscreen, pasará a Function Builder (una ventana de diálogo para introducir opciones de menú) o a Screen Painter. Activación de proyectos de ampliación
Figura 33: Active los proyectos de ampliación
La activación de un proyecto de ampliación afecta a todos sus componentes. Luego de la activación satisfactoria, el proyecto tiene el status activo. Durante la activación, el sistema vuelve a generar todos los programas, dynpros y menús con componentes que pertenecen al proyecto. Tenga en cuenta que el sistema volverá a generar programas al momento de la ejecución. Después de la activación, puede observar el efecto de las ampliaciones en sus funciones de aplicación. La función Desactivar le permite reiniciar el status de un proyecto de ampliación activo a inactivo. Transporte de proyectos
Figura 34: Transporte de proyectos
Cada vez que cree un proyecto de ampliación, debe asignarlo a una orden de modificación. Cada uno de los objetos de Repository relacionados, como programas, subscreens, exits de menú, etc., deberían asignarse a la misma orden de modificación.
42
© Copyright . Reservados todos los derechos.
Lección: Manejo de proyectos de ampliación
Puede transportar toda la ampliación al mismo tiempo utilizando la misma orden de modificación. RESUMEN DE LA LECCIÓN Ahora podrá: ●
Gestionar proyectos de ampliación
●
Crear proyectos de ampliación
© Copyright . Reservados todos los derechos.
43
Capítulo 3 Lección 2 Ampliación de programas con exits de programa
RESUMEN DE LA LECCIÓN En este módulo se explica cómo funciona un exit de programa y cómo se implementa mediante un exit de cliente. También se detallan los usos posibles de un exit de programa. Ejemplo empresarial Necesita buscar exits de programa que se implementan mediante exits de cliente y usarlos para ampliar las funciones. Por este motivo, se requieren los siguientes conocimientos: ●
Una buena comprensión de cómo buscar exits de programa
●
Una buena comprensión de cómo utilizar exits de programa para ampliar las funciones
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Manejo de exits de programa
●
Implementar grupos de función de exit
Exits de programa
Figura 35: Resumen de exits de programa
Los exits de programa permiten a los clientes implementar lógica adicional en funciones adicionales. Los programadores de aplicaciones de SAP definen el lugar en el que se insertan los exits de módulo de programa y qué tipo de datos pueden transferir estos exits de módulo.
44
© Copyright . Reservados todos los derechos.
Lección: Ampliación de programas con exits de programa
Los programadores de SAP también crean los módulos de función correspondientes para un exit, que se completan con texto breve, interfaz y documentación. La documentación de los módulos de función también describe el propósito previsto de cada exit de programa. Usted escribe el código fuente de los módulos de funciones en el Function Builder. Si es necesario, también debe crear pantallas, elementos de texto e Includes dentro del grupo de funciones. El sistema procesa su código ABAP por primera vez cuando se activa como un todo el proyecto de ampliación (del cual su módulo de funciones es un componente). Los exits de programa no producen ningún impacto hasta que se activa el proyecto de ampliación. Exits de programa: arquitectura
Figura 36: Exits de programa: arquitectura
La figura muestra el flujo de un programa que proporciona una ampliación en forma de exit de programa. El módulo de funciones de exit se llama en un punto predefinido del código fuente. El desarrollador de aplicaciones de SAP define este punto. Dentro del módulo de función, la codificación en el área de nombre del cliente se llama utilizando un programa de Include.
© Copyright . Reservados todos los derechos.
45
Capítulo 3: Exits de cliente
Exits de programa: sintaxis
Figura 37: Exits de programa: sintaxis
Los programadores de aplicaciones de SAP definen la llamada del módulo de funciones mediante la sentencia ABAP CALL CUSTOMER-FUNCTION 'NNN', donde 'NNN' es un número de tres dígitos. Los programadores de aplicaciones de SAP crean también el grupo de funciones y el módulo de funciones correspondientes. Estos módulos de funciones siempre pertenecen a grupos de funciones cuyos nombres empiezan por X, es decir, el grupo de funciones X. En la tabla siguiente se detalla la convención para fijar nombres que se aplica en los módulos de funciones: Prefijo
EXIT
Infijo
Nombre del programa que llama el módulo de funciones
Sufijo
Número de tres dígitos
Las tres partes del nombre están separadas por un carácter de subrayado. La sentencia CALL CUSTOMER-FUNCTION solo se ejecuta cuando se activa el proyecto de ampliación. Si se llama varias veces el mismo módulo de funciones, la activación será válida para todas las llamadas.
46
© Copyright . Reservados todos los derechos.
Lección: Ampliación de programas con exits de programa
Búsqueda de exits de programa
Figura 38: Búsqueda de exits de programa
La pregunta más frecuente sobre ampliaciones es “¿cómo puedo determinar si un programa de aplicación ofrece un exit de programa?” Se trata de una cuestión central para todo tipo de ampliaciones. Existen diferentes formas de encontrar una respuesta a esta pregunta. Puede utilizar las siguientes maneras para determinar si un programa de aplicación ofrece un exit de programa: ● Busque dentro de un programa de diálogo individual durante la ejecución. Seleccione Sistema → Status. El sistema muestra un cuadro de diálogo que contiene el nombre del programa de aplicación. Por ejemplo, un string de caracteres adecuado sería "CALL CUSTOMER". Utilice el pulsador Buscar para buscar el string de manera global en el programa. Si no tiene éxito con su búsqueda, puede ampliar el dominio de la búsqueda. Para ello, ejecute un análisis del entorno para el programa correspondiente y busque el string de caracteres específico en el entorno del programa. ●
Utilice las herramientas de búsqueda. En el lado derecho del gráfico, puede ver cómo puede buscar el nombre de la ampliación necesaria mediante herramientas de búsqueda. Puede delimitar la búsqueda en el Sistema de Información del Repository con los siguientes criterios: -
Package (intente también entradas genéricas)
-
Nombre técnico de la ampliación
© Copyright . Reservados todos los derechos.
47
Capítulo 3: Exits de cliente
Edición de exits de programa
Figura 39: Edición de exits de programa
La figura muestra cómo se editan los módulos de función para los exits de programa. Para editar exits de programa Los pasos para editar exits de programa son los siguientes: 1. Ejecute la transacción CMOD para utilizar la función Gestión de proyecto. 2. Utilice el botón de selección para editar componentes y acceder directamente al editor de módulos de funciones. Asegúrese de que el editor se encuentre en modo de visualización. Nota: No modifique el módulo de funciones, especialmente la interfaz. El módulo de funciones contiene una sentencia INCLUDE para un programa Include que crea en el área de nombres de cliente. 3. Haga doble clic en el objeto (programa de include). Esto crea y abre el programa de Include en el editor, donde puede indicar el código fuente.
48
© Copyright . Reservados todos los derechos.
Lección: Ampliación de programas con exits de programa
Estructura de un grupo de funciones
Figura 40: Estructura de un grupo de funciones
Para utilizar un grupo de funciones X, debe entender cómo se organiza un grupo de funciones normal. Un grupo de funciones está compuesto por un programa principal (de la clase grupo de función) e Includes. El sistema asigna nombres exclusivos a includes de distintos objetos. Algunos de los nombres de include son simples propuestas y otros no se pueden modificar. El Include TOP almacena datos globales y se genera de manera automática cuando se crea un grupo de funciones. Los módulos de función se almacenan en Includes con numeración secuencial. Los Includes, a la vez, se almacenan todos en un include que finaliza con UXX.
Nota: Aunque puede elegir libremente los nombres de los includes para todos los demás objetos (subrutinas, módulos, eventos, etc.), se recomienda aceptar los nombres propuestos.
© Copyright . Reservados todos los derechos.
49
Capítulo 3: Exits de cliente
Estructura de un grupo de funciones de exit
Figura 41: Estructura de un grupo de funciones de exit
Un programador de aplicaciones SAP crea grupos de función de exit para los exits de ampliación. Estos grupos de función de exit están compuestos por programas de Include que comienzan con LX o ZX. Solo puede editar los includes que empiecen por Z, porque son los que se almacenan en el área de nombres de cliente. No puede añadir más módulos de función a un grupo de funciones. Los programas de Include ZXAAAUNN incluyen el código fuente del cliente para los módulos de funciones de un exit de módulo de funciones. Datos globales de un grupo de funciones de exit
Figura 42: Datos globales de un grupo de funciones de exit
Los programadores de aplicaciones de SAP pueden declarar datos globales en el programa de Include LXAAATAP. Puede declarar sus datos globales en el programa de Include ZXAAATOP.
50
© Copyright . Reservados todos los derechos.
Lección: Ampliación de programas con exits de programa
El programa de Include LXAAATOP contiene además la sentencia FUNCTION-POOL, que no se puede modificar. En consecuencia, incluya siempre la clase de mensaje entre paréntesis mientras se visualizan los mensajes: por ejemplo, MESSAGE E500(EU). Bloques de procesamiento específicos de cliente
Figura 43: Bloques de procesamiento específicos de cliente
La sentencia INCLUDE del Include ZXAAAUNN se encuentra en un bloque FUNCTION -ENDFUNCTION. Esto significa que no se permiten eventos, subrutinas (FORM) ni módulos (MODULE) dentro de este Include (es decir, en el bloque FUNCTION-ENDFUNCTION). Necesita crearlos en Includes diferentes. Las declaraciones de datos realizadas aquí con la sentencia DATA son válidas localmente en este módulo de funciones. Un programador de aplicaciones de SAP también puede hacer una propuesta para el código fuente. En tal caso, el sistema crea INCLUDE LXAAFNN, donde "NN" es el número interno del módulo de funciones del Include LXAAAUXX. El sistema proporciona documentación en la ampliación de SAP. Puede copiar el código fuente de este Include en su programa de Include de cliente ZXAAAUNN mediante la transacción Gestión de proyectos. Puede crear sus propios elementos de texto para el grupo de funciones.
© Copyright . Reservados todos los derechos.
51
Capítulo 3: Exits de cliente
Otros objetos SAP en un grupo de funciones de exit
Figura 44: Otros objetos SAP en un grupo de funciones de exit
Los programadores de aplicaciones de SAP pueden brindar subrutinas predeterminadas en el include LXAAAF01. La tabla siguiente detalla los Includes adicionales que contienen subobjetos específicos:
52
Includes
Subobjetos específicos
LX...F01
Subrutinas ofrecidas por SAP
LX...E01
Los eventos que pertenecen al grupo de funciones X
LX...O01
Módulos de proceso antes de la salida (PBO) para las pantallas que se entregarán
LX...I01
Los módulos de proceso después de la entrada (PAI) correspondientes
© Copyright . Reservados todos los derechos.
Lección: Ampliación de programas con exits de programa
Objetos de cliente en un grupo de funciones de exit
Figura 45: Objetos de cliente en un grupo de funciones de exit
El código para las subrutinas personalizadas, los módulos y los eventos interactivos dentro de un grupo de funciones X se organizar en programas de Include diferentes que, a la vez, se incluyen en el programa de Include ZXAAAZZZ. Los demás includes deben respetar la siguiente convención para fijar nombres: Includes
Subobjetos específicos
ZXAAAFNN
Subrutinas
ZXAAAONN
Módulos PBO
ZXAAAINN
Módulos PAI
ZXAAAENN
Eventos
© Copyright . Reservados todos los derechos.
53
Capítulo 3: Exits de cliente
Pantallas de cliente
Figura 46: Pantallas de cliente
Puede usar CALL SCREEN para llamar sus pantallas. Cree los programas de Include relacionados para los módulos PBO y PAI en el programa de Include ZXAAAZZZ. Utilice la navegación hacia adelante (haga doble clic en un objeto) para crear sus pantallas y módulos. Sus pantallas están asignadas al grupo de función X (programa SAPLXAAA). Los módulos PBO y PAI se codifican en los Includes ZXAAAOnn y ZXAAAInn que nuevamente deben incluirse en ZXAAAZZZ.
Exit de programa y grupo de funciones de exit
Figura 47: Resumen: exits de programa
54
© Copyright . Reservados todos los derechos.
Lección: Ampliación de programas con exits de programa
Puede ampliar las aplicaciones de SAP añadiendo su lógica de procesamiento en puntos predefinidos. Estas ampliaciones pueden incluir los siguientes elementos: ● Sus pantallas con la lógica de procesamiento correspondiente ●
Interfaz gráfica de usuario
●
Elementos de texto creados por los clientes
© Copyright . Reservados todos los derechos.
55
Capítulo 3: Exits de cliente
56
© Copyright . Reservados todos los derechos.
Capítulo 3 Ejercicio 2 Implementación de un exit de cliente: exit de programa
Ejemplo empresarial Sus compañeros de trabajo le han pedido que modifique la transacción BC425_## de modo que cada vez que intenten visualizar los detalles de un vuelo en una fecha pasada aparezca un mensaje de advertencia. Ajuste el programa de forma que aparezca un mensaje de advertencia cuando seleccione un vuelo de una fecha pasada. No modifique el programa SAP. Implemente una ampliación mediante un exit de programa. Tarea 1 Compruebe si es posible ampliar la transacción. 1. ¿Ha implementado el desarrollador de SAP un exit de cliente para la transacción en cuestión que se pueda usar para añadir las funciones necesarias? 2. ¿Cómo se llama la ampliación correspondiente? Seleccione la ampliación con la que podrá implementar una comprobación adicional cuando abandone la primera pantalla de la transacción. Tarea 2 Implemente la ampliación y verifique sus resultados. 1. Asigne el nombre TG##CUS1 al proyecto de ampliación. 2. Programe la comprobación siguiente: Determine si la fecha que indicó es anterior a la fecha actual. En caso afirmativo, emita una advertencia correspondiente. Para ello, use el mensaje 011 de la clase de mensaje BC425. 3. Verifique los resultados.
© Copyright . Reservados todos los derechos.
57
Capítulo 3 Solución 2 Implementación de un exit de cliente: exit de programa
Ejemplo empresarial Sus compañeros de trabajo le han pedido que modifique la transacción BC425_## de modo que cada vez que intenten visualizar los detalles de un vuelo en una fecha pasada aparezca un mensaje de advertencia. Ajuste el programa de forma que aparezca un mensaje de advertencia cuando seleccione un vuelo de una fecha pasada. No modifique el programa SAP. Implemente una ampliación mediante un exit de programa. Tarea 1 Compruebe si es posible ampliar la transacción. 1. ¿Ha implementado el desarrollador de SAP un exit de cliente para la transacción en cuestión que se pueda usar para añadir las funciones necesarias? a) Seleccione Sistema → Status. Puede ver el nombre del programa correspondiente SAPBC425_FLIGHT##. 2. ¿Cómo se llama la ampliación correspondiente? Seleccione la ampliación con la que podrá implementar una comprobación adicional cuando abandone la primera pantalla de la transacción. a) Encuentre un exit de cliente. Puede buscar el string de caracteres CALL CUSTOMER–FUNCTION globalmente en el programa principal o usar el sistema info Repository para buscar ampliaciones que contengan el nombre del programa en el nombre técnico del componente (restrinja la búsqueda con EXIT_SAPBC425_FLIGHT##_* en el nombre del componente). La ampliación que está buscando tiene el nombre SBC##E01. La documentación para la ampliación muestra que se ha previsto para comprobaciones adicionales en la primera pantalla de la transacción. Tarea 2 Implemente la ampliación y verifique sus resultados. 1. Asigne el nombre TG##CUS1 al proyecto de ampliación. a) Ejecute la transacción CMOD. b) Seleccione Herramientas → Workbench ABAP → Utilidades → Ampliaciones → Gestión de proyectos. c) Cree un proyecto con el nombre TG##CUS1 y grábelo.
58
© Copyright . Reservados todos los derechos.
Lección: Ampliación de programas con exits de programa
2. Programe la comprobación siguiente: Determine si la fecha que indicó es anterior a la fecha actual. En caso afirmativo, emita una advertencia correspondiente. Para ello, use el mensaje 011 de la clase de mensaje BC425. a) Incluya la ampliación SBC##E01, que encontró en su proyecto. 3. Verifique los resultados. a) Edite los componentes. Abra el código fuente del módulo de función de exit y haga doble clic para crear el Include. El código fuente que crea podría ser similar a: IF flight–fldate < sy–datum. MESSAGE w011(bc425) WITH sy–datum. ENDIF. b) Active el Include. c) Vuelva a la Gestión de proyectos y active el proyecto de ampliación.
© Copyright . Reservados todos los derechos.
59
Capítulo 3: Exits de cliente
RESUMEN DE LA LECCIÓN Ahora podrá:
60
●
Manejo de exits de programa
●
Implementar grupos de función de exit
© Copyright . Reservados todos los derechos.
Capítulo 3 Lección 3 Ampliación de menús con exits de menú
RESUMEN DE LA LECCIÓN En este módulo se explica cómo se implementan los exits de menú. Ejemplo empresarial Necesita buscar y usar exits de menú implementados mediante exits de cliente. Por este motivo, se requieren los siguientes conocimientos: ●
Una buena comprensión de cómo funcionan los exits de menú implementados mediante exits de cliente.
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Ampliar menús mediante exits de menú
Exits de menú
Figura 48: Resumen de exits de menú
Los exits de menú le permiten añadir sus funciones a las opciones de menú en menús de SAP. Para tal fin, los programadores de aplicaciones SAP reservan ciertas opciones de menú en la interfaz de usuario gráfica (GUI). Puede especificar el texto de entrada para sus funciones en las opciones de menú.
© Copyright . Reservados todos los derechos.
61
Capítulo 3: Exits de cliente
Las opciones de menú se hacen visibles en el menú de SAP solo después de activar los exits de menú. Cuando seleccione la opción de menú correspondiente, la aplicación de SAP llama un exit de programa que contenga las funciones específicas de cliente. Necesidades de exit de menú
Figura 49: Necesidades de exit de menú
Para proporcionar exits de menú, los programadores de la aplicación SAP deben suministrar códigos de función que comiencen con el signo más (+) para la GUI. Estos códigos de función se encuentran inactivos y no aparecen en el GUI hasta que los activa en un proyecto de ampliación. Exits de menú y exits de programa
Figura 50: Exits de menú y exits de programa
62
© Copyright . Reservados todos los derechos.
Lección: Ampliación de menús con exits de menú
Los programadores de aplicaciones SAP determinan dónde lee un programa los códigos de función adicionales y cómo reacciona. Para ello utilizan un exit de programa o una función predefinida. Asignación de nombres y edición de exits de menú
Figura 51: Asignación de nombres y edición de exits de menú
Puede editar los exits de menú mediante la transacción CMOD para la Gestión de proyecto. Si selecciona el pulsador para editar componentes (representado con un icono de lápiz), aparece un cuadro de diálogo. Puede indicar descripciones breves dependientes del idioma para cada opción de menú adicional aquí. No puede realizar ninguna modificación en la GUI.
© Copyright . Reservados todos los derechos.
63
Capítulo 3: Exits de cliente
64
© Copyright . Reservados todos los derechos.
Capítulo 3 Ejercicio 3 Implementación de un exit de cliente: exit de menú
Ejemplo empresarial Los nuevos mensajes de advertencia en la transacción BC425_## ayudan a sus colegas a evitar seleccionar vuelos de fechas pasadas. Sin embargo, quieren más. Desean crear un enlace en la transacción que utilizan para visualizar los vuelos. El enlace les permitirá mostrar una lista de reservas de sus vuelos actuales desde la transacción de visualización de vuelos. Siempre ha utilizado un programa adecuado que genera listas. Sin embargo, los usuarios deben llamarlo por separado e indicar los datos actuales en el dynpro de selección del programa que se denomina SAPBC425_BOOKING_##. Implementar una ampliación con un exit de menú en combinación con un exit de programa. Tarea 1 Examine la transacción BC425_##. ¿Es posible llamar el programa con una opción de menú en la transacción? 1. ¿Ha implementado el desarrollador de SAP un exit de cliente que pueda usar para añadir las funciones necesarias para la transacción en cuestión? 2. ¿Cómo se llama la ampliación correspondiente? Seleccione la ampliación que le permita implementar una ampliación de menú. Tarea 2 Implemente la ampliación y verifique sus resultados. 1. Asigne el nombre TG##CUS2 al proyecto de ampliación. 2. Edite los componentes de la ampliación que encontró. Use la entrada del menú complementario para llamar el programa SAP425_BOOKING_##. Asegúrese de que el usuario pueda regresar a la lista de vuelos. 3. Transfiera los datos de transacción actuales a la imagen de selección del programa que desee llamar. Para ello, use los datos disponibles en el exit de programa.
© Copyright . Reservados todos los derechos.
65
Capítulo 3 Solución 3 Implementación de un exit de cliente: exit de menú
Ejemplo empresarial Los nuevos mensajes de advertencia en la transacción BC425_## ayudan a sus colegas a evitar seleccionar vuelos de fechas pasadas. Sin embargo, quieren más. Desean crear un enlace en la transacción que utilizan para visualizar los vuelos. El enlace les permitirá mostrar una lista de reservas de sus vuelos actuales desde la transacción de visualización de vuelos. Siempre ha utilizado un programa adecuado que genera listas. Sin embargo, los usuarios deben llamarlo por separado e indicar los datos actuales en el dynpro de selección del programa que se denomina SAPBC425_BOOKING_##. Implementar una ampliación con un exit de menú en combinación con un exit de programa. Tarea 1 Examine la transacción BC425_##. ¿Es posible llamar el programa con una opción de menú en la transacción? 1. ¿Ha implementado el desarrollador de SAP un exit de cliente que pueda usar para añadir las funciones necesarias para la transacción en cuestión? a) Busque una ampliación con un componente cuyo nombre contenga el nombre del programa (delimite la búsqueda mediante el nombre de componente SAPBC425_FLIGHT##*). 2. ¿Cómo se llama la ampliación correspondiente? Seleccione la ampliación que le permita implementar una ampliación de menú. a) El nombre de la ampliación es SBC##E02. Tarea 2 Implemente la ampliación y verifique sus resultados. 1. Asigne el nombre TG##CUS2 al proyecto de ampliación. a) Ejecute la transacción CMOD. b) Seleccione Herramientas → Workbench ABAP → Utilidades → Ampliaciones → Gestión de proyectos. c) Indique TG##CUS2 en el campo Proyecto y grábelo. 2. Edite los componentes de la ampliación que encontró. Use la entrada del menú complementario para llamar el programa SAP425_BOOKING_##. Asegúrese de que el usuario pueda regresar a la lista de vuelos. a) Incluya la ampliación SBC##E02, que encontró en su proyecto. b) Edite los componentes de la ampliación.
66
© Copyright . Reservados todos los derechos.
Lección: Ampliación de menús con exits de menú
c) Asigne un texto de menú. d) Haga doble clic en el exit de programa para editarlo. e) Cree el Include de cliente mediante la navegación hacia delante. 3. Transfiera los datos de transacción actuales a la imagen de selección del programa que desee llamar. Para ello, use los datos disponibles en el exit de programa. a) El texto fuente del include del grupo ## debería ser el siguiente: SUBMIT sapbc_425_booking_## WITH so_car = flight–carrid WITH so_con = flight–connid WITH so_fld = flight–fldate AND RETURN. b) Active su programa de include. c) Active el proyecto de ampliación. d) Verifique los resultados.
© Copyright . Reservados todos los derechos.
67
Capítulo 3: Exits de cliente
RESUMEN DE LA LECCIÓN Ahora podrá: ●
68
Ampliar menús mediante exits de menú
© Copyright . Reservados todos los derechos.
Capítulo 3 Lección 4 Ampliación de dynpros con exits de dynpro
RESUMEN DE LA LECCIÓN En este módulo se explica cómo buscar un exit de dynpro que se implementa mediante un exit de cliente. Ejemplo empresarial Necesita buscar y usar exits de dynpro disponibles en la versión estándar del sistema SAP. Por este motivo, se requieren los siguientes conocimientos: ●
Una buena comprensión de cómo buscar y usar exits de dynpro implementados mediante exits de cliente.
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Ampliar dynpros con exits de dynpro
Exits de dynpro
Figura 52: Resumen de exits de dynpro
Los exits de dynpro le permiten utilizar secciones reservadas de un dynpro principal. Estas secciones reservadas son áreas de subscreen. Puede visualizar la información adicional o los datos introducidos en estas áreas de subscreen. Puede definir los campos de entrada y de salida necesarios en un dynpro de cliente mediante un subscreen.
© Copyright . Reservados todos los derechos.
69
Capítulo 3: Exits de cliente
Subscreens en general
Figura 53: Subscreens en general
Las áreas de subscreen son áreas rectangulares del dynpro que el sistema reserva para mostrar dynpros adicionales en el tiempo de ejecución. Una llamada de subscreen normal
Figura 54: Llamada de subscreen normal
El sistema determina qué dynpro se debe visualizar en un área de subscreen en un evento de Proceso antes de la salida (PBO). La sintaxis general para llamar un dynpro normal es el siguiente: CALL SUBSCREEN
INCLUDING Para cada subscreen, los eventos de Proceso después de la entrada (PAI) y de PBO se procesan tal como en los dynpros normales.
70
© Copyright . Reservados todos los derechos.
Lección: Ampliación de dynpros con exits de dynpro
La secuencia de llamadas "CALL SUBSCREEN" de la lógica de proceso del dynpro principal determina la secuencia en que el sistema procesa la lógica de flujo de los subscreens individuales. Recuerde los siguientes puntos cuando llama un subscreen normal: Puede procesar el código de función solo mediante el dynpro principal.
●
●
No puede indicar un nombre para el campo de comando de un subscreen.
●
No puede definir statuss de GUI para los subscreens.
●
No puede indicar ningún valor para el dynpro siguiente en el control de flujo de un subscreen.
Definición de exits de dynpro
Figura 55: Definición de exits de dynpro
Un programador de aplicaciones de SAP puede reservar varias áreas de subscreen para un dynpro. Por lo general, SAP define los exits de dynpro. Anote los siguientes puntos: Se llama el subscreen durante el control del flujo del dynpro principal con la sentencia CALL CUSTOMER-SUBSCREEN.
●
●
●
El nombre del área subscreen se define sin apóstrofes. El grupo de funciones al cual pertenece el subscreen se define de manera estática en apóstrofes. Sin embargo, la variable de número de dynpro puede mantenerse utilizando variables de programa que actúan como marcador de posición para los números de dynpro. Una variable de programa siempre debe tener cuatro lugares.
Las llamadas de exit de dynpro son inactivas en un principio. Cuando el dynpro se procesa, el sistema se salta los exits de dynpro. El sistema procesa el exit de dynpro únicamente después de haber creado un subscreen correspondiente en un proyecto de ampliación y de haber activado este proyecto.
© Copyright . Reservados todos los derechos.
71
Capítulo 3: Exits de cliente
Las subscreens se crean en grupos de funciones X para los exits de dynpro. Normalmente, estos grupos de funciones también incluyen exits de programa. Llamada de subscreens de cliente
Figura 56: Llamada de subscreens de cliente
El sistema incluye un subscreen en el área de subscreen que el programador de la aplicación de SAP define siempre que la sentencia CALL CUSTOMER-SUBSCREEN INCLUDING se produzca en el PBO en el control de flujo de un dynpro. En este momento, el sistema procesa todos los módulos que se llaman durante el evento de PBO del subscreen. El evento PAI de una subscreen se procesa cuando el dynpro llama el subscreen durante su evento PAI. Para procesar el evento PAI de un subscreen, el sistema utiliza la sentencia CALL CUSTOMERSUBSCREEN .
72
© Copyright . Reservados todos los derechos.
Lección: Ampliación de dynpros con exits de dynpro
Transporte de datos a subscreens
Figura 57: Transporte de datos a subscreens
El grupo de funciones X que contiene su subscreen no conoce los datos globales del programa de llamada. Por lo tanto, los programadores de SAP usan exits de programa para brindar estos datos de forma explícita a los subscreens. A fin de facilitar el transporte de datos, el sistema llama los módulos del control de flujo del programa de llamada que contienen exits de programa para transferir datos mediante parámetros de interfaz. Los módulos de funciones de exit correspondientes están en el mismo grupo de funciones X en el que se crea la subscreen de cliente.
© Copyright . Reservados todos los derechos.
73
Capítulo 3: Exits de cliente
Transporte de datos desde subscreens
Figura 58: Transporte de datos desde subscreens
Los datos se deben transportar también en dirección contraria, porque el programa de llamada desconoce también los datos globales del grupo de funciones X que contiene las entradas de usuario en su subscreen. Por ello, los programadores de aplicaciones de SAP usan exits de programa para devolver los datos modificados en el subscreen al programa de llamada. El sistema llama un módulo en el evento PAI del dynpro principal para hacer esto. El dynpro principal contiene un exit de programa que puede enviar los datos globales relevantes para el grupo de funciones X.
74
© Copyright . Reservados todos los derechos.
Lección: Ampliación de dynpros con exits de dynpro
Asignación de nombres y edición de exits de dynpro
Figura 59: Asignación de nombres y edición de exits de dynpro
El CMOD de transacción Gestión de proyecto se utiliza para editar los exits de dynpro. Los nombres técnicos de los exits de dynpro están compuestos por los siguientes elementos: ● El nombre del programa de llamada ●
●
El número de dynpro de cuatro dígitos para el dynpro principal El nombre del área de subscreen, seguido del nombre del programa del grupo de función X y el número de subscreen
© Copyright . Reservados todos los derechos.
75
Capítulo 3: Exits de cliente
Edición de subscreens
Figura 60: Edición de subscreens
El entorno de desarrollo de SAP permite crear subscreens de cliente y los módulos PBO y PAI correspondientes como parte de la navegación hacia adelante. Cuando crea el subscreen, asegúrese de que la clase de dynpro sea Subscreen. No puede modificar las interfaces en el grupo de función X al que pertenece la subscreen y los exits de programa, ni añadir sus módulos de funciones propios.
76
© Copyright . Reservados todos los derechos.
Capítulo 3 Ejercicio 4 Implementación de un exit de cliente: exit de dynpro
Ejemplo empresarial "Sería estupendo si la lista detallada de la transacción BC425_## para mostrar los vuelos pudiera mostrar más datos". Acepta este nuevo desafío que le plantean sus compañeros de trabajo e intenta solucionar el problema sin modificar la transacción. Concretamente, empieza por buscar un modo de añadir varios campos nuevos al segundo dynpro de esta transacción (número de dynpro 200). Tarea 1 ¿Cuáles son las opciones disponibles para colocar campos adicionales en un dynpro? Verifique el dynpro 200 en la transacción BC425_## y vea si esto es posible. 1. ¿Existe un exit de dynpro para ampliar el dynpro? 2. Si es así, ¿cómo se llama la ampliación correspondiente? Tarea 2 Implemente la ampliación para añadir tres campos al dynpro (nombre de proyecto: TG##CUS3): 1. Añada tres campos al dynpro. Debería aparecer lo siguiente: ●
Nombre del piloto
●
Menú
●
El número de tres cifras del vuelo actual
Tarea 3 1. Ejecute la transacción BC425_## y verifique sus resultados.
© Copyright . Reservados todos los derechos.
77
Capítulo 3 Solución 4 Implementación de un exit de cliente: exit de dynpro
Ejemplo empresarial "Sería estupendo si la lista detallada de la transacción BC425_## para mostrar los vuelos pudiera mostrar más datos". Acepta este nuevo desafío que le plantean sus compañeros de trabajo e intenta solucionar el problema sin modificar la transacción. Concretamente, empieza por buscar un modo de añadir varios campos nuevos al segundo dynpro de esta transacción (número de dynpro 200). Tarea 1 ¿Cuáles son las opciones disponibles para colocar campos adicionales en un dynpro? Verifique el dynpro 200 en la transacción BC425_## y vea si esto es posible. 1. ¿Existe un exit de dynpro para ampliar el dynpro? a) Examine la lógica del flujo de los dynpros en busca del string de caracteres CALL CUSTOMER–SUBSCREEN. Verá que el dynpro 200 de la transacción BC425_## ofrece un exit de dynpro. 2. Si es así, ¿cómo se llama la ampliación correspondiente? a) Determine el nombre de la ampliación, por ejemplo, buscando en el sistema de información de repository. El nombre de la ampliación es SBC##E03. Tarea 2 Implemente la ampliación para añadir tres campos al dynpro (nombre de proyecto: TG##CUS3): 1. Añada tres campos al dynpro. Debería aparecer lo siguiente: ●
Nombre del piloto
●
Menú
●
El número de tres cifras del vuelo actual
a) Haga doble clic en el número de dynpro que aparece en la vista de componente del proyecto de ampliación para crear el subscreen. b) En Screen Painter use la opción diseño para ubicar los campos en el dynpro. Piloto y Menú se proporcionan desde la estructura sflight##, freeseats que es un campo libre definido que debe definirse al principio en el Include TOP.
78
© Copyright . Reservados todos los derechos.
Lección: Ampliación de dynpros con exits de dynpro
c) Utilice el exit de programa de la ampliación. Cree el include de cliente e introduzca el código fuente siguiente: MOVE-CORRESPONDING flight TO sflight## seatsfree = flight-seatsmax – flight-seatsocc. Include TOP: TABLES: sflight##. DATA: seatsfree type s_seatsocc. d) Active el programa y luego el proyecto de ampliación. Tarea 3 1. Ejecute la transacción BC425_## y verifique sus resultados.
© Copyright . Reservados todos los derechos.
79
Capítulo 3: Exits de cliente
RESUMEN DE LA LECCIÓN Ahora podrá: ●
80
Ampliar dynpros con exits de dynpro
© Copyright . Reservados todos los derechos.
Capítulo 3 Evaluación de la formación
1. De los siguientes pasos, ¿cuáles se requieren en el procedimiento para crear una ampliación de SAP? Seleccione las respuestas correctas. X
A Definir los componentes necesarios
X
B Asignar componentes a ampliaciones SAP
X
C Documentar el proyecto de ampliación
X
D Activar el proyecto de ampliación
2. De los siguientes pasos, ¿cuáles se requieren en el procedimiento para crear un proyecto de ampliación del cliente? Seleccione las respuestas correctas. X
A Iniciar la gestión de proyectos
X
B Asignar un nombre al proyecto de ampliación
X
C Transportar el proyecto
X
D Indicar una descripción de texto breve en los atributos del proyecto
3. De las siguientes opciones, ¿cuáles determinan si un programa de aplicación ofrece un exit de programa? Seleccione las respuestas correctas. X
A Buscar por programa
X
B Buscar con herramientas de búsqueda
X
C Buscar por documento
X
D Buscar para un string de caracteres determinado
© Copyright . Reservados todos los derechos.
81
Capítulo 3: Evaluación de la formación
4. De los siguientes includes, ¿cuál contiene los eventos que pertenecen al grupo de funciones X? Seleccione la respuesta correcta. X
A LX...F01
X
B LX...E01
X
C LX...O01
X
D LX...I01
5. ¿Cuáles de las siguientes características de los exits de menú le permiten ampliar menús? Seleccione las respuestas correctas. X
A Le permiten añadir funciones propias a las opciones de menú en menús de SAP.
X
B Puede especificar el texto de entrada para las funciones de menú creadas.
X
C Los códigos de función aparecen en el dynpro antes de la activación.
X
D Los programadores ABAP determinan dónde el programa lee los códigos de función adicionales.
6. Los exits de dynpro le permiten aprovechar las secciones reservadas de un dynpro principal. Estas secciones reservadas se denominan ____________. Seleccione la respuesta correcta.
82
X
A Dynpros normales
X
B Subscreens
X
C Dynpros de programa
X
D Dynpros clásicos
© Copyright . Reservados todos los derechos.
Capítulo 3 Respuestas a la Evaluación de la formación
1. De los siguientes pasos, ¿cuáles se requieren en el procedimiento para crear una ampliación de SAP? Seleccione las respuestas correctas. X
A Definir los componentes necesarios
X
B Asignar componentes a ampliaciones SAP
X
C Documentar el proyecto de ampliación
X
D Activar el proyecto de ampliación
2. De los siguientes pasos, ¿cuáles se requieren en el procedimiento para crear un proyecto de ampliación del cliente? Seleccione las respuestas correctas. X
A Iniciar la gestión de proyectos
X
B Asignar un nombre al proyecto de ampliación
X
C Transportar el proyecto
X
D Indicar una descripción de texto breve en los atributos del proyecto
3. De las siguientes opciones, ¿cuáles determinan si un programa de aplicación ofrece un exit de programa? Seleccione las respuestas correctas. X
A Buscar por programa
X
B Buscar con herramientas de búsqueda
X
C Buscar por documento
X
D Buscar para un string de caracteres determinado
© Copyright . Reservados todos los derechos.
83
Capítulo 3: Respuestas a la Evaluación de la formación
4. De los siguientes includes, ¿cuál contiene los eventos que pertenecen al grupo de funciones X? Seleccione la respuesta correcta. X
A LX...F01
X
B LX...E01
X
C LX...O01
X
D LX...I01
5. ¿Cuáles de las siguientes características de los exits de menú le permiten ampliar menús? Seleccione las respuestas correctas. X
A Le permiten añadir funciones propias a las opciones de menú en menús de SAP.
X
B Puede especificar el texto de entrada para las funciones de menú creadas.
X
C Los códigos de función aparecen en el dynpro antes de la activación.
X
D Los programadores ABAP determinan dónde el programa lee los códigos de función adicionales.
6. Los exits de dynpro le permiten aprovechar las secciones reservadas de un dynpro principal. Estas secciones reservadas se denominan ____________. Seleccione la respuesta correcta.
84
X
A Dynpros normales
X
B Subscreens
X
C Dynpros de programa
X
D Dynpros clásicos
© Copyright . Reservados todos los derechos.
CAPÍTULO 4
Add-ins empresariales clásicos
Lección 1 Descripción de una interfaz de objetos ABAP
86
Lección 2 Descripción de los Add-ins empresariales (BAdI) clásicos
89
Lección 3 Explicación de los detalles avanzados de los BAdI
94
OBJETIVOS DEL CAPÍTULO ●
Describir una interfaz de objetos ABAP
●
Describir los Add-ins empresariales (BAdI) clásicos
●
Explicar los detalles avanzados de los BAdI
© Copyright . Reservados todos los derechos.
85
Capítulo 4 Lección 1 Descripción de una interfaz de objetos ABAP
RESUMEN DE LA LECCIÓN Este módulo resume los conceptos básicos de la programación orientada a objetos. Ejemplo empresarial Desea añadir nuevas funciones a una transacción de actualización de vuelos. Para reducir al mínimo el esfuerzo de ajuste durante el upgrade siguiente, desea que la implementación contenga la menor cantidad posible de modificaciones. En particular, desea utilizar los BAdI proporcionados por SAP. Por este motivo, se requieren los siguientes conocimientos: ●
Una buena comprensión de la interfaz de objetos ABAP
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Describir una interfaz de objetos ABAP
Objetos ABAP: interfaces
Figura 61: Clases y objetos
El enfoque básico de la programación orientada a objetos consiste en pensar en objetos, como una reserva especial con todos los atributos y sus funciones especiales, que funcionan únicamente en esos atributos. La descripción técnica de un objeto se conoce por su clase y el objeto es una instancia de una clase. Cada objeto existe únicamente durante la vida útil del programa. En una clase, no solo hay descripciones que dependen del objeto, sino que también hay componentes, que son válidos en general y no dependen especialmente de un objeto en particular. Estos componentes se denominan componentes estáticos (atributos estáticos y métodos estáticos).
86
© Copyright . Reservados todos los derechos.
Lección: Descripción de una interfaz de objetos ABAP
Interfaces
Figura 62: Interfaces
Una interfaz es una recopilación de métodos definidos formalmente sin codificación. Los métodos definidos formalmente hacen referencia a los nombres de los métodos y sus firmas. Una interfaz puede integrarse con una clase que se conoce como la clase de implementación de la interfaz. En la clase, puede implementar todos los métodos de interfaz con su implementación específica de la clase. Si tiene varias clases de implementación de interfaz con su codificación específica de clase, puede tener solo un método de definición (en la interfaz) y varias funcionalidades diferentes (en las clases de implementación). Variables de referencia
Figura 63: Variables de referencia
Las instancias se crean durante el tiempo de ejecución y, por ello, no tienen nombre. Esto significa que tiene que llamar una instancia por su variable de referencia (puntero) que hace referencia a la instancia. Debe definir una variable de referencia en el bloque de declaración de un programa con la especificación adicional REF TO . Eso significa que esta variable de referencia aparece durante el tiempo de ejecución para una instancia específica de esta clase, que aún no está creada. No significa que el puntero dirige a la clase, porque una clase no es nada físico; es solo una descripción de clase. Para crear un objeto de la clase, use la variable de referencia definida. La variable de referencia se refiere automáticamente a este objeto. Ahora puede llamar los componentes de instancia del objeto utilizando la variable de referencia como prefijo. Para llamar a los componentes de clase (por ejemplo, los métodos de clase), no necesita un objeto, porque los componentes de clase son independientes de
© Copyright . Reservados todos los derechos.
87
Capítulo 4: Add-ins empresariales clásicos
cualquier objeto de esta clase. Por ejemplo, se utiliza el prefijo de clase para llamar un método de clase. Referencia de interfaz
Figura 64: Referencia de interfaz
No es posible instanciar una interfaz, porque las interfaces no tienen ningún código. Por lo tanto, no puede utilizar la sentencia CREAR OBJETO para una referencia que se define en una interfaz. La implementación de una interfaz se proporciona por una clase que se encuentra jerárquicamente por debajo de la interfaz. Entonces, una referencia que se define para una interfaz puede referirse a un objeto de la clase de implementación. Las referencias de interfaz solo pueden llamar los componentes de interfaz de un objeto de la clase de implementación. Depende de su definición de clase estática. La función luego se ejecuta en el contexto de su clase de implementación. Por eso, si tiene varias clases de implementación de una interfaz, puede usar la misma semántica para llamar a un método de interfaz para los objetos de estas clases. Sin embargo, se ejecuta una función diferente para cada objeto. RESUMEN DE LA LECCIÓN Ahora podrá: ●
88
Describir una interfaz de objetos ABAP
© Copyright . Reservados todos los derechos.
Capítulo 4 Lección 2 Descripción de los Add-ins empresariales (BAdI) clásicos
RESUMEN DE LA LECCIÓN En este módulo se describe la arquitectura de los Add-Ins empresariales (BAdI) clásicos. También describe cómo buscar los BAdI. Ejemplo empresarial Necesita ampliar su software de SAP mediante BAdI clásicos entregados en el sistema SAP estándar. Por este motivo, se requieren los siguientes conocimientos: ●
Cómo buscar los BAdI disponibles en los programas de SAP
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Describir los Add-ins empresariales (BAdI) clásicos
Add-ins empresariales clásicos
Figura 65: BAdIs: arquitectura
Los BAdIs tienen en cuenta las modificaciones realizadas en el proceso de entrega del software.
© Copyright . Reservados todos los derechos.
89
Capítulo 4: Add-ins empresariales clásicos
La sección superior de la figura muestra la infraestructura típica de entrega. Ya no implica tan salo a un proveedor y un usuario. En cambio, ahora puede implicar a toda una cadena de proveedores intermediarios. La sección inferior de la figura explica cómo funcionan los BAdI. Un programa de aplicación SAP ofrece la opción de ampliación. Para ello se necesita como mínimo una interfaz y una clase BAdI que la implemente. Estas son las ventajas de este concepto: ● Un BAdl es reutilizable. ●
●
Un BAdI puede implementarse muchas veces, incluso por las partes que se encuentran en el extremo de la cadena de entrega del software. Un BAdI permite ofrecer ampliaciones a cada parte de la cadena de entrega del software.
BAdIs: componentes
Figura 66: BAdIs: componentes
Un BAdI contiene los componentes de una ampliación. Cada BAdI puede contener los siguientes componentes: Ampliaciones de programa
●
Define las interfaces para las ampliaciones del programa en forma de métodos de interfaz en un BAdI. Utiliza esta interfaz para implementar la ampliación. El programa SAP llama los métodos de interfaz de la clase BAdI generada. ●
Ampliaciones de menú Puede indicar los códigos de función en un BAdI. Estas opciones de menú están disponibles en la definición de GUI y son visibles cuando el BAdI se implementa.
●
Ampliaciones de pantalla Puede definir e implementar ampliaciones de pantalla en un BAdI.
90
© Copyright . Reservados todos los derechos.
Lección: Descripción de los Add-ins empresariales (BAdI) clásicos
Los componentes creados cuando define un BAdI son los siguientes: ● Interfaz ●
Clase generada (clase BAdI) que implementa la interfaz
La clase generada (clase BAdI) realiza las tareas siguientes: ● Filtrado Si implementa un BAdI dependiente del filtro, la clase de add-in garantiza que se llamen solo las implementaciones relevantes. ●
Control La clase BAdI llama las implementaciones activas.
BAdIs: Flujo de un exit de programa
Figura 67: BAdIs: Flujo de un exit de programa
La figura muestra el flujo de proceso de un programa que contiene una llamada BAdI. Puede ver las posibilidades y las limitaciones inherentes de los BAdIs. Debe declarar una variable de referencia que haga referencia a una interfaz de BAdI en la sección de declaración. En el primer paso se genera una referencia de objeto. Esto reemplaza la clase de servicio CL_EXITHANDLER suministrada por SAP y genera las condiciones para llamar métodos de ampliaciones de programa. Cuando se define un BAdI, el sistema genera una clase BAdI que implementa la interfaz. En la segunda llamada, se llama el método de interfaz de la clase BAdI. La clase BAdI busca todas las implementaciones activas del BAdI y llama los métodos implementados.
© Copyright . Reservados todos los derechos.
91
Capítulo 4: Add-ins empresariales clásicos
BAdIs: Llamar sintaxis en programas SAP
Figura 68: BAdIs: Llamar sintaxis en programas SAP
La figura muestra la sintaxis con la cual puede llamar un BAdI. Los círculos numerados corresponden a las llamadas de la figura previa. Primero debe definir una variable de referencia que haga referencia a la interfaz de BAdI. El nombre de la variable de referencia no tiene que contener necesariamente el nombre del BAdI. En la primera llamada, se crea una referencia de objeto que crea una instancia de la clase de BAdI generada. Al utilizar esta referencia de objeto, solo puede contactar los métodos de la interfaz. Entonces puede usar esta referencia de objeto para llamar los métodos necesarios disponibles con el segundo paso.
92
© Copyright . Reservados todos los derechos.
Lección: Descripción de los Add-ins empresariales (BAdI) clásicos
Identificación de BAdI
Figura 69: Encontrar un BAdI
Puede buscar los BAdI de las siguientes maneras: ● Puede buscar el string CL_EXITHANDLER en un programa de aplicación relevante. Si se llama un BAdI desde el programa, se debe llamar también el método GET_INSTANCE de esta clase. ●
●
●
Después puede alcanzar la definición de BAdI mediante la navegación hacia adelante. La definición además contiene documentación y una guía para la implementación del BAdI. Puede usar la jerarquía de aplicaciones para limitar los componentes en los que desea buscar. Inicie el sistema info Repository y seleccione Ampliaciones → Add-ins empresariales para iniciar el programa de búsqueda relevante. Pude utilizar las entradas en el componente de Customizing relevante.
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Describir los Add-ins empresariales (BAdI) clásicos
© Copyright . Reservados todos los derechos.
93
Capítulo 4 Lección 3 Explicación de los detalles avanzados de los BAdI
RESUMEN DE LA LECCIÓN En este módulo se explican detalles avanzados de los add-ins empresariales (BAdI). Ejemplo empresarial Debe añadir nuevas funciones a una transacción de actualización de vuelos en un sistema estándar de SAP. Para reducir al mínimo las entradas durante el upgrade siguiente, desea que la implementación contenga una cantidad mínima de modificaciones. En particular, desea utilizar los BAdI proporcionados por SAP. Por este motivo, se requieren los siguientes conocimientos: ●
Una buena comprensión de las clases de filtro extensible
●
Una buena comprensión de los códigos predeterminados y de muestra
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Explicar los detalles avanzados de los BAdI
Tipos de filtro extensible
Figura 70: Tipos de filtro extensible: requisitos previos
La asignación del atributo extensible está sujeta a varias restricciones.
94
© Copyright . Reservados todos los derechos.
Lección: Explicación de los detalles avanzados de los BAdI
El dominio al cual se refiere el filtro extensible debe tener las siguientes propiedades: El dominio está vinculado a una tabla de valores independiente del mandante. La tabla de valores tiene exactamente un campo clave con el elemento de datos del tipo de filtro como su tipo de campo.
●
●
●
El dominio tiene una tabla de texto con dos campos clave. Un campo clave tiene el tipo de filtro como tipo de campo, y un campo clave es un campo de idioma. Para marcar un campo como campo de texto, el campo debe existir en una tabla que contenga el string parcial TEXT o TXT. En el Dictionary ABAP, la tabla de texto debe estar asignada a la tabla de valores. La clase de entrega de las dos tablas debe ser E o S.
No todos los valores de filtro que creó en el contexto de un BAdI extensible dependiente del filtro deben presentarse en el campo de valor. Cuando graba los datos, el sistema añade estos valores de filtro a la tabla de valores. Cuando borra la implementación o el BAdI completo, el sistema elimina los valores de la tabla de valores. Se aplica la misma situación a las tablas de texto.
Código de ejemplo y predeterminado
Figura 71: Implementación predeterminada
Una implementación predeterminada se ejecuta cuando no existe una implementación activa de un BAdI. El proveedor de ampliaciones puede crear una implementación predeterminada. Para crear una implementación predeterminada en la definición de BAdI, seleccione Pasar a → Código predeterminado. El sistema genera automáticamente una clase con un nombre predefinido. Necesita implementar los métodos para generar el comportamiento predeterminado requerido. El proveedor de ampliaciones también puede crear una implementación de ejemplo que actúa como un modelo que puede insertarse en los métodos de las implementaciones como propuesta de código inicial.
© Copyright . Reservados todos los derechos.
95
Capítulo 4: Add-ins empresariales clásicos
Para crear una implementación de ejemplo, seleccione Pasar a → Código de ejemplo. El sistema creará una clase que implementará los métodos de la interfaz. El usuario puede examinar el código de ejemplo como modelo.
Comparación con otras técnicas de ampliación
Figura 72: Comparación con otras técnicas de ampliación
Los BAdI son la evolución lógica de la técnica de ampliación convencional. Han tomado la capa de administración de los exits de cliente, junto con la disponibilidad de los diversos componentes de ampliación. La idea de hacer BAdI reutilizables fue adoptada de los Eventos de transacción. Implementa BAdI utilizando un enfoque coherente orientado a los objetos.
Convenciones para fijar nombres ●
Definición de BAdI -
O Z O /../ (Seleccione cualquiera; respete el área de nombres)
●
Interfaz -
IF_EX_ O ZIF_EX_ O /../IF_EX_ (Seleccione cualquiera; respete el área de nombres)
●
Métodos -
●
Seleccione cualquier nombre.
Clase de BAdI generada (clase de adaptador) -
CL_EX_ O ZCL_EX_ O /../CL_EX_ (No puede cambiarse)
96
© Copyright . Reservados todos los derechos.
Lección: Explicación de los detalles avanzados de los BAdI
Convenciones para fijar nombres (implementaciones de BAdI) ●
Implementación BAdI -
O Z O /../ (Seleccione cualquiera; respete el área de nombres)
●
Interfaz -
IF_EX_ O ZIF_EX_ O /../IF_EX_ (Se especifica en la definición de BAdI)
●
Métodos -
●
Definido en la definición de BAdI
Implementación de clase -
CL_IM_ O ZCL_IM_ O /../CL_IM_ (Seleccione cualquiera; respete el área de nombres)
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Explicar los detalles avanzados de los BAdI
© Copyright . Reservados todos los derechos.
97
Capítulo 4: Add-ins empresariales clásicos
98
© Copyright . Reservados todos los derechos.
Capítulo 4 Evaluación de la formación
1. De las siguientes opciones, ¿cuál es una recopilación de métodos definidos formalmente sin codificación? Seleccione la respuesta correcta. X
A Objeto
X
B Definición
X
C Interfaz
X
D Variable de referencia
2. De los siguientes componentes, ¿cuáles forman parte de un Add-In empresarial (BAdI)? Seleccione las respuestas correctas. X
A Ampliaciones de programa
X
B Ampliaciones de pantalla
X
C Ampliaciones de filtrado
X
D Ampliaciones de menú
3. ¿Cuáles son las ventajas de los Add-Ins empresariales (BAdI) en comparación con los exits de cliente? Seleccione las respuestas correctas. X
A Los BAdI pueden definirse sin utilizar interfaces.
X
B Los BAdI pueden reutilizarse.
X
C Los BAdI contienen un exit de dynpro.
X
D Los BAdI son dependientes de filtro.
© Copyright . Reservados todos los derechos.
99
Capítulo 4 Respuestas a la Evaluación de la formación
1. De las siguientes opciones, ¿cuál es una recopilación de métodos definidos formalmente sin codificación? Seleccione la respuesta correcta. X
A Objeto
X
B Definición
X
C Interfaz
X
D Variable de referencia
2. De los siguientes componentes, ¿cuáles forman parte de un Add-In empresarial (BAdI)? Seleccione las respuestas correctas. X
A Ampliaciones de programa
X
B Ampliaciones de pantalla
X
C Ampliaciones de filtrado
X
D Ampliaciones de menú
3. ¿Cuáles son las ventajas de los Add-Ins empresariales (BAdI) en comparación con los exits de cliente? Seleccione las respuestas correctas.
100
X
A Los BAdI pueden definirse sin utilizar interfaces.
X
B Los BAdI pueden reutilizarse.
X
C Los BAdI contienen un exit de dynpro.
X
D Los BAdI son dependientes de filtro.
© Copyright . Reservados todos los derechos.
CAPÍTULO 5
Modificaciones de la versión estándar de SAP
Lección 1 Modificación del software SAP estándar
102
Lección 2 Modificación con el asistente de modificación Ejercicio 5: Implementación de modificaciones
112 119
Lección 3 Implementación de exits de usuario
124
Lección 4 Ajuste de modificaciones
128
OBJETIVOS DEL CAPÍTULO ●
Implementar modificaciones
●
Implementar modificaciones mediante el Asistente de modificaciones
●
Implementar modificaciones con exits de usuario
●
Ajustar las modificaciones
© Copyright . Reservados todos los derechos.
101
Capítulo 5 Lección 1 Modificación del software SAP estándar
RESUMEN DE LA LECCIÓN En este módulo se explican las modificaciones en el software estándar de SAP y cómo implementarlas. Ejemplo empresarial Le gustaría saber qué debe tener en cuenta cuando implementa modificaciones. Por este motivo, se requieren los siguientes conocimientos: ●
Una buena comprensión de lo que debe tener en cuenta cuando modifica objetos de programa
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Implementar modificaciones
Modificaciones: resumen
Figura 73: Modificaciones: diagrama de resumen
Esta figura explica las modificaciones en el software estándar de SAP.
102
© Copyright . Reservados todos los derechos.
Lección: Modificación del software SAP estándar
Originales y copias
Figura 74: Originales y copias
Un objeto es original solo en un sistema. En el caso de los objetos suministrados por SAP, el sistema original pertenece a SAP. En los sistemas de cliente, estos objetos solo están disponibles como copias. Esto se aplica a su sistema de desarrollo y a los demás sistemas posteriores. Si escribe sus propias aplicaciones, los objetos que cree serán originales en su sistema de desarrollo. Asigna sus desarrollos a una orden de modificación del tipo Desarrollo/ Corrección. Esta solicitud garantiza que el sistema transportará objetos del sistema de desarrollo a los sistemas siguientes. Correcciones y reparaciones
Figura 75: Correcciones y reparaciones
© Copyright . Reservados todos los derechos.
103
Capítulo 5: Modificaciones de la versión estándar de SAP
Los cambios realizados en un objeto original se denominan correcciones. Las correcciones se registran en una orden de modificación. Las tareas de la orden de modificación son del tipo Desarrollo/Corrección. Si modifica una copia (un objeto fuera de su sistema original), la modificación se registrará en una tarea del tipo Reparación. Las reparaciones de los objetos SAP se denominan modificaciones. Puede corregir el objeto original en el sistema de desarrollo cuando repara sus propios objetos (por ejemplo, si algo sale mal en su sistema de producción). Cuando modifica copias, debe corregir el original de inmediato. Sin embargo, no se puede hacer lo mismo con los objetos SAP, porque no son originales en ningún sistema de cliente. Solo debería modificar la versión estándar del sistema SAP si las modificaciones que desea realizar son necesarias para optimizar el workflow en su empresa.
Nota: Un buen conocimiento del flujo y la estructura de la aplicación es un requisito previo esencial para decidir qué tipo de modificaciones realizar y cómo diseñarlas. Modificaciones y actualizaciones
Figura 76: Modificaciones y actualizaciones
Cuando realice un upgrade del sistema, aplique un support package o importe una orden de transporte, se pueden originar conflictos con objetos modificados. Los conflictos se producen cuando modifica un objeto de SAP y cuando SAP también ofrece una nueva versión, que luego se activa en el repository. Si desea conservar las modificaciones, debe realizar un ajuste de modificaciones para los objetos. Si tiene varios objetos de SAP modificados, el ajuste de modificación puede demandar mucho tiempo.
104
© Copyright . Reservados todos los derechos.
Lección: Modificación del software SAP estándar
Para garantizar la consistencia entre su sistema de desarrollo y sistemas posteriores, sólo debe realizar ajustes de modificación en su sistema de desarrollo. Los objetos ajustados luego se podrán transportar a otros sistemas de la infraestructura.
Implementación de la modificación
Figura 77: Registro de modificaciones en SSCR
Un usuario de desarrollo registrado registra modificaciones en las fuentes de SAP y las modificaciones manuales de los objetos del Dictionary ABAP. Los matchcodes, los índices de base de datos, los parámetros de memoria intermedia, los objetos de cliente, los parches y los objetos cuya modificación se base en la generación automática (por ejemplo, en el Customizing) no se registran. Si modifica el objeto nuevamente más tarde, el sistema no vuelve a pedir la clave de registro. Después de registrar un objeto, el sistema almacena la clave relacionada en el disco local y la copia automáticamente para cambios posteriores, independientemente del desarrollador registrado que efectúa el cambio. Hasta ese momento, estas claves siguen siendo válidas incluso después de un upgrade de release. Los beneficios de SSCR (Registro de modificaciones del software de SAP) son los siguientes: ● Resolución rápida de errores y alta disponibilidad de sistemas modificados SAP registra todos los objetos que modificó. A partir de esta información, el servicio de atención al cliente de primer nivel de SAP puede encontrar rápidamente los problemas y solucionarlos. Esto amplía la disponibilidad de su sistema ERP. ●
Funcionamiento confiable El registro de sus modificaciones evita modificaciones no deseadas. Esto, a su vez, promueve el funcionamiento confiable de su software ERP.
●
Simplificación de upgrades Los upgrades y los upgrades de release resultan más fáciles debido a que la cantidad de modificaciones es menor.
© Copyright . Reservados todos los derechos.
105
Capítulo 5: Modificaciones de la versión estándar de SAP
Pasos para registrar modificaciones
Figura 78: Realización de una modificación registrada
Si desea modificar un objeto de repository, debe proporcionar la información siguiente al Workbench Organizer: ● Clave SSCR ●
Orden de modificación
La figura explica cómo se obtiene una clave de SSCR. Si ahora sigue modificando el objeto, deberá confirmar los cuadros de advertencia. En este momento, todavía puede cancelar la acción sin reparar el objeto. El Workbench Organizer le pedirá que introduzca una orden de modificación tal como lo haría para sus propios objetos. El sistema añade este objeto automáticamente a una tarea de reparación. La orden de modificación tiene las funciones siguientes: ● Modificar bloqueo Después de asignar la tarea, sólo el propietario podrá modificar el objeto. ●
Importar bloqueo El objeto no se puede sobrescribir mediante una importación (ni upgrade ni Support Package).
●
Creación de la versión El sistema genera una nueva versión del objeto.
106
© Copyright . Reservados todos los derechos.
Lección: Modificación del software SAP estándar
Pasos posteriores a la modificación
Figura 79: Cuando la modificación ha finalizado
Tras finalizar el desarrollo, el programador libera la tarea. En este punto, el programador debe documentar las modificaciones efectuadas. El sistema transfiere los objetos y los bloqueos de objeto válidos en la tarea se transfieren a la orden de modificación. Si el desarrollador confirma la reparación, el bloqueo de importación se transfiere a la orden de modificación. Si el desarrollador no confirma la reparación al liberar la tarea, el bloqueo de importación sigue en su sitio. Sólo el desarrollador puede anular el bloqueo. Después de completar el proyecto, libera la orden de modificación. Esto elimina todos los bloqueos de objeto para la orden de modificación. Esto se aplica a los bloqueos de modificación e importación. Cuando libera la orden de modificación, el sistema copia los objetos desde la base de datos del sistema SAP y los almacena en un directorio en el nivel del sistema operativo. El administrador del sistema luego los importa a los sistemas posteriores. Luego de importar las modificaciones al sistema de calidad, el desarrollador debe probarlas y comprobar el log de importación de la orden.
© Copyright . Reservados todos los derechos.
107
Capítulo 5: Modificaciones de la versión estándar de SAP
Versiones
Figura 80: Versiones
Cuando libera una orden de modificación, una versión completa de todos los objetos que contiene se escribe en la base de datos para versiones. Si vuelve a transportar más adelante el objeto de Repository, el objeto actual pasará a ser una copia completa. El sistema almacena las diferencias entre el objeto nuevo y el anterior se archivarán en la base de datos para versiones como delta regresiva. Cuando asigne un objeto de repository a una tarea, el sistema comprobará si la versión actual coincide con la copia completa en la base de datos para versiones. De lo contrario, el sistema crea una copia completa. El sistema también inicia este proceso la primera vez que modifica un objeto, porque SAP no ofrece versiones de los objetos de repository. Las versiones de un objeto de repository proporcionan la base para ajustar la modificación. Para admitir el ajuste, el sistema almacena información sobre el creador de la versión: SAP o el cliente.
108
© Copyright . Reservados todos los derechos.
Lección: Modificación del software SAP estándar
Factores cruciales para el éxito (1)
Figura 81: Factores cruciales para el éxito (1)
Encapsula el código fuente del cliente en unidades de modularización en lugar de insertarlas directamente en el código fuente de SAP. Los ejemplos incluyen llamadas del módulo de función del cliente en el código fuente del programa o llamadas de subscreen del cliente para campos de dynpro adicionales.
Nota: Asegúrese de utilizar interfaces estrechas cuando encapsula funciones específicas del cliente. Las interfaces estrechas garantizan un buen control de datos. Factores cruciales para el éxito (2) Los factores de éxito críticos son los siguientes: ●
●
●
●
●
Use documentación en línea estandarizada (compatible con el Asistente de modificaciones). No borre ningún código fuente de SAP. En lugar de ello, envíe comentarios (admitido por el Asistente de modificaciones). Lleve un diario del sistema (con el log de modificación de SE95 como base, por ejemplo). No modifique objetos de Dictionary de Base central (a no ser que se indique en una nota SAP o la SAP Support Line). Libere todas las órdenes que contengan reparaciones.
Defina una versión estándar válida para toda la empresa para administrar la documentación en el código fuente.
© Copyright . Reservados todos los derechos.
109
Capítulo 5: Modificaciones de la versión estándar de SAP
También necesita actualizar una lista de todas las modificaciones (un log de modificaciones) en su sistema. Cualquier modificación realizada en los objetos de Dictionary ABAP que pertenecen a los componentes de base de SAP, como Workbench ABAP, se pierden en el upgrade. Estos objetos regresan a su forma inicial y el sistema no ofrece ninguna ayuda de ajuste. Esto puede llevar a la pérdida de contenidos de determinadas tablas. Antes de una importación de upgrade/Support Package, debe liberar todas las órdenes que contengan reparaciones. Logs de modificación: ejemplo
Figura 82: Logs de modificación: ejemplo
SAP le recomienda llevar un registro de todas las modificaciones que se realizaron en su sistema. Esto incluye todas las modificaciones que ha realizado en los objetos de repository del área de nombres SAP. Es necesario registrar la información en una lista con las siguientes columnas: La clase de objeto, como el programa, el dynpro, el status de GUI, etc.
●
110
●
Nombre del objeto
●
Rutina (si procede)
●
Área temática (de acuerdo con el diseño de proceso blueprint o el diseño técnico)
●
Número de reparación
●
Fecha de modificación
●
Autor de la modificación
●
Corrección preliminar: sí o no
●
Número de nota de SAP, válido hasta el release X.Y
●
Tiempo previsto para restablecer la modificación durante un ajuste
© Copyright . Reservados todos los derechos.
Lección: Modificación del software SAP estándar
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Implementar modificaciones
© Copyright . Reservados todos los derechos.
111
Capítulo 5 Lección 2 Modificación con el asistente de modificación
RESUMEN DE LA LECCIÓN En este módulo se describe cómo funcionan el Asistente de modificaciones y el Browser de modificaciones, y se explica cómo usar estas herramientas. Ejemplo empresarial Desea utilizar el Asistente de modificaciones para realizar modificaciones de forma ordenada para garantizar que podrá visualizar una lista exacta de las modificaciones más adelante y facilitar los ajustes de las modificaciones. Por este motivo, se requieren los siguientes conocimientos: ●
●
Una buena comprensión de cómo implementar modificaciones con el Asistente de modificaciones Una buena comprensión del funcionamiento del Asistente de modificaciones
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Implementar modificaciones mediante el Asistente de modificaciones
El Asistente de modificaciones El Asistente de modificaciones cumple los siguientes propósitos: ●
Granularidad más precisa
●
Modificaciones en capa de software separada mediante exit de modificación
El objetivo del Asistente de modificaciones es facilitar los ajustes. En el pasado, la granularidad de las modificaciones se limitaba al nivel de programa de Include. Ahora es posible una granularidad más precisa, y el sistema registra modificaciones en los niveles de subrutina o módulo. Esto se debe a que las modificaciones se registran en una capa diferente. En consecuencia, puede reiniciar las modificaciones, porque la versión original no se modifica.
112
© Copyright . Reservados todos los derechos.
Lección: Modificación con el asistente de modificación
Asistente de modificaciones: cómo funciona
Figura 83: Asistente de modificaciones: cómo funciona
El Asistente de modificaciones registra cambios en una capa separada. Esto significa que el código fuente original del objeto no cambia. El sistema no adopta modificaciones hasta que se genera la carga. Una vez generada la carga, el sistema crea el objeto ejecutable a partir de ambas partes del programa SAP original y las modificaciones. Ajustes de modificaciones: el antes y el después La tabla siguiente muestra los cambios en el ajuste de modificaciones debido al Asistente de modificaciones: ANTES
AHORA
Granularidad: Programa Include
Granularidad: Módulo (como subrutina)
Ajuste de modificación: Línea por línea en el nivel del módulo (exit de modificación)
Ajuste de modificación: En el nivel del módulo (exit de modificación)
Anteriormente, si modificaba un programa de Include del cual SAP proporcionaba una nueva versión en un upgrade, era necesario ajustar la modificación. Realizaba el ajuste de la modificación línea por línea, y el sistema no brindaba demasiado soporte. El Asistente de modificaciones cambia esta situación. Se ha refinado la granularidad del registro de modificaciones. Por ejemplo, si modifica una subrutina, el resto del programa de Include no se modifica. Si SAP suministra una nueva versión del programa de Include, el sistema comprobará si hay una nueva versión de esa subrutina. Si no es el caso, el sistema incorpora sus modificaciones en la nueva versión de manera automática.
© Copyright . Reservados todos los derechos.
113
Capítulo 5: Modificaciones de la versión estándar de SAP
Asistente de modificaciones: capas del software
Figura 84: Asistente de modificaciones: capas del software
La versión original de cada capa del software se compone de originales de la capa anterior y las modificaciones actuales. Asistente de modificaciones: herramientas admitidas La siguiente lista muestra las herramientas que admite el Asistente de modificaciones: ●
Editor ABAP
●
Screen Painter
●
Menu Painter
●
Elementos de texto
●
Class Builder
●
Function Builder
●
Dictionary ABAP
●
Documentación
En el Editor ABAP, puede usar el modo de modificación para modificar el código fuente. En este modo solo hay disponible una serie limitada de funciones. Puede añadir, sustituir o comentar el código fuente, todo controlado por el Asistente de modificaciones. El Asistente de modificaciones registra los cambios en una variedad de objetos de desarrollo ABAP. Incluyen cambios en el layout y en la lógica de flujo del Screen Painter,cambios en Menu Painter y en los elementos de texto, la incorporación de nuevos módulos de función a un grupo de funciones existente y, para evitar conflictos durante las actualizaciones, appends de tabla.
114
© Copyright . Reservados todos los derechos.
Lección: Modificación con el asistente de modificación
Asistente de modificaciones: requisitos previos
Figura 85: Asistente de modificaciones: requisitos previos
Si modifica un objeto SAP, debe proporcionar la información siguiente: Clave del Registro de modificaciones del software de SAP (SSCR)
●
●
Orden de modificación
El sistema le informa que el objeto es controlado por el Asistente de modificaciones. En el editor solo hay disponibles funciones limitadas. Puede activar o desactivar el Asistente de modificaciones para todo el sistema mediante el parámetro de perfil eu/controlled_modification. SAP recomienda trabajar siempre con el Asistente de modificaciones. Puede desactivar el Asistente de modificaciones para un objeto individual del repository. El sistema no utiliza la granularidad precisa que se utiliza en el Asistente de modificaciones. Iconos del Asistente de modificaciones
Figura 86: Iconos del Asistente de modificaciones
En el modo de modificación no se pueden usar todas las funciones normales de la herramienta con la que está trabajando. Pero puede acceder a ellas mediante los pulsadores correspondientes. Las acciones que se realizarán en el Editor ABAP son las siguientes:
© Copyright . Reservados todos los derechos.
115
Capítulo 5: Modificaciones de la versión estándar de SAP
●
Insertar Indique su código fuente entre las líneas de comentario que genera el sistema.
●
Sustituir Sitúe el cursor en una línea y seleccione Sustituir. El sistema comenta la línea correspondiente y aparece otra línea donde puede indicar el código. Si desea sustituir varias líneas, márquelas primero como un bloque.
●
Borrar Seleccione una línea o un bloque del código fuente para comentar las líneas.
●
Deshacer modificaciones Seleccione esta función para deshacer la modificación seleccionada que se realizó en un objeto.
●
Visualizar resumen de modificaciones Seleccione esta función para visualizar un resumen de todas las modificaciones que pertenecen a un objeto.
Asistente de modificaciones: ejemplo de editor ABAP
Figura 87: Asistente de modificaciones: ejemplo de editor ABAP
La figura muestra el resultado de las modificaciones efectuadas con el Asistente de modificaciones. El Asistente de modificaciones genera de manera automática un framework de líneas de comentarios que describen la acción. El comentario también contiene el número de la orden de modificación a la cual asigna el cambio y un número de administración interno.
116
© Copyright . Reservados todos los derechos.
Lección: Modificación con el asistente de modificación
Resumen de modificaciones
Figura 88: Resumen de modificaciones
El icono Resumen de modificaciones brinda un resumen de las modificaciones realizadas en el programa actual. La pantalla está dividida de acuerdo con las diferentes unidades de modularización. Esto corresponde a la estructura usada por el Asistente de modificaciones para registrar las modificaciones. Restauración del original
Figura 89: Restauración del original
© Copyright . Reservados todos los derechos.
117
Capítulo 5: Modificaciones de la versión estándar de SAP
Para deshacer una modificación, sitúe el cursor en ella y seleccione Deshacer. El sistema borra el registro de esta modificación. No puede restablecer este registro. Browser de modificaciones
Figura 90: Browser de modificaciones
El Browser de modificaciones proporciona un resumen de todos los objetos modificados en el sistema. El Browser de modificaciones diferencia entre las modificaciones efectuadas mediante el Browser de modificaciones y las modificaciones realizadas sin él. En la pantalla inicial del Browser de modificaciones se puede delimitar la selección en función de diversos criterios. De este modo se puede buscar modificaciones en un área concreta. El Browser de modificaciones muestra la lista de aciertos en forma de árbol. Los objetos se representan de la siguiente manera: ● Tipo de modificación (con el asistente o sin este) ●
Clase de objeto (PROG, DOMA, DTEL, TABL, ...)
Además de las sencillas funciones de visualización, se puede usar también el Browser de modificaciones para deshacer grupos enteros de modificaciones. Para ello, seleccione el subárbol que desee y seleccione el pulsador Restablecer original.
118
© Copyright . Reservados todos los derechos.
Capítulo 5 Ejercicio 5 Implementación de modificaciones
Ejemplo empresarial Además de la gran variedad de funciones en el sistema SAP, también desea implementar más funciones. En raras ocasiones, se suministran funciones que contienen errores. Esto obliga a insertar correcciones antes de poder importar el support package correspondiente. El Asistente de modificaciones no permite realizar ciertas modificaciones. Desactive el Asistente de modificaciones si desea implementarlas. La implementación de modificaciones con el Asistente de modificación y la implementación de modificaciones no registradas. Tarea 1 1. Siempre que sea posible, utilice el Asistente de modificaciones para modificar los objetos SAP.
Tarea 2 Modifique el programa SAPBC425_BOOKING_##. 1. Amplíe la cabecera de forma que la columna con el nombre del cliente también tenga cabecera. 2. Cree una nueva variable para contar los registros de datos. Visualice el contador en la última columna de la lista. 3. Lea los campos LUGGWEIGHT y WUNIT en la tabla SBOOK y visualícelos en la lista.
Tarea 3 Modifique el programa SAPBC425 FLIGHT##. 1. Modifique el layout de la pantalla 0100: Inserte un marco alrededor de los tres campos de entrada. Cree un pulsador y asígnele el código de función MORE.
Tarea 4 Modifique el elemento de datos S CARRID##. 1. Modifique las etiquetas de campo de esta manera: Texto breve
© Copyright . Reservados todos los derechos.
Comp
119
Capítulo 5: Modificaciones de la versión estándar de SAP
Medio
Compañía aérea
2. Modifique la documentación para este elemento de datos. Cree un texto informativo.
Tarea 5 1. Verificar las modificaciones en el Browser de modificaciones.
120
© Copyright . Reservados todos los derechos.
Capítulo 5 Solución 5 Implementación de modificaciones
Ejemplo empresarial Además de la gran variedad de funciones en el sistema SAP, también desea implementar más funciones. En raras ocasiones, se suministran funciones que contienen errores. Esto obliga a insertar correcciones antes de poder importar el support package correspondiente. El Asistente de modificaciones no permite realizar ciertas modificaciones. Desactive el Asistente de modificaciones si desea implementarlas. La implementación de modificaciones con el Asistente de modificación y la implementación de modificaciones no registradas. Tarea 1 1. Siempre que sea posible, utilice el Asistente de modificaciones para modificar los objetos SAP. a) Modifique los objetos SAP utilizando el Asistente de modificaciones.
Tarea 2 Modifique el programa SAPBC425_BOOKING_##. 1. Amplíe la cabecera de forma que la columna con el nombre del cliente también tenga cabecera. a) Modifique la cabecera directamente desde la lista (Sistema → Lista → Cabecera de lista) o en el Editor. 2. Cree una nueva variable para contar los registros de datos. Visualice el contador en la última columna de la lista. a) Cree una nueva variable directamente en el programa SAP. b) Use la función Insertar en el Asistente de modificaciones. Lo ideal sería limitar las modificaciones al ámbito local en la subrutina data_output. c) Visualice el contador. Como alternativa puede implementar esta función en la ampliación, con lo que no harían falta modificaciones. 3. Lea los campos LUGGWEIGHT y WUNIT en la tabla SBOOK y visualícelos en la lista. a) Amplíe la sentencia SELECT para incluir los campos LUGGWEIGHT y WUNIT. b) Visualice los campos en la subrutina data_output.
Tarea 3
© Copyright . Reservados todos los derechos.
121
Capítulo 5: Modificaciones de la versión estándar de SAP
Modifique el programa SAPBC425 FLIGHT##. 1. Modifique el layout de la pantalla 0100: Inserte un marco alrededor de los tres campos de entrada. Cree un pulsador y asígnele el código de función MORE. a) Use el Screen Painter para modificar el layout de la pantalla 0100.
Tarea 4 Modifique el elemento de datos S CARRID##. 1. Modifique las etiquetas de campo de esta manera: Texto breve
Comp
Medio
Compañía aérea
a) Llame la transacción de actualización para elementos de datos. b) Sitúe el cursor en el objeto correspondiente y seleccione el pulsador modificación. c) Indique un texto nuevo en la siguiente ventana de diálogo. 2. Modifique la documentación para este elemento de datos. Cree un texto informativo. a) Seleccione el pulsador Documentación e introduzca un texto nuevo.
Tarea 5 1. Verificar las modificaciones en el Browser de modificaciones. a) Para verificar la modificación, inicie el Browser de modificaciones ejecutando la transacción SE95. b) Limite la selección mediante el nombre de usuario, la orden de modificación o la tarea.
122
© Copyright . Reservados todos los derechos.
Lección: Modificación con el asistente de modificación
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Implementar modificaciones mediante el Asistente de modificaciones
© Copyright . Reservados todos los derechos.
123
Capítulo 5 Lección 3 Implementación de exits de usuario
RESUMEN DE LA LECCIÓN En este módulo se explica cómo funcionan los exits de usuario, cómo se buscan y cómo se utilizan para ampliar las funciones. Ejemplo empresarial Necesita buscar exits de usuario en el sistema y usarlos para ampliar el software de SAP. Por este motivo, se requieren los siguientes conocimientos: ●
●
Una buena comprensión de los exits de usuario Una buena comprensión de cómo buscar exits de usuario en el sistema y usarlos para ampliar el software de SAP
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Implementar modificaciones con exits de usuario
Exits de usuario
Figura 91: Exits de usuario: estructura de un modulpool
Un modulpool está organizado como un conjunto de programas de Include. Este es un buen enfoque para entender el programa con mayor facilidad. La organización es parecida a la de los grupos de funciones.
124
© Copyright . Reservados todos los derechos.
Lección: Implementación de exits de usuario
El programa principal contiene las sentencias de include para todos los programas de Include pertenecientes al modulpool. Los programas de include que se describen como includes especiales en el programa también son programas de include. Técnicamente, estos includes especiales no son diferentes; solo se suministran una vez. Por lo tanto, las implementaciones del cliente no se sobrescriben. Exits de usuario: implementación
Figura 92: Exits de usuario: implementación
Los exits de usuario son una clase de ampliación del sistema que se desarrolló inicialmente para el componente Ventas y Distribución (SD). La finalidad original de los exits de usuario era permitir al usuario el ajuste de las modificaciones. Usar un exit de usuario es una modificación, ya que obliga a modificar objetos en el área de nombres de SAP. Los desarrolladores de SAP crean un include especial en un modulpool. Estos programas de include contienen una o más subrutinas que utilizan la convención para fijar nombres USEREXIT_. SAP ya ha implementado las llamadas para estas subrutinas en la programación de aplicaciones estándares. Por lo general, se usan variables globales. SAP nunca modifica los includes creados de este modo una vez suministrados. Si se deben suministrar exits de usuario nuevos en un nuevo release, se colocarán en un nuevo programa de include.
© Copyright . Reservados todos los derechos.
125
Capítulo 5: Modificaciones de la versión estándar de SAP
Exits de usuario: ejemplo
Figura 93: Exits de usuario: ejemplo
Los exits de usuario son subrutinas vacías proporcionadas por los desarrolladores de SAP. Puede completarlas con su código fuente. La finalidad de este tipo de sistema es mantener las modificaciones al margen del código fuente del programa y guardarlas en programas de Include. Para ello, los desarrolladores de SAP crean varios includes que cumplen las convenciones para fijar nombres para programas y grupos de funciones. Los últimos dos caracteres del nombre del include indican que el cliente utilizará el programa de include. Por lo general, los últimos dos caracteres contienen una Z. Ejemplo: Programa SAPMV45A Include MV45AFZB Esta convención para fijar nombres garantiza que los desarrolladores de SAP no modificarán este include en el futuro. Por lo tanto, los includes de este tipo nunca se enumeran durante los ajustes de la modificación. Si SAP suministra exits de usuario nuevos con un nuevo release, se empaquetarán en nuevos includes que cumplan la misma convención para fijar nombres.
126
© Copyright . Reservados todos los derechos.
Lección: Implementación de exits de usuario
Exits de usuario: búsqueda
Figura 94: Exits de usuario: búsqueda
Encontrará una lista de todos los exits de usuario en la Guía de implementación de referencia de SAP. Aquí también podrá encontrar documentación que explica por qué los desarrolladores de SAP han creado un exit de usuario concreto. Para esto, siga los pasos que se describen en la Guía de implementación. RESUMEN DE LA LECCIÓN Ahora podrá: ●
Implementar modificaciones con exits de usuario
© Copyright . Reservados todos los derechos.
127
Capítulo 5 Lección 4 Ajuste de modificaciones
RESUMEN DE LA LECCIÓN En este módulo se explica cómo se implementa un ajuste de modificación. Ejemplo empresarial Es necesario realizar un ajuste de modificación después de haber implementado un upgrade o un support package. Por este motivo, se requieren los siguientes conocimientos: ●
●
Una buena comprensión de los pasos realizados durante un ajuste de modificación Una buena comprensión de cómo se realizan los ajustes de modificación en sistemas posteriores
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Ajustar las modificaciones
Ajuste de modificaciones
Figura 95: Objetos para el ajuste
Puede derivar el conjunto de objetos para el ajuste del conjunto de objetos nuevos suministrado por SAP en un nuevo release. Este se compara con el conjunto de objetos modificados. La intersección de estos dos conjuntos es el conjunto de objetos que debe ajustar cuando se importa un upgrade/support package.
128
© Copyright . Reservados todos los derechos.
Lección: Ajuste de modificaciones
Ajuste de modificación: SPDD y SPAU
Figura 96: Ajuste de modificación: SPDD y SPAU
Durante el ajuste de modificación, puede comparar las versiones nuevas y antiguas de los objetos de repository ABAP utilizando las transacciones SPDD y SPAU. No hace falta llamar la transacción SPDD para ajustar los objetos del Dictionary en los siguientes casos: ●
●
No realizó ningún cambio en los objetos estándares de SAP del Dictionary. Solo ha agregado objetos de cliente a su sistema. Solo debe ajustar objetos de SAP que modificó utilizando esta transacción.
Puede utilizar la transacción SPAU para ajustar todos los demás objetos de repository ABAP. El programa de upgrade R3up le indica que debe iniciar la transacción después de finalizar el upgrade. Tiene 30 días para usar la transacción SPAU después de un upgrade. Después de 30 días, tendrá que solicitar una clave de Registro de modificaciones del software de SAP (SSCR) para cada objeto que desee ajustar. La transacción SPAU primero identifica los objetos que modificó y luego afirma los objetos modificados para los cuales importó una nueva versión durante el upgrade actual. El ajuste de las modificaciones permite transferir las modificaciones efectuadas en su sistema a su nuevo release del sistema.
© Copyright . Reservados todos los derechos.
129
Capítulo 5: Modificaciones de la versión estándar de SAP
Ajuste de modificaciones: objetos
Figura 97: Ajuste de modificaciones: objetos
Puede utilizar la transacción SPDD para ajustar los objetos del Dictionary ABAP durante el ajuste de modificación. Puede ajustar los siguientes objetos del Dictionary ABAP: Dominios
●
●
●
Elementos de datos Tablas (estructuras, tablas transparentes, pool y tablas de cluster junto con sus opciones técnicas)
Puede ajustar estos tres tipos de objetos directamente después de la importación del objeto de Dictionary y antes de la importación principal. Hasta ahora, el sistema no ha generado las nuevas versiones de los objetos de Dictionary ABAP. Para garantizar que no se pierdan datos, es importante que se hagan todas las modificaciones de cliente en dominios, elementos de datos o tablas antes de generarlos. Las modificaciones de otros objetos del Dictionary ABAP, como objetos de bloqueo, matchcodes o vistas, no pueden provocar la pérdida de datos. Por lo tanto, es necesario ajustar estos objetos de Dictionary ABAP con la transacción SPAU después de completar la importación principal y la generación de objetos. Puede utilizar la transacción SPAU para ajustar los tipos de objeto siguientes: ● Programas ABAP
130
●
Interfaces (menús)
●
Dynpros
●
Objetos de matchcode
●
Vistas
●
Objetos de bloqueo
© Copyright . Reservados todos los derechos.
Lección: Ajuste de modificaciones
Transporte de ajustes entre sistemas
Figura 98: Transporte de ajustes entre sistemas
Durante el ajuste de modificación, lleve a cabo el procesamiento del objeto mediante dos órdenes de modificación diferentes: una para el ajuste SPDD y otra para el ajuste SPAU. El sistema transporta estas órdenes de modificación a los otros sistemas de SAP que desea ajustar. Esto garantiza que todo el trabajo real de ajustes se lleve a cabo únicamente en su sistema de desarrollo. Cuando se realiza el upgrade de sistemas SAP adicionales, el sistema muestra todos los ajustes exportados del primer upgrade del sistema durante la etapa ADJUSTCHK. Usted decide qué ajustes desea aceptar en sus sistemas adicionales. Después el sistema los integra en el upgrade actual. Posteriormente, el sistema verifica si las órdenes de modificación creadas durante el primer upgrade de sistema cubren todas las modificaciones en el sistema SAP actual. En caso afirmativo, no podrá realizar ajustes durante el upgrade actual.
Nota: Para que este proceso sea efectivo, es importante que todos los sistemas implicados tengan infraestructuras de sistema idénticas. Esto se puede garantizar al hacer modificaciones primero en su sistema de desarrollo y al transportarlas luego a los sistemas siguientes antes de realizar el upgrade del sistema de desarrollo. También se puede garantizar que todos sus sistemas tengan una infraestructura de sistema idéntica al crear el sistema de desarrollo antes del upgrade como copia del sistema productivo y sin volver a modificar el sistema productivo a partir de ese momento.
© Copyright . Reservados todos los derechos.
131
Capítulo 5: Modificaciones de la versión estándar de SAP
Ajuste de modificaciones: introducción
Figura 99: Ajuste de modificaciones: introducción
Cuando se inicia el ajuste de las modificaciones mediante la transacción SPAU, se puede delimitar la lista de aciertos en un dynpro de selección. Puede decidir si desea visualizar todos los objetos que se deben ajustar o solo los que aún no ha procesado el sistema. Puede utilizar los criterios siguientes para delimitar la selección de objetos ajustados: Modificado por
●
●
Paquete
●
Números de orden/tarea
El sistema visualiza una lista de los objetos que se deben ajustar. La lista se clasifica de acuerdo con los siguientes criterios: ● Con el Asistente de modificaciones o sin este ●
132
Tipo de objeto
© Copyright . Reservados todos los derechos.
Lección: Ajuste de modificaciones
Iconos del Asistente de modificaciones
Figura 100: Iconos del Asistente de modificaciones
Los iconos delante de cada objeto que se debe ajustar indican cómo se pueden ajustar. A continuación se detallan los métodos que indican la forma en que los objetos pueden ajustarse: ● Automáticamente El sistema no pudo encontrar ningún conflicto. Puede adoptar modificaciones de manera automática seleccionando el icono o la opción de menú correspondiente. ●
Semiautomáticamente Las herramientas individuales lo asisten en el ajuste de objetos. Cuando ajusta los programas para efectuar cambios, el sistema muestra el editor de dynpro dividido.
●
Manualmente Debe procesar las modificaciones sin ninguna ayuda especial por parte del sistema. En este caso, el ajuste de las modificaciones le permite pasar directamente a la herramienta relevante.
El sistema identifica los objetos ajustados con un tilde verde. Si desea utilizar la nueva versión estándar de SAP, utilice Restablecer original para que no tenga que realizar ningún ajuste en el futuro. RESUMEN DE LA LECCIÓN Ahora podrá: ●
Ajustar las modificaciones
© Copyright . Reservados todos los derechos.
133
Capítulo 5: Modificaciones de la versión estándar de SAP
134
© Copyright . Reservados todos los derechos.
Capítulo 5 Evaluación de la formación
1. ¿Cuáles son los beneficios de SSCR (Registro de modificaciones del software de SAP) para las modificaciones de registro? Seleccione las respuestas correctas. X
A Resolución de errores rápida
X
B Simplificación de upgrades
X
C Funcionamiento confiable
X
D La clave SSCR proporcionada a un objeto debe proporcionarse una y otra vez para cada modificación.
2. ¿Cuál de las siguientes herramientas admite el Asistente de modificaciones? Seleccione las respuestas correctas. X
A Editor ABAP
X
B Screen Painter
X
C Menu Builder
X
D Dictionary ABAP
3. ¿Cuál es el propósito de brindar exits de usuario? Seleccione las respuestas correctas. X
A Proporcionar ampliaciones para las aplicaciones de Ventas y Distribución.
X
B Proporcionar ampliaciones para evitar modificaciones.
X
C Habilitar múltiples implementaciones independientes.
X
D Garantizar actualizaciones sin inconvenientes.
© Copyright . Reservados todos los derechos.
135
Capítulo 5: Evaluación de la formación
4. Durante el ajuste de modificación, ¿qué transacciones puede utilizar para comparar las versiones nuevas y anteriores de objetos de repository ABAP? Seleccione las respuestas correctas.
136
X
A SPDD
X
B SSCR
X
C SPAU
© Copyright . Reservados todos los derechos.
Capítulo 5 Respuestas a la Evaluación de la formación
1. ¿Cuáles son los beneficios de SSCR (Registro de modificaciones del software de SAP) para las modificaciones de registro? Seleccione las respuestas correctas. X
A Resolución de errores rápida
X
B Simplificación de upgrades
X
C Funcionamiento confiable
X
D La clave SSCR proporcionada a un objeto debe proporcionarse una y otra vez para cada modificación.
2. ¿Cuál de las siguientes herramientas admite el Asistente de modificaciones? Seleccione las respuestas correctas. X
A Editor ABAP
X
B Screen Painter
X
C Menu Builder
X
D Dictionary ABAP
3. ¿Cuál es el propósito de brindar exits de usuario? Seleccione las respuestas correctas. X
A Proporcionar ampliaciones para las aplicaciones de Ventas y Distribución.
X
B Proporcionar ampliaciones para evitar modificaciones.
X
C Habilitar múltiples implementaciones independientes.
X
D Garantizar actualizaciones sin inconvenientes.
© Copyright . Reservados todos los derechos.
137
Capítulo 5: Respuestas a la Evaluación de la formación
4. Durante el ajuste de modificación, ¿qué transacciones puede utilizar para comparar las versiones nuevas y anteriores de objetos de repository ABAP? Seleccione las respuestas correctas.
138
X
A SPDD
X
B SSCR
X
C SPAU
© Copyright . Reservados todos los derechos.
CAPÍTULO 6
Puntos de ampliación, opciones de ampliación y secciones de ampliación
Lección 1 Descripción del concepto de ampliación
141
Lección 2 Uso de ampliaciones explícitas Ejercicio 6: Uso de ampliaciones explícitas
146 151
Lección 3 Descripción de ampliaciones implícitas
155
Lección 4 Uso de ampliaciones implícitas en los módulos de funciones SAP Ejercicio 7: Uso de las ampliaciones implícitas de un módulo de funciones de SAP
157 159
Lección 5 Uso de ampliaciones implícitas en clases globales de SAP Ejercicio 8: Amplíe una clase de SAP global.
163 167
Lección 6 Uso de otras ampliaciones implícitas Ejercicio 9: Ampliación de estructuras y subrutinas de SAP
174 177
OBJETIVOS DEL CAPÍTULO ●
Describir las opciones de ampliación disponibles en el concepto de ampliación
●
Explicar los puntos de ampliación
●
Analizar los puntos de ampliación
●
Utilizar ampliaciones explícitas
●
Describir ampliaciones implícitas
●
Usar ampliaciones implícitas en los módulos de funciones SAP
© Copyright . Reservados todos los derechos.
139
Capítulo 6: Puntos de ampliación, opciones de ampliación y secciones de ampliación
140
●
Usar ampliaciones implícitas en clases globales de SAP
●
Usar ampliaciones implícitas en clases locales de SAP
●
Usar ampliaciones implícitas en implementaciones de ampliaciones existentes
●
Usar las ampliaciones implícitas en programas de SAP
© Copyright . Reservados todos los derechos.
Capítulo 6 Lección 1 Descripción del concepto de ampliación
RESUMEN DE LA LECCIÓN En este módulo se describen las opciones de ampliación disponibles en el concepto de ampliación y también se describe el propósito de los puntos de ampliación. Ejemplo empresarial Desea utilizar las nuevas opciones de ampliación en el concepto de ampliación para mejorar las funciones de SAP sin realizar modificaciones. Por este motivo, se requieren los siguientes conocimientos: ●
Comprensión de las ampliaciones disponibles en el concepto de ampliación
●
Comprensión de los puntos de ampliación
●
Comprensión de cómo obtener información sobre un punto de ampliación
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Describir las opciones de ampliación disponibles en el concepto de ampliación
●
Explicar los puntos de ampliación
●
Analizar los puntos de ampliación
© Copyright . Reservados todos los derechos.
141
Capítulo 6: Puntos de ampliación, opciones de ampliación y secciones de ampliación
Ampliaciones en el concepto de ampliación
Figura 101: Resumen de las ampliaciones en el concepto de ampliación
En el concepto de ampliación, hay algunas nuevas técnicas de ampliación disponibles en SAP NetWeaver 7.0: puntos de ampliación, opciones de ampliación y secciones de ampliación. A diferencia de las tecnologías de ampliación anteriores, las ampliaciones implícitas no requieren preparativos de los desarrolladores de SAP, y están disponibles de manera implícita en áreas determinadas de los objetos estándar de SAP. SAP creó la nueva tecnología de Add-In empresarial (BAdI) por motivos de rendimiento. En la figura se ilustra la forma en que los puntos, las secciones de ampliación y los BAdI creados mediante la nueva tecnología se agrupan y gestionan mediante puntos de ampliación. Los puntos de ampliación compuestos pueden ser puntos de ampliación simples y otros puntos de ampliación compuestos. Estos puntos sirven para agrupar las ampliaciones semánticamente. Los BAdI clásicos aún están disponibles en el sistema. Sin embargo, SAP solo creará nuevos BAdI a partir de ahora.
142
© Copyright . Reservados todos los derechos.
Lección: Descripción del concepto de ampliación
Puntos de ampliación
Figura 102: Información sobre un punto de ampliación
Desde SAP NetWeaver 7.02, es posible ofrecer otro punto o sección de ampliación dentro de una implementación de ampliación. En el modo de implementación, en el menú contextual, seleccione Operaciones de ampliación → Crear opción. Especifique un nombre de punto o sección, y asigne un nombre al punto (respete el espacio para el nombre del cliente Y* o Z* para el nombre del punto). Pulse INTRO y active la nueva ampliación al activar la implementación.
Consejo: Las implementaciones de ampliaciones se realizan en una capa de software diferente (tal como las modificaciones realizadas con el Asistente de modificación). No puede verlos directamente en el Debugger. Para depurarlos, seleccione el punto o la sección de ampliación definida y luego seleccione el pulsador paso individual para indicar la implementación de ampliación.
© Copyright . Reservados todos los derechos.
143
Capítulo 6: Puntos de ampliación, opciones de ampliación y secciones de ampliación
Punto de ampliación e implementación de la ampliación
Figura 103: Punto de ampliación e implementación de la ampliación
Esta figura ilustra los puntos de ampliación compuestos y las implementaciones de ampliación compuestas. SAP ofrece puntos y secciones de ampliación dentro de los puntos de ampliación. Los puntos de ampliación pueden combinarse en SAP mediante los puntos de ampliación compuestos. Esta combinación de puntos de ampliación en puntos de ampliación compuestos proporciona una mejor estructura para la búsqueda global de puntos de ampliación. El cliente puede implementar las ampliaciones de las siguientes maneras: Los clientes pueden implementar puntos y secciones de ampliación creando una implementación de ampliación para el punto de ampliación relacionado.
●
●
●
Normalmente, los clientes implementan todos los puntos o las secciones de un punto de ampliación en una implementación. Los elementos ampliados se numeran de manera automática. Los clientes también tienen la opción de combinar sus implementaciones de ampliación en una implementación de ampliación compuesta. Esta combinación de implementaciones de ampliación en implementaciones de ampliación compuestas simplifica su búsqueda posterior. Sin embargo, no es necesario crear implementaciones de ampliación compuestas para los puntos de ampliación compuestos.
Buscar un punto de ampliación No es posible realizar una búsqueda global para los puntos y las secciones de ampliación explícitos; sin embargo, es posible buscar puntos de ampliación. En general, el nombre de un punto que contiene todas las ampliaciones explícitas de un programa es, por lo general, ES_. Para buscar un punto de ampliación, siga los pasos siguientes:
144
© Copyright . Reservados todos los derechos.
Lección: Descripción del concepto de ampliación
1. Inicie el Sistema de información de Repository (transacción SE84). 2. En la pantalla Navegador de objetos, seleccione Ampliaciones → Puntos de ampliación. 3. Especifique los criterios de búsqueda para los puntos de ampliación que busca y ejecute para visualizar una lista de resultados. 4. Elija uno de los resultados para mostrar. Verá una lista de puntos y secciones de ampliación de este punto. 5. En la etiqueta Implementaciones de ampliaciones, puede ver todas las implementaciones de ampliaciones del punto. Seleccione la implementación de ampliación que desea visualizar. 6. El resultado muestra todos los elementos de implementación de ampliaciones relacionados con el nombre de la implementación de ampliación. 7. Seleccione, por ejemplo, un elemento dinámico de implementación de ampliación y el pulsador Fuente para ver el código de implementación en la parte inferior de la pantalla. Seleccione el pulsador Editor para visualizar el código fuente de la ampliación incorporada al programa. Nota: También puede utilizar el explorador de ampliaciones (transacción SPAU_ENH) para mostrar los puntos de ampliación y sus implementaciones. La funcionalidad es la misma que la del Sistema de información de Repository.
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Describir las opciones de ampliación disponibles en el concepto de ampliación
●
Explicar los puntos de ampliación
●
Analizar los puntos de ampliación
© Copyright . Reservados todos los derechos.
145
Capítulo 6 Lección 2 Uso de ampliaciones explícitas
RESUMEN DE LA LECCIÓN En este módulo se proporciona un resumen de los puntos y las secciones de ampliación explícita. Ejemplo empresarial Como desarrollador, ha observado algunas opciones y puntos de ampliación explícitos en un programa estándar que deberá cambiar. No desea modificar el programa y, por lo tanto, le gustaría aprender a utilizar las ampliaciones explícitas disponibles. Por este motivo, requiere los conocimientos siguientes: 1. Comprensión de los puntos y secciones de ampliación explícitos 2. Comprensión de los riesgos de las implementaciones múltiples de puntos y secciones de ampliación explícitos 3. Cómo utilizar las ampliaciones explícitas OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Utilizar ampliaciones explícitas
Puntos y secciones de ampliación explícitos
Figura 104: Puntos y secciones de ampliación explícitos
La figura le enseña a identificar puntos y secciones de ampliación explícitos en un programa de SAP. SAP proporciona puntos de ampliación explícitos y le permite ampliar el código fuente de SAP insertando su propia lógica sin realizar modificaciones. Puede identificar los puntos de
146
© Copyright . Reservados todos los derechos.
Lección: Uso de ampliaciones explícitas
ampliación explícitos buscando la sintaxis ENHANCEMENT-POINT . Los puntos de ampliación pueden ser estáticos (para permitir declaraciones de datos adicionales) o dinámicos (para permitir códigos ejecutables adicionales). Una sección de ampliación es una opción que SAP proporciona para permitirle sustituir el código fuente de SAP sin tener que realizar modificaciones. Puede identificar una sección de ampliación al buscar las sintaxis ENHANCEMENT-SECTION y END-ENHANCEMENTSECTION . Los puntos y las secciones de ampliación explícitos están almacenados en los puntos de ampliación. Crear una implementación para una ampliación explícita Para usar puntos y secciones de ampliación explícitos, cree una implementación de ampliación (del punto de ampliación de nivel superior). 1. Visualice el objeto SAP (programa, módulo de funciones, método). 2. Busque el punto o la sección de ampliación que necesita. 3. Seleccione el pulsador Ampliación. 4. Cree la implementación de ampliación mediante el menú contextual del punto o la sección de ampliación. 5. Especifique el nombre de la implementación de ampliación (respete el espacio para el nombre del cliente Y* o Z*). 6. Introduzca el código fuente. 7. Seleccione el pulsador Activar ampliaciones.
Riesgos de las implementaciones múltiples de las secciones de ampliación explícitas
Figura 105: Implementaciones múltiples de secciones de ampliación
© Copyright . Reservados todos los derechos.
147
Capítulo 6: Puntos de ampliación, opciones de ampliación y secciones de ampliación
Es posible que se haya creado más de una implementación de ampliación para una sección de ampliación.
Nota: Solo puede ejecutarse una implementación de sección de ampliación en el tiempo de ejecución. Para habilitar una implementación específica cuando haya más de una, es necesario utilizar el Switch Framework. Cuando haya más de una implementación activa, deberá solucionar el conflicto creando un switch de conexión. si falta este switch de conexión, no podrá saber cuál es la implementación que se ejecutará en el tiempo de ejecución. Conflicto en la sección de ampliación: ejemplo 1
Figura 106: Conflicto en la sección de ampliación: ejemplo 1
La figura muestra una situación de conflicto donde el sistema no sabe qué implementación ejecutar. Aquí se requiere un switch de conexión para especificar la implementación que se ejecutará. Sin el switch de conexión, no puede saber si se utilizarán la implementación 1 o la implementación 2 en el tiempo de ejecución. Existe un riesgo adicional cuando utiliza una sección ENH (ampliación) para el desarrollo local, cuando también la utiliza una implementación BF (función empresarial).
148
© Copyright . Reservados todos los derechos.
Lección: Uso de ampliaciones explícitas
Conflicto en la sección de ampliación: ejemplo 2
Figura 107: Conflicto en la sección de ampliación: ejemplo 2
En la figura, no se observa un conflicto porque la conexión BF-ENH-Implementation está desactivada. Si activa la conexión BF-ENH-Implementation, se produce un conflicto y se requerirá un switch de conexión para solucionarlo.
Riesgos de las implementaciones múltiples de los puntos de ampliación explícitos
Figura 108: Implementaciones múltiples de los puntos de ampliación
© Copyright . Reservados todos los derechos.
149
Capítulo 6: Puntos de ampliación, opciones de ampliación y secciones de ampliación
Es posible tener una o más implementaciones para un punto de ampliación que pertenece a distintas implementaciones de ampliación. Por ejemplo, el Punto D tiene una implementación de ampliación en la implementación de ampliación 1 y la implementación de ampliación 2. Es posible asignar un punto de ampliación de un punto a varias implementaciones de ampliación, y una implementación de ampliación puede utilizarse para puntos de ampliación de uno o más puntos (relación "m" a "n").
Nota: Si existen múltiples implementaciones para un punto de ampliación, no puede asumir que se procesarán en un orden determinado, pero esto puede cambiar en el futuro. Riesgo de implementaciones múltiples
Figura 109: Riesgo de implementaciones múltiples
La secuencia de ejecución de las implementaciones no está predefinida. Por lo tanto, debe evitar dependencias o conflictos, por ejemplo, donde las distintas implementaciones cambian el valor de una misma variable.
150
© Copyright . Reservados todos los derechos.
Capítulo 6 Ejercicio 6 Uso de ampliaciones explícitas
Ejemplo empresarial Como desarrollador, desea usar puntos y secciones de ampliación explícitos para ampliar o sustituir el código fuente de SAP sin realizar modificaciones. 1. Analice el código fuente del programa BC427_##_EPS (donde ## representa su número de grupo). 2. Utilice el punto de ampliación explícito BC427_##_EP1 para reaccionar ante el usuario que indica 6 y 7 en la pantalla de selección de la misma manera en que el código estándar de SAP reacciona ante los valores del 1 al 5. Asigne el nombre ZBC427_##_EPS a la implementación de ampliación que se creará. 3. Utilice la sección de ampliación explícita BC427_##_ES1 para mostrar el texto correspondiente en la lista (es decir, utilizando WRITE) en lugar de emitir un mensaje de usuario.
© Copyright . Reservados todos los derechos.
151
Capítulo 6 Solución 6 Uso de ampliaciones explícitas
Ejemplo empresarial Como desarrollador, desea usar puntos y secciones de ampliación explícitos para ampliar o sustituir el código fuente de SAP sin realizar modificaciones. 1. Analice el código fuente del programa BC427_##_EPS (donde ## representa su número de grupo). a) No requiere una solución. 2. Utilice el punto de ampliación explícito BC427_##_EP1 para reaccionar ante el usuario que indica 6 y 7 en la pantalla de selección de la misma manera en que el código estándar de SAP reacciona ante los valores del 1 al 5. Asigne el nombre ZBC427_##_EPS a la implementación de ampliación que se creará. a) Cuando indica 6 y 7, el sistema debería mostrar Saturday (sábado) y Sunday (domingo). *$*$-Start: BC427_00_EP1------------------------$*$* ENHANCEMENT 1
ZBC427_00_EPS.
CASE weekday. WHEN '6'. WRITE 'Saturday'. EXIT. WHEN '7'. WRITE 'Sunday'. EXIT. ENDCASE. ENDENHANCEMENT. *$*$-End:
BC427_00_EP1------------------------$*$*
3. Utilice la sección de ampliación explícita BC427_##_ES1 para mostrar el texto correspondiente en la lista (es decir, utilizando WRITE) en lugar de emitir un mensaje de usuario. *$*$-Start: BC427_00_ES1----------------------$*$* ENHANCEMENT 2 a) ZBC427_00_EPS. WRITE:/ 'Invalid weekday input'. ENDENHANCEMENT. *$*$-End: BC427_00_ES1----------------------$*$*
Full model solution program after exercise: *-------------------------------------------------------------* * This program translates the name of a weekday into English. * *-------------------------------------------------------------* REPORT BC427_00_EPS. PARAMETERS weekday TYPE s_weekday_00. START-OF-SELECTION. CASE weekday. WHEN '1'. WRITE 'Monday'. EXIT. WHEN '2'. WRITE 'Tuesday'. EXIT. WHEN '3'. WRITE 'Wednesday'. EXIT. WHEN '4'. WRITE
152
© Copyright . Reservados todos los derechos.
Lección: Uso de ampliaciones explícitas
'Thursday'. EXIT. WHEN '5'. WRITE 'Friday'. EXIT. ENDCASE. ENHANCEMENT-POINT BC427_00_EP1 SPOTS BC427_00_ESPOT1. *$*$-Start: BC427_00_EP1----------------------$*$* ENHANCEMENT 1 ZBC427_00_EPS. "active version CASE weekday. WHEN '6'. WRITE 'Saturday'. EXIT. WHEN '7'. WRITE 'Sunday'. EXIT. ENDCASE. ENDENHANCEMENT. *$*$-End:
BC427_00_EP1------------------------$*$*
ENHANCEMENT-SECTION BC427_00_ES1 SPOTS BC427_00_ESPOT1. MESSAGE 'Invalid weekday input' TYPE 'I'. END-ENHANCEMENT-SECTION. *$*$-Start: BC427_00_ES1------------------------$*$* ENHANCEMENT 2 ZBC427_00_EPS. "active version WRITE:/ 'Invalid weekday input'. ENDENHANCEMENT. *$*$-End: BC427_00_ES1------------------------$*$*
© Copyright . Reservados todos los derechos.
153
Capítulo 6: Puntos de ampliación, opciones de ampliación y secciones de ampliación
RESUMEN DE LA LECCIÓN Ahora podrá: ●
154
Utilizar ampliaciones explícitas
© Copyright . Reservados todos los derechos.
Capítulo 6 Lección 3 Descripción de ampliaciones implícitas
RESUMEN DE LA LECCIÓN En este módulo se describen los puntos de ampliación implícitos y las opciones de ampliación disponibles en las aplicaciones estándar de SAP. Ejemplo empresarial Desea ampliar las aplicaciones estándar de SAP sin realizar modificaciones, sin embargo, no puede ver las ampliaciones explícitas disponibles. Por este motivo, se requieren los siguientes conocimientos: ●
Comprensión de los puntos de ampliación implícitos
●
Comprensión de las opciones de ampliación implícitas
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Describir ampliaciones implícitas
Resumen de los puntos de ampliación implícitos
Figura 110: Resumen de los puntos de ampliación implícitos
Los puntos de ampliación implícitos le ofrecen la opción de insertar un código fuente adicional en ciertos puntos de los programas de SAP, módulos de función y métodos sin realizar modificaciones ni preparaciones explícitas de parte de los desarrolladores de SAP. El objeto de SAP correspondiente pudo haberse creado en versiones anteriores a SAP NetWeaver 7.0.
Resumen de las opciones de ampliación implícitas Las opciones de ampliación implícitas le ofrecen la capacidad de definir los siguientes componentes sin modificaciones:
© Copyright . Reservados todos los derechos.
155
Capítulo 6: Puntos de ampliación, opciones de ampliación y secciones de ampliación
●
Parámetros de interfaz adicionales (opcionales) en los módulos de función y en los métodos de SAP
●
Atributos y métodos adicionales en las clases de SAP
●
Funciones de tratamiento anterior o posterior para los métodos globales de SAP
●
Reemplazos para los métodos globales de SAP
RESUMEN DE LA LECCIÓN Ahora podrá: ●
156
Describir ampliaciones implícitas
© Copyright . Reservados todos los derechos.
Capítulo 6 Lección 4 Uso de ampliaciones implícitas en los módulos de funciones SAP
RESUMEN DE LA LECCIÓN En este módulo se describe el uso de ampliaciones implícitas en los módulos de funciones SAP. Ejemplo empresarial Encontró un módulo de funciones estándar de SAP cuyo comportamiento desea cambiar sin hacer modificaciones. Por este motivo, se requieren los siguientes conocimientos: ●
●
Comprensión de los puntos y de las opciones de ampliación implícitos disponibles en los módulos de funciones SAP Comprensión del modo de uso de las ampliaciones implícitas en un módulo de funciones SAP
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Usar ampliaciones implícitas en los módulos de funciones SAP
Puntos y opciones de ampliación implícitos en los módulos de función de SAP Para utilizar los puntos y las opciones de ampliación implícitos en el módulo de funciones de SAP, deberá crear una implementación de ampliación. Los siguientes puntos y opciones de ampliación implícitos están disponibles para los módulos de función de SAP: ●
Opciones de ampliación implícitas -
●
Pueden añadirse parámetros opcionales adicionales a la interfaz del módulo de función.
Puntos de ampliación implícitos -
Puede crear una implementación de ampliación que le permitirá añadir lógica al principio o al final del código fuente del módulo de función.
Ampliar un módulo de función de SAP A continuación se detallan los pasos para ampliar las interfaces de un módulo de función de SAP: 1. Visualice el módulo de funciones en Function Builder.
© Copyright . Reservados todos los derechos.
157
Capítulo 6: Puntos de ampliación, opciones de ampliación y secciones de ampliación
2. Seleccione Módulo de funciones → Ampliar interfaz y especificar una implementación de ampliación para añadir un nuevo parámetro de interfaz con la tipificación. 3. Seleccione el pulsador Activar ampliaciones. Estos parámetros de interfaz añadidos siempre deben ser opcionales (si no los marca como opcionales, el sistema lo hace) y pueden utilizarse en una ampliación de código fuente del módulo de función correspondiente. A continuación se detallan los pasos para ampliar el código fuente de un módulo de función de SAP: 1. Visualice el código fuente del módulo de función. 2. Seleccione el pulsador Ampliación. 3. Seleccione Tratar → Operaciones de ampliación → Mostrar opciones de ampliación implícitas para visualizar las opciones de ampliación implícitas. 4. En el editor, utilice el menú contextual de uno de los puntos de ampliación implícitos visualizados para crear una implementación de ampliación. 5. Inserte el código fuente. 6. Seleccione el pulsador Activar ampliaciones.
158
© Copyright . Reservados todos los derechos.
Capítulo 6 Ejercicio 7 Uso de las ampliaciones implícitas de un módulo de funciones de SAP
Ejemplo empresarial Desea utilizar las opciones y los puntos de ampliación implícitos para ampliar módulos de función de SAP sin realizar modificaciones. 1. Familiarícese con el funcionamiento del módulo de función de SAP BC427_##_CALC_PRICE. El módulo de función calcula el precio bruto a partir del precio neto introducido y lo devuelve a través del parámetro EXPORT. 2. Sin realizar modificaciones, defina un parámetro IMPORT adicional (opcional) denominado im_discount (clase I) que puede utilizarse para traspasar un descuento (en %) al módulo de función. Asigne el nombre a suimplementación de ampliación ZBC427_##_CALC_PRICE_INTERFACE (donde ## representa su número de grupo). Defina un parámetro EXPORT denominado ex_discprice (clase BC427_PRICE) que el módulo de función puede utilizar para devolver el precio bruto descontado. Grabe las ampliaciones. 3. Amplíe el código fuente del módulo de función para garantizar que el precio desconectado pueda calcularse y que el resultado pueda mostrarse en ex_discprice con el parámetro IMPORT im_discprice. Asigne el nombre a suimplementación de ampliación ZBC427_##_CALC_PRICE_SOURCE. 4. Active las dos implementaciones de ampliación. 5. Copiar programa BC427_IEP_FM_TEMPLATE (el nombre del programa destino como ZBC427_##_IEP_FM). En su programa copiado, llame su módulo de función ampliado para garantizar que muestra el precio bruto descontado además del precio bruto estándar (la opción de entrada de usuario para el descuento ya se ha implementado con el parámetro de descuento). Entonces, el programa debe mostrar los dos precios brutos.
© Copyright . Reservados todos los derechos.
159
Capítulo 6 Solución 7 Uso de las ampliaciones implícitas de un módulo de funciones de SAP
Ejemplo empresarial Desea utilizar las opciones y los puntos de ampliación implícitos para ampliar módulos de función de SAP sin realizar modificaciones. 1. Familiarícese con el funcionamiento del módulo de función de SAP BC427_##_CALC_PRICE. El módulo de función calcula el precio bruto a partir del precio neto introducido y lo devuelve a través del parámetro EXPORT. a) No requiere una solución. 2. Sin realizar modificaciones, defina un parámetro IMPORT adicional (opcional) denominado im_discount (clase I) que puede utilizarse para traspasar un descuento (en %) al módulo de función. Asigne el nombre a suimplementación de ampliación ZBC427_##_CALC_PRICE_INTERFACE (donde ## representa su número de grupo). Defina un parámetro EXPORT denominado ex_discprice (clase BC427_PRICE) que el módulo de función puede utilizar para devolver el precio bruto descontado. Grabe las ampliaciones. a) Seleccione Módulo de función → Ampliar interfaz. b) Cuando se le solicite, especifique el nombre de la implementación de ampliación. c) Seleccione la etiqueta IMPORT y añada el parámetro IM_DISCOUNT. Este parámetro debe marcarse como opcional. d) Seleccione la etiqueta EXPORT y añada el parámetro EX_DISCPRICE. e) Grabe los datos. 3. Amplíe el código fuente del módulo de función para garantizar que el precio desconectado pueda calcularse y que el resultado pueda mostrarse en ex_discprice con el parámetro IMPORT im_discprice. Asigne el nombre a suimplementación de ampliación ZBC427_##_CALC_PRICE_SOURCE. a) Visualice el código fuente del módulo de función. b) Seleccione el pulsador Ampliar. c) Seleccione Tratar → Operaciones de ampliación → Mostrar opciones de ampliación implícitas para visualizar las opciones de ampliación implícitas. d) En el editor, utilice el menú contextual de uno de los puntos de ampliación implícitos visualizados para crear su implementación de ampliación.
160
© Copyright . Reservados todos los derechos.
Lección: Uso de ampliaciones implícitas en los módulos de funciones SAP
e) Inserte el código fuente, tal como se muestra a continuación: FUNCTION BC427_00_CALC_PRICE. *"------------------------------*"*"Lokale Schnittstelle: *" IMPORTING *" REFERENCE(IM_NETPRICE) TYPE BC427_PRICE *" EXPORTING *" REFERENCE(EX_FULLPRICE) TYPE BC427_PRICE *"------------------------------ex_fullprice
=
im_netprice * 119 / 100 .
""""""$"$\SE:(1) Function Module BC427_00_CALC_PRICE, End *$*$-Start: (1)-------------------------------$*$* ENHANCEMENT 1 ZBC427_00_CALC_PRICE_SOURCE. "active version ex_discprice = ex_fullprice - ex_fullprice * ( im_discount / 100 ). ENDENHANCEMENT. * $*$-End: (1)-------------------------------$*$* ENDFUNCTION. f) Seleccione el pulsador GRABAR. 4. Active las dos implementaciones de ampliación. a) Utilice el pulsador Activar ampliación en el editor del módulo de función. 5. Copiar programa BC427_IEP_FM_TEMPLATE (el nombre del programa destino como ZBC427_##_IEP_FM). En su programa copiado, llame su módulo de función ampliado para garantizar que muestra el precio bruto descontado además del precio bruto estándar (la opción de entrada de usuario para el descuento ya se ha implementado con el parámetro de descuento). Entonces, el programa debe mostrar los dos precios brutos. REPORT zbc427_00_iep_fm. a) PARAMETERS: netprice DATA: fullprice
TYPE bc427_price, discount
TYPE bc427_price, discprice
TYPE i.
TYPE bc427_price.
* Calling the enhanced function module CALL FUNCTION 'BC427_00_CALC_PRICE' EXPORTING IM_NETPRICE netprice IM_DISCOUNT = discount IMPORTING EX_FULLPRICE fullprice EX_DISCPRICE = discprice . WRITE: / 'Full price :', 18 fullprice, / 'Discount price :', 18 discprice.
© Copyright . Reservados todos los derechos.
=
161
=
Capítulo 6: Puntos de ampliación, opciones de ampliación y secciones de ampliación
RESUMEN DE LA LECCIÓN Ahora podrá: ●
162
Usar ampliaciones implícitas en los módulos de funciones SAP
© Copyright . Reservados todos los derechos.
Capítulo 6 Lección 5 Uso de ampliaciones implícitas en clases globales de SAP
RESUMEN DE LA LECCIÓN En este módulo se describe el uso de ampliaciones implícitas en las clases globales de SAP. Ejemplo empresarial Ha encontrado una clase global estándar de SAP cuyo comportamiento desea cambiar sin realizar modificaciones. Por este motivo, se requieren los siguientes conocimientos: ●
Comprensión de los puntos y opciones de ampliación implícitos en las clases de SAP
●
Comprensión de los métodos anteriores, posteriores y de sobrescritura
●
●
Comprensión de las ampliaciones implícitas de código fuente y de cuándo pueden utilizarse en lugar de los métodos anteriores y posteriores Cómo mejorar una clase de SAP global
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Usar ampliaciones implícitas en clases globales de SAP
© Copyright . Reservados todos los derechos.
163
Capítulo 6: Puntos de ampliación, opciones de ampliación y secciones de ampliación
Puntos y opciones de ampliación implícitos en las clases de SAP
Figura 111: Puntos y opciones de ampliación implícitos en las clases de SAP
Para ampliar las interfaces de los métodos SAP globales y definir atributos o métodos adicionales para las clases globales de SAP, proceda de la siguiente manera: 1. Visualice la clase en el generador de clases. 2. Seleccione Clase → Ampliar y especifique la implementación de una ampliación. 3. Añada nuevos atributos, métodos y parámetros de interfaz a los métodos existentes. 4. Para acceder al editor de métodos y poder añadir el código, haga doble clic en el nombre de los métodos adicionales que haya creado. 5. Seleccione el pulsador Activar ampliaciones. Los parámetros de interfaz recientemente añadidos siempre deben ser opcionales, y pueden utilizarse en cualquier ampliación de código fuente del método correspondiente. Cualquier atributo o método nuevo también se puede utilizar en las ampliaciones de código fuente de métodos de la misma clase global.
Métodos de sobrescritura, anteriores y posteriores Estos métodos se utilizan de manera automática antes, después o en lugar del método SAP. Cuanto se crean los métodos de sobrescritura, anteriores y posteriores, el sistema genera una clase local denominada lcl_ para la ampliación . Esta clase local se incorpora al final de la sección de implementación de clase local de la clase original (como una implementación de la opción de ampliación predefinida). Puede acceder a los componentes de la clase original dentro de la clase local lcl_ a través de la referencia de objeto CORE_OBJECT.
164
© Copyright . Reservados todos los derechos.
Lección: Uso de ampliaciones implícitas en clases globales de SAP
La clase local lcl_ puede implementar las siguientes interfaces: ● IPR_ para métodos anteriores ●
IPO_para métodos posteriores
●
IOW_ para métodos de sobrescritura
Los parámetros de sobrescritura, anteriores y posteriores son similares a los parámetros del método original, pero presentan las siguientes restricciones: ●
●
Los métodos anteriores no tienen parámetros para export. Los métodos posteriores no tienen parámetros para EXPORT; los parámetros para EXPORT del método SAP original se convierten en parámetros CHANGING del método posterior.
●
El parámetro de retorno de un método funcional se convierte en un parámetro changing.
●
Los métodos de sobrescritura tienen la misma firma que el método original.
●
No puede modificar las definiciones de parámetro de los métodos de sobrescritura, anteriores y posteriores.
Definición de un método de sobrescritura, anterior o posterior A continuación se detallan los pasos para definir un método de sobrescritura, anterior o posterior de una clase de SAP global: 1. Visualice la clase en el generador de clases. 2. Seleccione Clase → Ampliar y especifique o cree la implementación de una ampliación. 3. Use el cursor para marcar el método SAP. 4. Seleccione Tratar → Operaciones de ampliación y luego seleccione Insertar método anterior, Insertar método posterior o Añadir método de sobrescritura. 5. Seleccione el pulsador nuevo en la columna Exit anterior/posterior/de sobrescritura) para implementar el método correspondiente. Para llamar los componentes de la clase global en el método, debe utilizar la variable de referencia core_object que se establece en el constructor local. 6. Grabe el método. 7. Seleccione el pulsador Activar ampliaciones. Para cada método SAP, puede definir un método anterior y otro posterior. Como alternativa, puede crear un método de sobrescritura que sustituya al método SAP.
Ampliaciones de código fuente implícitas en comparación con métodos anteriores o posteriores Estas son las ventajas de los métodos anteriores o posteriores: ●
Mayor nivel de abstracción por estar en espacios diferentes
© Copyright . Reservados todos los derechos.
165
Capítulo 6: Puntos de ampliación, opciones de ampliación y secciones de ampliación
●
●
166
Menor esfuerzo de ajuste que en las ampliaciones de código fuente durante la actualización (solo cuando los parámetros se modifican) Todos los métodos anteriores y posteriores se almacenan en la clase de ampliación local que posee atributos para intercambiar datos entre los métodos.
© Copyright . Reservados todos los derechos.
Capítulo 6 Ejercicio 8 Amplíe una clase de SAP global.
Ejemplo empresarial Desea utilizar las nuevas opciones de ampliación del concepto de ampliación para mejorar una clase de SAP global para que cumpla sus requisitos. Esto incluye la creación de un atributo y un método adicional, así como la ampliación de métodos existentes dentro de la clase. Tarea 1 Cree un nuevo atributo y un método adicional en la clase. 1. Cree un nuevo atributo de instancia privada llamado Age, de tipo I, usando una ampliación implícita. Asigne el nombre ZBC427_PERSON_## a su implementación de ampliación. 2. Cree un nuevo método de instancia pública llamado GET_AGE, que devuelva el valor del nuevo atributo AGE al programa de llamada a través del parámetro de RETURNING llamado RE_AGE de tipo I. 3. Utilice el entorno de prueba en el Generador de clases para garantizar el funcionamiento del nuevo método.
Tarea 2 Cree parámetros adicionales y amplíe el código fuente de los métodos existentes. 1. Amplíe el constructor de instancia añadiendo un nuevo parámetro, IM_AGE, de tipo I. 2. Utilice la ampliación implícita al final del constructor de instancia para completar el atributo Age con el valor del nuevo parámetro IM_AGE. Tarea 3 Cree un método posterior. 1. Cree un parámetro de Import adicional, IM_DISPLAY_ALL, de la clase ABAP_BOOL para el método DISPLAY_ATTRIBUTES. 2. Cree un método posterior para el método DISPLAY_ATTRIBUTES que compruebe el valor del nuevo parámetro IM_DISPLAY_ALL y, si tiene el valor 'X', mostrará el valor del atributo AGE con el comando WRITE. Deberá utilizar la referencia CORE_OBJECT para trabajar con el atributo AGE en el método posterior. 3. Utilice la clase ampliada en una copia del programa ABAP BC427_IEP_CLASS_TEMPLATE. Este programa debería crear una instancia de la clase CL_BC427_PERSON_##, y luego llamar el método DISPLAY_ATTRIBUTES utilizando el nuevo parámetro IM_DISPLAY_ALL para garantizar que todos los detalles se visualizan en la lista/informe.
© Copyright . Reservados todos los derechos.
167
Capítulo 6 Solución 8 Amplíe una clase de SAP global.
Ejemplo empresarial Desea utilizar las nuevas opciones de ampliación del concepto de ampliación para mejorar una clase de SAP global para que cumpla sus requisitos. Esto incluye la creación de un atributo y un método adicional, así como la ampliación de métodos existentes dentro de la clase. Tarea 1 Cree un nuevo atributo y un método adicional en la clase. 1. Cree un nuevo atributo de instancia privada llamado Age, de tipo I, usando una ampliación implícita. Asigne el nombre ZBC427_PERSON_## a su implementación de ampliación. a) Inicie la transacción SE80. b) En la pantalla Navegador de objetos, indique Clase/Interfaz. c) Indique CL_BC427_PERSON_## como el nombre de clase y seleccione el pulsador Visualizar. d) En el panel Nombre del objeto, haga doble clic en el nombre de clase CL_BC427_PERSON_## para abrirlo. e) En la pantalla Generador de clases: Visualizar clase CL_BC427_PERSON_##, seleccione la etiqueta Atributo. f) Seleccione el pulsador Ampliar. g) En el cuadro de diálogo Crear implementación de ampliación, indique ZBC427_PERSON_## y una breve descripción en el campo Texto breve y seleccione el pulsador Continuar. h) En el cuadro de diálogo Crear entrada de directorio de objeto, indique ZBC427_## en el campo Paquete. i) Grabe los datos. j) En el cuadro de diálogo Petición para orden de Workbench transportable, seleccione la orden de Workbench que el instructor creó para usted. k) Seleccione el pulsador Continuar. l) En la pantalla Generador de clases: Cambiar ampliación ZBC427_PERSON_##, indique los datos siguientes en la etiqueta Atributo:
168
Atributo
Nivel
Visibilidad
Tipo asociado
age
Instancia
Privado
I
© Copyright . Reservados todos los derechos.
Lección: Uso de ampliaciones implícitas en clases globales de SAP
m) Active su ampliación. 2. Cree un nuevo método de instancia pública llamado GET_AGE, que devuelva el valor del nuevo atributo AGE al programa de llamada a través del parámetro de RETURNING llamado RE_AGE de tipo I. a) En la etiqueta Métodos, indique los datos siguientes: Método
Nivel
Visibilidad
GET_AGE
Instancia
Público
b) Seleccione el método GET_AGE. c) Seleccione el pulsador Parámetro. d) En la pantalla Generador de clases: Cambiar ampliación ZBC427_PERSON_##, indique los datos siguientes en la pantalla de parámetros del método: Parámetros
Tipo
Tipo asociado
re_age
Retorno
I
e) Seleccione el pulsador Código, y asegúrese de que puede ver los parámetros de método seleccionando el pulsador FIRMA. f) Indique el código de la siguiente manera:re_age = age. g) Seleccione el pulsador Activar. 3. Utilice el entorno de prueba en el Generador de clases para garantizar el funcionamiento del nuevo método. a) Regrese a la pantalla Generador de clases: Cambiar ampliación ZBC427_PERSON_## y seleccione el pulsador En el entorno de prueba. b) En la pantalla Crear instancia de la clase CL_BC427_PERSON_##: Parámetros de constructor, seleccione el pulsador Tratar campo largo o estructura. c) Indique un nombre y regrese. d) Seleccione el pulsador Crear instancia. e) Seleccione el pulsador Ejecutar para su método GET_AGE. Nota: El valor del parámetro de retorno está vacío por el momento, porque el atributo age aún no se completó.
Tarea 2 Cree parámetros adicionales y amplíe el código fuente de los métodos existentes. 1. Amplíe el constructor de instancia añadiendo un nuevo parámetro, IM_AGE, de tipo I. a) Seleccione CONSTRUCTOR en la columna Método.
© Copyright . Reservados todos los derechos.
169
Capítulo 6: Puntos de ampliación, opciones de ampliación y secciones de ampliación
b) Seleccione el pulsador Parámetro. c) Indique los datos siguientes: Parámetros
Tipo asociado
im_age
I
d) Marque la casilla de selección Opcional y luego seleccione el pulsador Activar. 2. Utilice la ampliación implícita al final del constructor de instancia para completar el atributo Age con el valor del nuevo parámetro IM_AGE. a) En la pantalla Generador de clases: Cambiar ampliación ZBC427_PERSON_##, seleccione el pulsador Código. b) Seleccione el pulsador Ampliar. c) En la pantalla Generador de clases: Clase CL_BC427_PERSON_## Cambiar ampliación, seleccione Tratar → Operaciones de ampliación → Mostrar opciones de ampliación implícita. d) Seleccione la ampliación implícita al final del método CONSTRUCTOR y luego seleccione el pulsador Crear. e) En el cuadro de diálogo Seleccionar modo de ampliación, seleccione el pulsador Código. f) En el cuadro de diálogo Crear implementación de ampliación, indique ZBC427_PERSON_CODE_## en el campo Implementación de la ampliación. g) Indique una descripción breve en el campo Texto breve. h) Grabe los datos y asígnelos a su paquete y orden de transporte de la manera habitual. i) En la pantalla Generador de clases: Ampliación ZBC427_PERSON_CODE_## Cambiar, indique el código AGE = IM_AGE. y seleccione el pulsador Activar. j) Regrese a la pantalla Generador de clases: Cambiar ampliación ZBC427_PERSON_## y seleccione el pulsador En el entorno de prueba. k) En la pantalla Crear instancia de la clase CL_BC427_PERSON_##: Parámetros de constructor, seleccione el pulsador Tratar campo largo o estructura. l) Indique un nombre para la prueba. m) Regrese e indique un valor para el parámetro IM_AGE. n) Seleccione el pulsador Crear instancia. o) Seleccione el pulsador Ejecutar para su método GET_AGE nuevamente. Nota: El valor del parámetro de retorno tendrá el valor correspondiente de AGE.
Tarea 3 Cree un método posterior.
170
© Copyright . Reservados todos los derechos.
Lección: Uso de ampliaciones implícitas en clases globales de SAP
1. Cree un parámetro de Import adicional, IM_DISPLAY_ALL, de la clase ABAP_BOOL para el método DISPLAY_ATTRIBUTES. a) En la pantalla Generador de clases: Cambiar ampliación ZBC427_PERSON_##, asegúrese de que se encuentra en la etiqueta Métodos y luego seleccione el método DISPLAY_ATTRIBUTES. b) Seleccione el pulsador Parámetro. c) Para el parámetro de método de DISPLAY ATTRIBUTES, indique los datos siguientes: Parámetros
Tipo
Tipo asociado
IM_DISPLAY_ALL
Importación
ABAP_BOOL
d) Seleccione el pulsador Métodos para volver a la lista de métodos. 2. Cree un método posterior para el método DISPLAY_ATTRIBUTES que compruebe el valor del nuevo parámetro IM_DISPLAY_ALL y, si tiene el valor 'X', mostrará el valor del atributo AGE con el comando WRITE. Deberá utilizar la referencia CORE_OBJECT para trabajar con el atributo AGE en el método posterior. a) En la pantalla Generador de clases: Cambiar ampliación ZBC427_PERSON_##, seleccione el método DISPLAY_ATTRIBUTES. b) En la pantalla Generador de clases: Cambiar ampliación ZBC427_PERSON_##, seleccione Tratar → Operaciones de ampliación → Insertar método posterior. c) Cuando le pregunten si desea acceder a componentes privados o protegidos de la clase, seleccione el pulsador Sí. d) En la pantalla Editor ABAP: Cambiar Include ZBC427_PERSON_##, indique el código siguiente: if im_display_all endif.
= 'X'. Write:/'Age of person is', core_object->age.
e) Revise la sintaxis y active el código. 3. Utilice la clase ampliada en una copia del programa ABAP BC427_IEP_CLASS_TEMPLATE. Este programa debería crear una instancia de la clase CL_BC427_PERSON_##, y luego llamar el método DISPLAY_ATTRIBUTES utilizando el nuevo parámetro IM_DISPLAY_ALL para garantizar que todos los detalles se visualizan en la lista/informe. a) Seleccione Programa, indique el nombre del programa BC427_IEP_CLASS_TEMPLATE y seleccione VISUALIZAR. b) Seleccione BC427_IEP_CLASS_TEMPLATE y Copiar en el menú contextual. c) En el cuadro de diálogo Copiar programa BC427_IEP_CLASS_TEMPLATE, indique ZBC427_IEP_CLASS_## en el campo Programa destino. d) Abra el programa ZBC427_IEP_CLASS_## en modo Tratar. e) Indique la definición de una variable de referencia adecuada de la siguiente manera: DATOS clase r_person ref.a cl_bc427_person_##.
© Copyright . Reservados todos los derechos.
171
Capítulo 6: Puntos de ampliación, opciones de ampliación y secciones de ampliación
f) Añada el código para crear una instancia de la clase; puede utilizar la funcionalidad arrastrar y soltar o PATTERN para insertar el código necesario. El resultado final debería tener este aspecto: CREATE OBJECT r_person EXPORTING im_name
= p_name im_age
= p_age.
g) Después de haber creado el proyecto, llame el método DISPLAY_ATTRIBUTES. Puede utilizar la funcionalidad arrastrar y soltar o PATTERN para insertar el código necesario. El resultado final debería tener este aspecto: CALL METHOD r_person->display attributes EXPORTING im_display_all 'X'.
=
h) Seleccione el pulsador Activar. i) Pruebe el programa. j) En la pantalla de selección, indique un nombre en el campo Nombre y un valor de edad en el campo Edad. k) En el campo texto de comando, indique /h para activar el depurador. l) Pulse INTRO y seleccione al pulsador Ejecutar. m) Depure el programa y observe la ejecución de sus implementaciones de ampliación.
172
© Copyright . Reservados todos los derechos.
Lección: Uso de ampliaciones implícitas en clases globales de SAP
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Usar ampliaciones implícitas en clases globales de SAP
© Copyright . Reservados todos los derechos.
173
Capítulo 6 Lección 6 Uso de otras ampliaciones implícitas
RESUMEN DE LA LECCIÓN En este módulo se explican los puntos y opciones de ampliación implícitos disponibles en clases locales de SAP, definiciones de estructuras SAP y subrutinas SAP. Ejemplo empresarial Desea conocer las demás opciones de ampliación implícitas disponibles en los programas estándar de SAP. Por este motivo, se requieren los siguientes conocimientos: ●
●
●
Comprensión de los puntos y opciones de ampliación implícitos en las clases locales de SAP Comprensión del modo de ampliar las estructuras y subrutinas SAP Comprensión del modo de uso de los puntos de ampliación implícitos en implementaciones de ampliación existentes
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Usar ampliaciones implícitas en clases locales de SAP
●
Usar ampliaciones implícitas en implementaciones de ampliaciones existentes
●
Usar las ampliaciones implícitas en programas de SAP
Puntos y opciones de ampliación implícitos en clases locales de SAP Las opciones de ampliación implícitas disponibles en las clases locales de SAP son las siguientes: ●
●
Añadir parámetros opcionales (importación, exportación y modificación, pero no parámetros de retorno o excepciones) a las interfaces del método Definir atributos y métodos adicionales (público, protegido y privado)
Los puntos de ampliación implícitos disponibles en las clases locales de SAP son las siguientes: ●
●
Al principio y al final de los métodos (para añadir lógica o utilizar parámetros de interfaz, atributos o métodos adicionales) Al final del bloque de implementación (para implementar métodos adicionales creados)
Para utilizar los puntos y las opciones de ampliación implícitos en las clases locales de SAP, cree una implementación de ampliación.
174
© Copyright . Reservados todos los derechos.
Lección: Uso de otras ampliaciones implícitas
Ampliar una clase local de SAP A continuación se detallan los pasos para ampliar una clase local: 1. Visualice el código fuente de la clase local. 2. Seleccione el pulsador Ampliación. 3. Seleccione Tratar → Operaciones de ampliación → Mostrar opciones de ampliación implícitas para mostrar las opciones de ampliación implícitas. 4. En el editor, utilice el menú contextual de una de las opciones de ampliación o uno de los puntos visualizados implícitos para crear una implementación de ampliación. Consejo: Debe desplazarse hacia la derecha del editor para ver las ampliaciones implícitas que se muestran. Si crea una implementación de ampliación para la sección pública, asegúrese de seleccionar la ampliación implícita adecuada. No escriba PUBLIC SECTION en la implementación de ampliación. Continúe de la misma manera en las demás posibilidades de ampliación. 5. Inserte el código fuente. 6. Seleccione el pulsador Activar ampliaciones. Nota: Para la ampliación de una interfaz de método, las adiciones introductorias IMPORTACIÓN, EXPORTACIÓN y MODIFICACIÓN no se especificarán, incluso si no aparecen en la declaración del método original.
Otros puntos de ampliación implícitos Otros puntos de ampliación implícitos de los objetos de SAP están disponibles: ●
Al final de una declaración (de tipo) de estructura (antes de "END OF ...") (para incluir campos adicionales)
●
Al principio y al final de las subrutinas (para ampliar las funciones adicionales)
●
Al final de los Includes (para implementar las subrutinas y funciones adicionales)
Consejo: Los puntos y las secciones de ampliación implícitos no están disponibles para elementos de objetos centrales de la base de SAP.
© Copyright . Reservados todos los derechos.
175
Capítulo 6: Puntos de ampliación, opciones de ampliación y secciones de ampliación
Utilizar otros puntos de ampliación implícitos 1. Visualice el código fuente del objeto de SAP correspondiente. 2. Seleccione el pulsador Ampliación. 3. Seleccione Tratar → Operaciones de ampliación → Mostrar opciones de ampliación implícitas para mostrar las opciones de ampliación implícitas. 4. En el editor, utilice el menú contextual de uno de los puntos de ampliación implícitos visualizados para crear una implementación de ampliación. 5. Inserte el código fuente. 6. Seleccione el pulsador Activar ampliaciones. Nota: Cuando amplíe una declaración (de tipo) de estructura (antes de “END OF ...”), deberá utilizar la sintaxis DATA: TIPO , TIPO . De lo contrario, el programa sería incorrecto sintácticamente.
176
© Copyright . Reservados todos los derechos.
Capítulo 6 Ejercicio 9 Ampliación de estructuras y subrutinas de SAP
Ejemplo empresarial Desea utilizar los puntos de ampliación implícitos para ampliar las subrutinas y estructuras de SAP. 1. Analice el código fuente del programa BC427_##_IEP_STRFORM (donde ## representa su número de grupo). 2. Utilice el punto de ampliación implícito correspondiente para añadir los campos distancia y distid para estructurar la definición wa_conn (distancia y unidad de vuelo, tipificación utilizando los campos SPFLI del mismo nombre). Asigne el nombre a suimplementación de ampliación ZBC427_##_IEP_STRFORM. 3. En la subrutina display_conn, el parámetro formal f_conn ahora contiene los dos campos adicionales distancia y distid debido a la tipificación utilizando wa_conn. Utilice el punto de ampliación implícito correspondiente para que aparezcan estos campos.
© Copyright . Reservados todos los derechos.
177
Capítulo 6 Solución 9 Ampliación de estructuras y subrutinas de SAP
Ejemplo empresarial Desea utilizar los puntos de ampliación implícitos para ampliar las subrutinas y estructuras de SAP. 1. Analice el código fuente del programa BC427_##_IEP_STRFORM (donde ## representa su número de grupo). a) No requiere una solución. 2. Utilice el punto de ampliación implícito correspondiente para añadir los campos distancia y distid para estructurar la definición wa_conn (distancia y unidad de vuelo, tipificación utilizando los campos SPFLI del mismo nombre). Asigne el nombre a suimplementación de ampliación ZBC427_##_IEP_STRFORM. a) El punto de ampliación implícito que se utilizará se encuentra al final de la definición de estructura (antes de END OF ...). DATA: BEGIN OF wa_conn, carrid TYPE spfli-carrid, connid TYPE spfli-connid, cityfrom TYPE spfli-cityfrom, cityto TYPE spfli-cityto, """"""""""$"$\SE:(1) Struct. WA_CONN, End *$*$-Start: (1)------------------$*$* ENHANCEMENT 1 ZBC427_00_IEP_STRFORM. "active version """""""""""""""""""""""""""""""" DATA: distance TYPE spfli-distance, distid TYPE spfli-distid. """""""""""""""""""""""""""""""" ENDENHANCEMENT. *$*$-End: (1)------------------$*$* END OF wa_conn. 3. En la subrutina display_conn, el parámetro formal f_conn ahora contiene los dos campos adicionales distancia y distid debido a la tipificación utilizando wa_conn. Utilice el punto de ampliación implícito correspondiente para que aparezcan estos campos. a) El punto de ampliación implícito que se utilizará se encuentra al final de la subrutina. FORM display_conn
USING f_conn LIKE wa_conn.
WRITE: / f_conn-carrid, f_conn-connid, f_conn-cityfrom, f_conn-cityto. """""""""""""""""""""""""""""""""""" *$*$-Start: (2)---------------------$*$* ENHANCEMENT 2 ZBC427_00_IEP_STRFORM. "active version WRITE: f_conn-distance, f_conn-distid. ENDENHANCEMENT. *$*$-End: (2)---------------------$*$* ENDFORM.
178
© Copyright . Reservados todos los derechos.
Lección: Uso de otras ampliaciones implícitas
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Usar ampliaciones implícitas en clases locales de SAP
●
Usar ampliaciones implícitas en implementaciones de ampliaciones existentes
●
Usar las ampliaciones implícitas en programas de SAP
© Copyright . Reservados todos los derechos.
179
Capítulo 6: Puntos de ampliación, opciones de ampliación y secciones de ampliación
180
© Copyright . Reservados todos los derechos.
Capítulo 6 Evaluación de la formación
1. Los puntos de ampliación implícitos requieren preparativos de SAP. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
2. Los clientes pueden utilizar puntos o secciones de ampliación al crear una implementación de ampliación para el ______________ relacionado. Seleccione la respuesta correcta. X
A Sección de ampliación implícita
X
B Punto de ampliación explícito
X
C Punto de ampliación
3. ¿Qué sintaxis se utiliza para identificar un punto de ampliación explícito? Seleccione la respuesta correcta. X
A ENHANCEMENT-SECTION
X
B ENHANCEMENT-POINT
X
C END-ENHANCEMENT SECTION
4. Es posible tener más de una implementación para un punto de ampliación que pertenece a distintas implementaciones de ampliación. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
© Copyright . Reservados todos los derechos.
181
Capítulo 6: Evaluación de la formación
5. Los puntos y las secciones de ampliación explícitos están almacenados en un ___________. Seleccione la respuesta correcta. X
A Conflicto-disolución o switch de conexión
X
B Punto de ampliación
X
C Implementación de ampliación
6. Un punto de ampliación implícito le ofrece la opción de insertar un código fuente adicional en ciertos puntos del código fuente de SAP. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
7. El concepto de ampliación le permite ampliar los métodos en las clases de SAP. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
8. Para utilizar los puntos y las opciones de ampliación implícitos, debe crear un ___________. Seleccione la respuesta correcta. X
A Punto de ampliación explícito
X
B Implementación de ampliación
X
C Sección de ampliación explícita
9. Los parámetros añadidos a un módulo de función de SAP con una ampliación implícita pueden ser obligatorios. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
10. Los métodos de sobrescritura reemplazan la implementación del método original. Indique si esta afirmación es verdadera o falsa.
182
X
Verdadero
X
Falso
© Copyright . Reservados todos los derechos.
Capítulo 6: Evaluación de la formación
11. Identifique las ampliaciones implícitas disponibles en las clases locales de SAP. Seleccione las respuestas correctas. X
A Al comienzo y al final del método
X
B Al final del bloque de implementación
X
C Añadir parámetro de importación
© Copyright . Reservados todos los derechos.
183
Capítulo 6 Respuestas a la Evaluación de la formación
1. Los puntos de ampliación implícitos requieren preparativos de SAP. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
2. Los clientes pueden utilizar puntos o secciones de ampliación al crear una implementación de ampliación para el ______________ relacionado. Seleccione la respuesta correcta. X
A Sección de ampliación implícita
X
B Punto de ampliación explícito
X
C Punto de ampliación
3. ¿Qué sintaxis se utiliza para identificar un punto de ampliación explícito? Seleccione la respuesta correcta. X
A ENHANCEMENT-SECTION
X
B ENHANCEMENT-POINT
X
C END-ENHANCEMENT SECTION
4. Es posible tener más de una implementación para un punto de ampliación que pertenece a distintas implementaciones de ampliación. Indique si esta afirmación es verdadera o falsa.
184
X
Verdadero
X
Falso
© Copyright . Reservados todos los derechos.
Capítulo 6: Respuestas a la Evaluación de la formación
5. Los puntos y las secciones de ampliación explícitos están almacenados en un ___________. Seleccione la respuesta correcta. X
A Conflicto-disolución o switch de conexión
X
B Punto de ampliación
X
C Implementación de ampliación
6. Un punto de ampliación implícito le ofrece la opción de insertar un código fuente adicional en ciertos puntos del código fuente de SAP. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
7. El concepto de ampliación le permite ampliar los métodos en las clases de SAP. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
8. Para utilizar los puntos y las opciones de ampliación implícitos, debe crear un ___________. Seleccione la respuesta correcta. X
A Punto de ampliación explícito
X
B Implementación de ampliación
X
C Sección de ampliación explícita
9. Los parámetros añadidos a un módulo de función de SAP con una ampliación implícita pueden ser obligatorios. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
© Copyright . Reservados todos los derechos.
185
Capítulo 6: Respuestas a la Evaluación de la formación
10. Los métodos de sobrescritura reemplazan la implementación del método original. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
11. Identifique las ampliaciones implícitas disponibles en las clases locales de SAP. Seleccione las respuestas correctas.
186
X
A Al comienzo y al final del método
X
B Al final del bloque de implementación
X
C Añadir parámetro de importación
© Copyright . Reservados todos los derechos.
CAPÍTULO 7
Add-ins empresariales (BAdI)
Lección 1 Comprensión del cambio de las Add-ins empresariales clásicas a las nuevas Add-ins empresariales 188 Ejercicio 10: Implementación de exits de programa para BAdI clásicos 193
Lección 2 Implementación de exits de programa para nuevas Add-ins empresariales (BAdI) Ejercicio 11: Implementación de exits de programa para nuevos BAdI
196 203
Lección 3 Implementación de exits de menú de nuevos Add-ins empresariales (BAdI) Ejercicio 12: Implementación de exits de menú para nuevas BAdI
206 213
Lección 4 Implementación de nuevos exits de dynpro de Add-ins empresariales (BAdI) Ejercicio 13: Implementación de exits de dynpro para nuevas BAdI
216 221
OBJETIVOS DEL CAPÍTULO ●
Explicar la integración de Add-Ins empresariales (BAdIs) en el concepto de ampliación
●
Describir los Add-ins empresariales (BAdI) clásicos
●
Implementar Add-ins empresariales (BAdI) clásicos
●
Implementar exits de programa para nuevos Add-ins empresariales (BAdI)
●
Implementar exits de menú para nuevos Add-ins empresariales (BAdI)
●
Implementar exits de dynpro para nuevos Add-ins empresariales (BAdI)
© Copyright . Reservados todos los derechos.
187
Capítulo 7 Lección 1 Comprensión del cambio de las Add-ins empresariales clásicas a las nuevas Add-ins empresariales
RESUMEN DE LA LECCIÓN En este módulo se proporciona información sobre la nueva tecnología de Add-Ins empresariales (BAdI) disponible desde SAP NetWeaver 7.0, y se explica cómo buscar y utilizar BAdI clásicos y nuevos. Ejemplo empresarial Como desarrollador, desea aprender a utilizar los BAdI para ampliar su software SAP sin realizar modificaciones. Por este motivo, se requieren los siguientes conocimientos: ●
Comprensión de la nueva tecnología BAdI
●
Comprensión de los BAdI clásicos
●
Comprensión de cómo implementar los BAdI nuevos
●
Comprensión de cómo implementar exits de programa para BAdI clásicos
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Explicar la integración de Add-Ins empresariales (BAdIs) en el concepto de ampliación
●
Describir los Add-ins empresariales (BAdI) clásicos
●
Implementar Add-ins empresariales (BAdI) clásicos
Nueva tecnología de BAdI Desde SAP NetWeaver 7.0, SAP pretende utilizar la nueva tecnología BAdI para ampliaciones futuras. Los BadI han existido desde SAP R/3 4.6 y proporcionan una tecnología de ampliación moderna. A continuación se detallan los motivos que SAP presentó en la nueva tecnología de BAdI: ● La nueva tecnología de BAdI mejora el rendimiento. ●
La nueva tecnología de BAdI proporciona algunas funciones adicionales: -
-
188
Concepto de filtro ampliado Opción para heredar atributos a partir de clases de implementación de muestra (redefinición de método selectivo)
© Copyright . Reservados todos los derechos.
Lección: Comprensión del cambio de las Add-ins empresariales clásicas a las nuevas Add-ins empresariales
●
Los nuevos BAdI vienen integrados en el nuevo concepto de ampliación con puntos y secciones de ampliación.
El concepto de ampliación disponible desde SAP NetWeaver 7.0 administra BAdI clásicos y nuevos con opciones, puntos y secciones de ampliación. Resumen de los BAdI en el concepto de ampliación
Figura 112: Resumen de los BAdI en el concepto de ampliación
A diferencia de los BAdI clásicos, los nuevos BAdI siempre pertenecen a los puntos de ampliación, que los administran. Aunque SAP creará nuevos BAdI a partir de ahora, aún hay muchas ampliaciones que proporcionan los BAdI clásicos y, por lo tanto, siguen siendo muy importantes.
© Copyright . Reservados todos los derechos.
189
Capítulo 7: Add-ins empresariales (BAdI)
BAdI clásicos
Figura 113: Exit de programa para BAdI clásico: arquitectura
La figura muestra cómo funciona un exit de programa que se proporciona con la tecnología clásica de BAdI. Una definición de BAdI y una interfaz se crean con la transacción SE18. La creación del BAdI y de la interfaz genera la creación automática de una clase de adaptador BAdI y un método de puente correspondiente que la aplicación de SAP llama para derivar al código relevante. La única tarea de este método de puente es llamar las implementaciones activas existentes de las soluciones industriales, los interlocutores y los clientes, y uno después del otro. No es posible garantizar la secuencia en que se llamarán.
190
© Copyright . Reservados todos los derechos.
Lección: Comprensión del cambio de las Add-ins empresariales clásicas a las nuevas Add-ins empresariales
Exit de programa para BAdI clásico: sintaxis de llamada en el programa de SAP
Figura 114: Exit de programa para BAdI clásico: sintaxis de llamada en el programa de SAP
La figura muestra la sintaxis que se utiliza para preparar y llamar el método de puente del programa de SAP. En el programa de SAP, una variable de referencia se define con la clase de interfaz BAdI que ya se definió. Cuando se llama el método estático GET_INSTANCE de la clase estándar CL_EXITHANDLER, se crea una instancia de la clase de adaptador (instancia BAdI). A continuación el método de puente se llama a través de la instancia BAdI y accede a las implementaciones relevantes. Buscar un exit de programa para BAdI clásico ●
●
●
Para realizar una búsqueda de BAdI libre, utilice la transacción SE84. Para detallar los BAdI para una aplicación específica, utiliza la transacción SE81, seguida de la transacción SE84. Para realizar una búsqueda relativa al programa: a) Busque GET_INSTANCE globalmente en el programa. b) Para navegar a la interfaz de BAdI, haga doble clic en la variable de referencia arrojada por el método GET_INSTANCE y después haga doble clic en la interfaz que se utiliza para indicar esta variable de referencia. c) Realice una búsqueda de utilización para determinar dónde se utiliza la interfaz en las clases denominadas CL_EX_. d) Lea la documentación de BAdI en SE18.
© Copyright . Reservados todos los derechos.
191
Capítulo 7: Add-ins empresariales (BAdI)
Nota: También puede ser necesario realizar una búsqueda de GET_INSTANCE en los módulos y métodos de función llamados por el programa principal. O bien, puede seguir los pasos siguientes para realizar una búsqueda relativa al programa: ●
En el Debuggerr, establezca un breakpoint para el método GET_INSTANCE.
●
En el programa, busque los usos de las variables de referencia que se hallaron.
Para implementar un exit de programa para BAdI clásico Siga estos pasos para implementar un exit de programa para BAdI clásico: 1. Visualice la definición de BAdI en la transacción SE18. 2. Seleccione Implementación → Crear y acceda a la transacción SE19. 3. Especifique un nombre para la implementación de BAdI. 4. Para implementarlos, haga doble clic en los nombres de los métodos de la etiqueta Interfaz. 5. Active los métodos y la clase de implementación. 6. Active la implementación de BAdI.
192
© Copyright . Reservados todos los derechos.
Capítulo 7 Ejercicio 10 Implementación de exits de programa para BAdI clásicos
Ejemplo empresarial Como desarrollador, deberá realizar cambios en un programa estándar de SAP. Desea realizar una búsqueda en el programa para determinar si existe un exit programa BAdI clásico que pueda implementar para ampliar el código. 1. Desea añadir columnas adicionales a la lista del programa SAP BC427_##_CBD_PX (donde ## representa su número de grupo) sin realizar modificaciones. Averigüe si el programa SAP contiene un exit de programa para BAdI clásico para este fin. 2. Si corresponde, utilice el exit de programa BAdI que encontró para añadir las columnas deseadas a la salida del programa. Denomine su implementación ZBC427_##_CBD_PX.
© Copyright . Reservados todos los derechos.
193
Capítulo 7 Solución 10 Implementación de exits de programa para BAdI clásicos
Ejemplo empresarial Como desarrollador, deberá realizar cambios en un programa estándar de SAP. Desea realizar una búsqueda en el programa para determinar si existe un exit programa BAdI clásico que pueda implementar para ampliar el código. 1. Desea añadir columnas adicionales a la lista del programa SAP BC427_##_CBD_PX (donde ## representa su número de grupo) sin realizar modificaciones. Averigüe si el programa SAP contiene un exit de programa para BAdI clásico para este fin. a) Realice una búsqueda global en el programa para GET_INSTANCE. Examine la descripción en el módulo. b) Para navegar hacia la definición de variable, haga doble clic en la variable de referencia utilizada para la llamada de método. c) Para navegar hacia la interfaz, haga doble clic en el nombre de la interfaz de BAdI utilizada para definir la variable de referencia. d) Realice una búsqueda de utilización para el uso de la interfaz en los Add-Ins empresariales. 2. Si corresponde, utilice el exit de programa BAdI que encontró para añadir las columnas deseadas a la salida del programa. Denomine su implementación ZBC427_##_CBD_PX. method a) IF_EX_BC427_00_EXT_FL_DISP~WRITE_ADDITIONAL_COLS. WRITE: i_wa_sflight-price CURRENCY i_wa_sflight-currency, i_wa_sflight-currency. endmethod.
194
© Copyright . Reservados todos los derechos.
Lección: Comprensión del cambio de las Add-ins empresariales clásicas a las nuevas Add-ins empresariales
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Explicar la integración de Add-Ins empresariales (BAdIs) en el concepto de ampliación
●
Describir los Add-ins empresariales (BAdI) clásicos
●
Implementar Add-ins empresariales (BAdI) clásicos
© Copyright . Reservados todos los derechos.
195
Capítulo 7 Lección 2 Implementación de exits de programa para nuevas Add-ins empresariales (BAdI)
RESUMEN DE LA LECCIÓN En este módulo se describe la implementación y el uso de los exits de programa para el nuevo Add-In empresarial (BAdI). Ejemplo empresarial Como desarrollador, necesita comprender la arquitectura y la sintaxis de los exits de programa de los nuevos BAdI para que pueda implementarlos. Por este motivo, requiere los siguientes conocimientos: ●
Comprensión de la Arquitectura de los exits de programa para los nuevos BAdI
●
Comprensión de la nueva sintaxis de exits de programa para BAdI
●
Comprensión de la forma de buscar exits de programa para nuevos BAdI
●
Comprensión de la forma de Implementar exits de programa para nuevos BAdI
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
196
Implementar exits de programa para nuevos Add-ins empresariales (BAdI)
© Copyright . Reservados todos los derechos.
Lección: Implementación de exits de programa para nuevas Add-ins empresariales (BAdI)
Arquitectura de los exits de programa para los nuevos BAdI
Figura 115: Exit de programa para BAdI nuevo: arquitectura
La figura muestra la arquitectura de un exit de programa que se proporciona con la nueva tecnología de BAdI. La nueva tecnología de BAdI funciona de manera similar a los BAdI clásicos. Ya no se crean clases adaptadores de BAdI, lo que significa que el programa de aplicación de SAP no se tiene que instanciar. En su lugar, en el tiempo de ejecución del programa de aplicación, el sistema genera un handle de BAdI en el núcleo que realiza la misma función que la clase de adaptador, y llama los métodos de implementación disponibles con mayor eficacia.
© Copyright . Reservados todos los derechos.
197
Capítulo 7: Add-ins empresariales (BAdI)
Sintaxis de exit de programa para BAdI nuevo
Figura 116: Exit de programa para BAdI nuevo: sintaxis de llamada en el programa de SAP
La figura muestra la sintaxis en un programa de SAP que llama un BAdI nuevo. A diferencia de la tecnología de BAdI clásico, la variable de referencia se indica directamente en el BAdI, en lugar de en la interfaz de BAdI. El programa de SAP genera el núcleo de BAdI que utiliza la sentencia GET BADI que especifica la variable de referencia. Si no encuentra una implementación de BAdI activa, se lanza la excepción cx_badi_not_implemented. El programa de SAP accede a la implementación pertinente cuando se llama el método de puente del núcleo BAdI (CALL BADI). Si se utiliza una referencia de núcleo inicial para la sentencia CALL BADI (por ejemplo, porque la sentencia GET BADI no se realizó con éxito), se desencadenará la excepción cx_badi_initial_reference. Conocer la sintaxis requerida en el programa de SAP le permite realizar una búsqueda relativa al programa para nuevos BAdI. Para realizar una búsqueda libre de BAdI o puntos de ampliación, utilice la transacción SE84. Para detallar los BAdI o los puntos de ampliación de una aplicación específica, utilice la transacción SE81 seguida de la transacción SE84. buscar exits de programa para nuevos BAdI
A continuación se detallan los pasos para buscar exits de programa para nuevos BAdI: 1. Realice una búsqueda global en el programa para GET BADI. 2. Para navegar hacia la definición de variable, haga doble clic en la variable de referencia utilizada en la sentencia GET BADI.
198
© Copyright . Reservados todos los derechos.
Lección: Implementación de exits de programa para nuevas Add-ins empresariales (BAdI)
3. Haga doble clic en el nombre de BAdI para navegar hacia la visualización del punto de ampliación correspondiente.
Nota: También puede ser necesario realizar una búsqueda en los módulos y métodos de función llamados en el programa de SAP.
O bien, puede seguir los pasos siguientes para realizar una búsqueda relacionada para BAdI nuevos: ●
En el Debuggerr, establezca un breakpoint para el método GET BADI.
●
En el programa, busque los usos de las variables de referencia determinadas.
Implementación de exits de programa para nuevos BAdI A continuación se detallan los pasos para crear una implementación de BAdI: 1. Visualice el punto de ampliación correspondiente. 2. Seleccione Implementar punto de ampliación y cree la implementación de ampliación. 3. Especifique un nombre para la implementación de ampliación. 4. Especifique un nombre para las implementaciones de BAdI. 5. Actualice los atributos para las implementaciones de BAdI. 6. En el área de navegación para el BAdI requerido, seleccione Clase de implementación. 7. Especifique el nombre de la clase de implementación que puede heredar de la clase de muestra. O bien, puede copiarla. Seleccione el pulsador Cambiar. 8. Haga doble clic en el método para implementarlo o ajustarlo. 9. Active el método y todos los datos correspondientes, incluida la implementación de la ampliación.
© Copyright . Reservados todos los derechos.
199
Capítulo 7: Add-ins empresariales (BAdI)
Implementación de los exits de programa para nuevos BAdI
Figura 117: Punto de ampliación con definición de BAdI
La figura le muestra un punto de ampliación con una definición de BAdI (nuevo). Para usar un BAdI,, debe crear una implementación de ampliación que sea una implementación del punto de ampliación de nivel superior. Debe crear una implementación de BAdI para cada BAdI que desea utilizar en el punto de ampliación. Implementación del punto de ampliación con la implementación de BAdI
Figura 118: Implementación del punto de ampliación con la implementación de BAdI
La figura le muestra una implementación de punto de ampliación con una implementación de BAdI (nuevo).
200
© Copyright . Reservados todos los derechos.
Lección: Implementación de exits de programa para nuevas Add-ins empresariales (BAdI)
BAdI dependientes de filtro
Figura 119: BAdI dependientes de filtro
La figura ilustra el concepto de los BAdI dependientes de filtro. Algunos BAdI clásicos eran dependientes de filtro, pero la funcionalidad se ha ampliado en los BAdI nuevos. Los BAdI dependientes de filtro ahora permiten: Filtros numéricos
●
●
●
Implementaciones con valores de filtro individuales y condiciones de filtro que utilizan los operadores <>, >, <. >=, <=, CP y NP Múltiples filtros para una implementación de BAdI
© Copyright . Reservados todos los derechos.
201
Capítulo 7: Add-ins empresariales (BAdI)
202
© Copyright . Reservados todos los derechos.
Capítulo 7 Ejercicio 11 Implementación de exits de programa para nuevos BAdI
Ejemplo empresarial Como desarrollador, deberá realizar cambios en un programa estándar de SAP. Desea buscar en el programa para determinar si existe un exit de programa para nuevo BAdI que puede implementar para ampliar el código. 1. Desea añadir columnas adicionales a la lista del programa SAP BC427_##_NBD_PX (donde ## representa su número de grupo) sin realizar modificaciones. Averigüe si el programa SAP contiene un programa para BAdI nuevo para este fin. 2. Si corresponde, utilice el exit de programa BAdI que encontró para añadir las columnas deseadas a la salida del programa. Asigne nombres a los siguientes componentes: ●
Implementación de ampliación (implementación del punto) como ZBC427_##_PXBADI_SPOT
●
Implementación de BAdI como ZBC427_##_NBD_PX
●
Implementación de clase como ZCL_BC427_##_NBD_PX
© Copyright . Reservados todos los derechos.
203
Capítulo 7 Solución 11 Implementación de exits de programa para nuevos BAdI
Ejemplo empresarial Como desarrollador, deberá realizar cambios en un programa estándar de SAP. Desea buscar en el programa para determinar si existe un exit de programa para nuevo BAdI que puede implementar para ampliar el código. 1. Desea añadir columnas adicionales a la lista del programa SAP BC427_##_NBD_PX (donde ## representa su número de grupo) sin realizar modificaciones. Averigüe si el programa SAP contiene un programa para BAdI nuevo para este fin. a) Realice una búsqueda global en el programa para GET BADI y CALL BADI. b) Haga doble clic en la variable de referencia utilizada para navegar a la definición de variable. c) Haga doble clic en el nombre de BAdI para navegar hacia la visualización del punto de ampliación correspondiente. 2. Si corresponde, utilice el exit de programa BAdI que encontró para añadir las columnas deseadas a la salida del programa. Asigne nombres a los siguientes componentes: ●
Implementación de ampliación (implementación del punto) como ZBC427_##_PXBADI_SPOT
●
Implementación de BAdI como ZBC427_##_NBD_PX
●
Implementación de clase como ZCL_BC427_##_NBD_PX
METHOD a) if_ex_bc427_00_px_badi~write_additional_cols. WRITE: i_wa_spfli-distance, i_wa_spfli-distid. ENDMETHOD.
204
© Copyright . Reservados todos los derechos.
Lección: Implementación de exits de programa para nuevas Add-ins empresariales (BAdI)
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Implementar exits de programa para nuevos Add-ins empresariales (BAdI)
© Copyright . Reservados todos los derechos.
205
Capítulo 7 Lección 3 Implementación de exits de menú de nuevos Add-ins empresariales (BAdI)
RESUMEN DE LA LECCIÓN En este módulo se describe la implementación y el uso de los nuevos exits de menú para el Add-In empresarial (BAdI). Ejemplo empresarial Como desarrollador, debe comprender la arquitectura y la sintaxis de los nuevos exits de menú para BAdI para poder implementarlos y añadir nuevas entradas de menú a los menús estándar de SAP. Por este motivo, se requieren los siguientes conocimientos: ●
Comprensión del principio y la arquitectura de los exits de menú para BAdI
●
Comprensión de la sintaxis de los exits de menú para BAdI
●
Comprensión de la forma de hallar e implementar un nuevo exit de menú para BAdI
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
206
Implementar exits de menú para nuevos Add-ins empresariales (BAdI)
© Copyright . Reservados todos los derechos.
Lección: Implementación de exits de menú de nuevos Add-ins empresariales (BAdI)
Principio y arquitectura de los exits de menú BAdI
Figura 120: Exits de menú para BAdI: principio
La figura muestra el principio de un exit de menú que SAP proporcionó con la nueva tecnología de BAdI. Los exits de esta clase solo pueden tener una implementación activa. Los exits de menú brindan a los clientes la opción de implementar entradas de menú adicionales que desencadenan el código personalizado en los dynpro de SAP.
© Copyright . Reservados todos los derechos.
207
Capítulo 7: Add-ins empresariales (BAdI)
Arquitectura y detalles de los exits de menú para BAdI
Figura 121: Exits de menú para BAdI: arquitectura y detalles
En la figura, para el GUI STATUS correspondiente, el desarrollador del dynpro SAP prepara una opción de menú, que aún no se encuentra visible, con un código de función especificado (siempre comienza con un signo +). También encontrará un exit de programa para BAdI relacionado con este código de función en la lógica de flujo Proceso después de entrada (PAI) del dynpro en cuestión, y el exit de programa puede utilizarse para implementar una función. Cuando un cliente implementa un BAdI de esta clase, no solo especifica el texto de la opción de menú adicional. También debe implementar el exit de programa para BAdI con la codificación que se ejecutará cuando el usuario selecciona la entrada del menú. Cuando se implementa el exit de menú para BAdI, la entrada del menú de dynpro de SAP se activa y se visualiza. Si el usuario selecciona la entrada de menú, se procesa la lógica personalizada.
208
© Copyright . Reservados todos los derechos.
Lección: Implementación de exits de menú de nuevos Add-ins empresariales (BAdI)
Sintaxis de exits de menú para BAdI
Figura 122: Sintaxis de exits de menú para BAdI
La figura muestra la sintaxis de llamada en el programa de SAP correspondiente. Es idéntica a la sintaxis de llamada para exits de programa. Aquí la llamada se realizará específicamente en un módulo PAI para el código de función especial que representa el exit de menú (comenzando por un signo +).
© Copyright . Reservados todos los derechos.
209
Capítulo 7: Add-ins empresariales (BAdI)
Exits de menú para BAdI: implementación
Figura 123: Exits de menú para BAdI: implementación
La figura muestra un ejemplo de una implementación de exit de menú para BAdI. Se ha actualizado texto de menú que el usuario ve en el menú. La implementación del exit de programa también puede actualizarse en Clase de implementación, al igual que con un exit de programa para BAdI común.
Implementar un exit de menú para BAdI A continuación se detallan los pasos para buscar y utilizar nuevos exits de menú para BAdI: 1. En el estado de GUI del dynpro, busque el código de función que comienza con un signo + (más). 2. En los módulos de PAI del dynpro, busque una referencia al código de función correspondiente. 3. Para el comando CALL BADI que se relaciona con el código de función, haga doble clic en la variable de referencia que se utiliza en la llamada para navegar hacia la definición. 4. Para navegar hacia la visualización del punto de ampliación correspondiente al que pertenece el BAdI, haga doble clic en el BAdI utilizado para la tipificación. 5. Lea la documentación de BAdI y, si es necesario, cree una implementación para el punto y luego una implementación para el BAdI en sí. 6. Implemente el exit de programa disponible en el BAdI. 7. Haga doble clic en el exit de menú disponible en el BAdI para implementarlo.
210
© Copyright . Reservados todos los derechos.
Lección: Implementación de exits de menú de nuevos Add-ins empresariales (BAdI)
8. Especifique el texto para la entrada de menú adicional. 9. Active todos los objetos.
© Copyright . Reservados todos los derechos.
211
Capítulo 7: Add-ins empresariales (BAdI)
212
© Copyright . Reservados todos los derechos.
Capítulo 7 Ejercicio 12 Implementación de exits de menú para nuevas BAdI
Ejemplo empresarial Como desarrollador, deberá realizar cambios en un menú de un dynpro estándar de SAP. Desea realizar una búsqueda en el programa para determinar si existe un exit de menú para BAdI que puede implementar para proporcionar una entrada adicional en el menú que utiliza su código personalizado cuando lo elige un usuario. 1. El programa SAP BC427_##_NBD_MX (donde ## representa el número de grupo) muestra el registro maestro requerido del cliente en un dynpro después de indicar un ID de cliente. Desde el dynpro de visualización del cliente, desea proporcionar una entrada de menú adicional para detallar las reservas de vuelos del cliente. Averigüe si tiene un exit de menú para BAdI en esta entrada de menú. 2. Si corresponde, utilice el exit de menú que encontró para llamar el programa BC427_CUSTOMER_BOOKINGS y visualizar las reservas de vuelo relevantes del cliente que se visualiza en el dynpro Selección. Este programa proporciona el parámetro CUSTOMID que se utiliza para indicar un ID de cliente y detallar las reservas correspondientes. Asigne un nombre a los componentes de la siguiente manera: ●
Implementación de ampliación (implementación del punto) como ZBC427_##_MXBADI_SPOT
●
Implementación de BAdI como ZBC427_##_NBD_MX
●
Implementación de clase como ZCL_BC427_##_NBD_MX
© Copyright . Reservados todos los derechos.
213
Capítulo 7 Solución 12 Implementación de exits de menú para nuevas BAdI
Ejemplo empresarial Como desarrollador, deberá realizar cambios en un menú de un dynpro estándar de SAP. Desea realizar una búsqueda en el programa para determinar si existe un exit de menú para BAdI que puede implementar para proporcionar una entrada adicional en el menú que utiliza su código personalizado cuando lo elige un usuario. 1. El programa SAP BC427_##_NBD_MX (donde ## representa el número de grupo) muestra el registro maestro requerido del cliente en un dynpro después de indicar un ID de cliente. Desde el dynpro de visualización del cliente, desea proporcionar una entrada de menú adicional para detallar las reservas de vuelos del cliente. Averigüe si tiene un exit de menú para BAdI en esta entrada de menú. a) En el estado de GUI del dynpro, busque un código de función que comienza con un signo + (más). b) En los módulos PAI del dynpro, busque el código de función para determinar cuál es el exit de programa que se llama para el código de función. c) Para el comando CALL BADI, haga doble clic en la variable de referencia especificada para navegar a esta definición. d) Haga doble clic en el BAdI utilizado para la tipificación para navegar hacia la visualización del punto de ampliación correspondiente al que pertenece el BAdI. 2. Si corresponde, utilice el exit de menú que encontró para llamar el programa BC427_CUSTOMER_BOOKINGS y visualizar las reservas de vuelo relevantes del cliente que se visualiza en el dynpro Selección. Este programa proporciona el parámetro CUSTOMID que se utiliza para indicar un ID de cliente y detallar las reservas correspondientes. Asigne un nombre a los componentes de la siguiente manera: ●
Implementación de ampliación (implementación del punto) como ZBC427_##_MXBADI_SPOT
●
Implementación de BAdI como ZBC427_##_NBD_MX
●
Implementación de clase como ZCL_BC427_##_NBD_MX
a) Sintaxis para llamar el programa y visualizar las reservas: SUBMIT BC427_CUSTOMER_BOOKINGS WITH customid
214
= im_customid AND RETURN.
© Copyright . Reservados todos los derechos.
Lección: Implementación de exits de menú de nuevos Add-ins empresariales (BAdI)
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Implementar exits de menú para nuevos Add-ins empresariales (BAdI)
© Copyright . Reservados todos los derechos.
215
Capítulo 7 Lección 4 Implementación de nuevos exits de dynpro de Add-ins empresariales (BAdI)
RESUMEN DE LA LECCIÓN En este módulo se describe la implementación y el uso de los nuevos exits de dynpro para el Add-In empresarial (BAdI). Ejemplo empresarial Como desarrollador, debe comprender la arquitectura y la sintaxis de los nuevos exits de dynpro para BAdI para poder añadir más campos en un dynpro estándar de SAP. Por este motivo, se requieren los siguientes conocimientos: ●
Comprensión del principio, la arquitectura y la sintaxis de los exits de dynpro para BAdI
●
Comprensión de la forma de Implementar exits de dynpro para nuevos BAdI
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Implementar exits de dynpro para nuevos Add-ins empresariales (BAdI)
Principio, arquitectura y sintaxis de los exits de dynpro para BAdI
Figura 124: Exits de dynpro para BAdI: principio
216
© Copyright . Reservados todos los derechos.
Lección: Implementación de nuevos exits de dynpro de Add-ins empresariales (BAdI)
La figura muestra el principio de un exit de dynpro que SAP creó con la nueva tecnología de BAdI. Similar a los exits de menú, solo puede haber una implementación activa de un exit de dynpro. Los exits de dynpro brindan a los clientes la opción de visualizar campos adicionales u otros elementos de dynpro en un dynpro de SAP sin realizar modificaciones. Por ejemplo, puede utilizar los exits de dynpro para visualizar campos de una estructura Append de cliente relacionada con los datos que ya se visualizan en el dynpro. El desarrollador de dynpro de SAP reserva un área subscreen para almacenar un subscreen de cliente. El subscreen del cliente debe definirse en un grupo de funciones del cliente y debe contener los campos adicionales que se visualizarán. En la implementación de cliente correspondiente del BAdI, se especifica la referencia al subscreen y este se determina y utiliza en el PBO (proceso antes de resultado) del dynpro de SAP. Exits de dynpro para BAdI: arquitectura y sintaxis de llamada
Figura 125: Exits de dynpro para BAdI: arquitectura y sintaxis de llamada
Para garantizar que el subscreen de cliente muestre los datos correctos, los datos se traspasan del PBO del dynpro de SAP (al llamar el método de puente correspondiente) a la implementación del método BAdI del cliente. El cliente debe implementar el método BAdI de manera que el módulo de función del cliente correspondiente de su grupo de funciones se llame al momento del traspaso de datos. Esta implementación del método BAdI debe garantizar el traspaso de datos a los datos globales del grupo de funciones que, a la vez, se utiliza para proporcionar los datos para los campos del subscreen. Por lo tanto, en el grupo de funciones del cliente, además del subscreen en sí, es necesario crear una estructura de TABLES correspondiente (en el Include TOP) para el intercambio de datos y un módulo de función correspondiente que se llamará en la implementación del cliente del método BAdI. Si el dynpro tiene campos de entrada (es decir, permite al usuario modificar datos), debe implementar otro método BAdI de manera que llame otro módulo de funciones del grupo de
© Copyright . Reservados todos los derechos.
217
Capítulo 7: Add-ins empresariales (BAdI)
funciones del cliente. Esto permite que el BAdI obtenga datos traspasados del subscreen a la estructura de TABLES y los exporte al programa de llamada del método. El programa de SAP llama este método BAdI en la lógica de flujo PAI de su dynpro (con el método de puente) para recibir los datos del subscreen y procesarlos.
Implementación de los exits de dynpro para nuevos BAdI
Figura 126: Exits de dynpro para BAdI: implementación
La figura muestra una implementación de un exit de dynpro para nuevo BAdI. Buscar y utilizar exits de dynpro para BAdI 1. En el dynpro estándar de SAP, busque un área subscreen (búsqueda previa opcional). 2. En el programa estándar de SAP, busque el comando GET BADI. También encontrará el método GET_PROG_AND_DYNP_FOR_SUBSCR de la clase CL_ENH_BADI_RUNTIME_FUNCTIONS, que le informa sobre la disponibilidad de un exit de dynpro para BAdI. 3. Para navegar hacia la definición de variable de referencia, haga doble clic en la variable de referencia utilizada en la sentencia GET BADI. 4. Para navegar hacia el punto de ampliación al que pertenece el BAdI, haga doble clic en el BAdI utilizado para indicar la variable de referencia. 5. Lea la documentación del BAdI y realice los pasos posteriores para la implementación de BAdI. 6. Cree el grupo de funciones, incluido el subscreen, la estructura de TABLES (en el Include TOP) y los módulos de función correspondientes. 7. Cree una implementación para el punto de ampliación y para el BAdI.
218
© Copyright . Reservados todos los derechos.
Lección: Implementación de nuevos exits de dynpro de Add-ins empresariales (BAdI)
8. En el BAdI, implemente los exits de programa disponibles (los métodos de colocación y obtención). 9. En el BAdI, haga doble clic en el exit de dynpro disponible para implementarlo. 10. Especifique el subscreen y el programa principal del grupo de funciones. El nombre del programa principal es el nombre del grupo de funciones con el prefijo SAPL. 11. Active todos los objetos.
© Copyright . Reservados todos los derechos.
219
Capítulo 7: Add-ins empresariales (BAdI)
220
© Copyright . Reservados todos los derechos.
Capítulo 7 Ejercicio 13 Implementación de exits de dynpro para nuevas BAdI
Ejemplo empresarial Como desarrollador, deberá realizar cambios en un dynpro estándar de SAP. Desea buscar en el programa para determinar si existe un exit de dynpro para BAdI que puede implementar para añadir campos adicionales al dynpro estándar de SAP. 1. Después de que el usuario elige un ID de compañía aérea, el programa de SAP BC427_##_NBD_SX (donde ## representa su número de grupo) muestra los detalles de la aerolínea especificada en un dynpro. También desea visualizar allí la moneda local de una aerolínea. Averigüe si tiene un exit de dynpro para BAdI en este caso. 2. Si corresponde, utilice el exit de dynpro para visualizar también el campo SCARR -CURRCODE (moneda local de la aerolínea). Asigne un nombre a sus componentes de la siguiente manera: ●
Implementación de ampliación (implementación del punto) como ZBC427_##_SXBADI_SPOT
●
Implementación de BAdI como ZBC427_##_NBD_SX
●
Implementación de clase como ZCL_BC427_##_NBD_SX
●
Grupo de funciones para el subscreen como ZSCREEN_EXIT_##
© Copyright . Reservados todos los derechos.
221
Capítulo 7 Solución 13 Implementación de exits de dynpro para nuevas BAdI
Ejemplo empresarial Como desarrollador, deberá realizar cambios en un dynpro estándar de SAP. Desea buscar en el programa para determinar si existe un exit de dynpro para BAdI que puede implementar para añadir campos adicionales al dynpro estándar de SAP. 1. Después de que el usuario elige un ID de compañía aérea, el programa de SAP BC427_##_NBD_SX (donde ## representa su número de grupo) muestra los detalles de la aerolínea especificada en un dynpro. También desea visualizar allí la moneda local de una aerolínea. Averigüe si tiene un exit de dynpro para BAdI en este caso. a) En el dynpro estándar de SAP, busque un área subscreen (búsqueda previa opcional). b) En el programa estándar de SAP, busque el comando GET BADI. También encontrará el método GET_PROG_AND_DYNP_FOR_SUBSCR de la clase CL_ENH_BADI_RUNTIME_FUNCTIONS, que le informa sobre la disponibilidad de un exit de dynpro para BAdI. c) Para navegar hacia la definición de variable de referencia, haga doble clic en la variable de referencia utilizada en la sentencia GET BADI. d) Para navegar hacia el punto de ampliación al que pertenece el BAdI, haga doble clic en el BAdI utilizado para indicar la variable de referencia. e) Lea la documentación del BAdI y realice los pasos posteriores para la implementación de BAdI. Examine la descripción en el módulo. 2. Si corresponde, utilice el exit de dynpro para visualizar también el campo SCARR -CURRCODE (moneda local de la aerolínea). Asigne un nombre a sus componentes de la siguiente manera: ●
Implementación de ampliación (implementación del punto) como ZBC427_##_SXBADI_SPOT
●
Implementación de BAdI como ZBC427_##_NBD_SX
●
Implementación de clase como ZCL_BC427_##_NBD_SX
●
Grupo de funciones para el subscreen como ZSCREEN_EXIT_##
a) Examine la descripción en el módulo.
222
© Copyright . Reservados todos los derechos.
Lección: Implementación de nuevos exits de dynpro de Add-ins empresariales (BAdI)
Include Top del grupo de funciones: FUNCTION-POOL ZSCREEN_EXIT_00.
"MESSAGE-ID ..
TABLES scarr.
Function module of the function group: FUNCTION Z_PUT_DATA_00. *"---------------------- *"*"Local Interface: *" IMPORTING *" REFERENCE(IM_SCARR) TYPE SCARR *"---------------------* Move data from SAP program to SCARR Tables structure used for * subscreen MOVE-CORRESPONDING im_scarr to scarr. ENDFUNCTION.
Implementation of BAdI method PUT_DATA: method IF_EX_BC427_00_SX_BADI~PUT_DATA. CALL FUNCTION 'Z_PUT_DATA_00' EXPORTING IM_SCARR
= im_wa_scarr.
endmethod.
© Copyright . Reservados todos los derechos.
223
Capítulo 7: Add-ins empresariales (BAdI)
RESUMEN DE LA LECCIÓN Ahora podrá: ●
224
Implementar exits de dynpro para nuevos Add-ins empresariales (BAdI)
© Copyright . Reservados todos los derechos.
Capítulo 7 Evaluación de la formación
1. La nueva tecnología de Add-In empresarial (BAdI) se ha desarrollado para ____________. Seleccione las respuestas correctas. X
A Mejorar el rendimiento
X
B Implementar funciones adicionales
X
C Mejorar la escalabilidad
X
D Integrar en el nuevo concepto de ampliación
2. Los nuevos Add-In empresariales (BAdI) siempre pertenecen a los puntos de ampliación y son administrados por estos. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
3. Cuando utiliza los nuevos Add-Ins empresariales (BAdIs) en tiempo de ejecución, el sistema genera un handle de BAdI en el _______, que realiza la misma función que la clase de adaptador de BAdI y llama los métodos de implementación disponibles. Seleccione la respuesta correcta. X
A Shell
X
B Sistema
X
C Núcleo
4. Cuando el núcleo de Add-In empresarial (BAdI) se genera con la sentencia GET BADI, ¿qué excepción se desencadena si no encuentra una implementación de BAdI activa? Seleccione la respuesta correcta. X
A cx_badi_implemented
X
B cx_badi_not_implemented
X
C call_badi_not_implemented
© Copyright . Reservados todos los derechos.
225
Capítulo 7: Evaluación de la formación
5. Para cada Add-In empresarial (BAdI) que desea utilizar en un punto de ampliación, deberá crear una implementación de BAdI. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
6. Los exits de dynpro brindan a los clientes la opción de visualizar campos adicionales o elementos de dynpro en un dynpro de SAP. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
7. Cuando crea una implementación de un exit de dynpro para Add-In empresarial (BAdI), debe proporcionar el número de subscreen que creó y el nombre del programa principal del grupo de funciones donde lo creó. El nombre del programa principal es el nombre del grupo de funciones con el prefijo _______. Seleccione la respuesta correcta.
226
X
A SAP
X
B SPL
X
C SAPL
© Copyright . Reservados todos los derechos.
Capítulo 7 Respuestas a la Evaluación de la formación
1. La nueva tecnología de Add-In empresarial (BAdI) se ha desarrollado para ____________. Seleccione las respuestas correctas. X
A Mejorar el rendimiento
X
B Implementar funciones adicionales
X
C Mejorar la escalabilidad
X
D Integrar en el nuevo concepto de ampliación
2. Los nuevos Add-In empresariales (BAdI) siempre pertenecen a los puntos de ampliación y son administrados por estos. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
3. Cuando utiliza los nuevos Add-Ins empresariales (BAdIs) en tiempo de ejecución, el sistema genera un handle de BAdI en el _______, que realiza la misma función que la clase de adaptador de BAdI y llama los métodos de implementación disponibles. Seleccione la respuesta correcta. X
A Shell
X
B Sistema
X
C Núcleo
© Copyright . Reservados todos los derechos.
227
Capítulo 7: Respuestas a la Evaluación de la formación
4. Cuando el núcleo de Add-In empresarial (BAdI) se genera con la sentencia GET BADI, ¿qué excepción se desencadena si no encuentra una implementación de BAdI activa? Seleccione la respuesta correcta. X
A cx_badi_implemented
X
B cx_badi_not_implemented
X
C call_badi_not_implemented
5. Para cada Add-In empresarial (BAdI) que desea utilizar en un punto de ampliación, deberá crear una implementación de BAdI. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
6. Los exits de dynpro brindan a los clientes la opción de visualizar campos adicionales o elementos de dynpro en un dynpro de SAP. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
7. Cuando crea una implementación de un exit de dynpro para Add-In empresarial (BAdI), debe proporcionar el número de subscreen que creó y el nombre del programa principal del grupo de funciones donde lo creó. El nombre del programa principal es el nombre del grupo de funciones con el prefijo _______. Seleccione la respuesta correcta.
228
X
A SAP
X
B SPL
X
C SAPL
© Copyright . Reservados todos los derechos.
CAPÍTULO 8
Introducción a Web Dynpro
Lección 1 Resumen de los beneficios de Web Dynpro
230
Lección 2 Explicación de la arquitectura de Web Dynpro Ejercicio 14: Crear un Web Dynpro simple
235 239
Lección 3 Navegación entre vistas Ejercicio 15: Navegar entre vistas Web Dynpro
245 247
Lección 4 Utilización de conjuntos de vistas Ejercicio 16: Utilizar conjuntos de vistas
255 257
Lección 5 Explicación de la arquitectura de Web Dynpro y relaciones entre entidades
263
OBJETIVOS DEL CAPÍTULO ●
Describir el enfoque de programación de Web Dynpro
●
Explicar las ventajas del enfoque de metadatos de Web Dynpro
●
Explicar los elementos principales de Web Dynpro
●
Explicar el transporte de datos y contextos
●
Establecer la navegación entre vistas
●
Explicar conjuntos de vistas
●
Diferenciar entre entidades Web Dynpro visibles interna y externamente
© Copyright . Reservados todos los derechos.
229
Capítulo 8 Lección 1 Resumen de los beneficios de Web Dynpro
RESUMEN DE LA LECCIÓN Esta lección explica el enfoque de programación de Web Dynpro y los beneficios del enfoque de metadatos de Web Dynpro. Ejemplo empresarial Desea encontrar una tecnología más adecuada para desarrollar aplicaciones Web basadas en ABAP. Los requisitos de sus proyectos son: alta velocidad, bajo coste y elementos de UI estandarizadas. Escuchó que Web Dynpro ABAP es un buen candidato. Por lo tanto, desea obtener un resumen inicial de la funcionalidad de Web Dynpro. Por este motivo, se requieren los siguientes conocimientos: ●
●
Una buena comprensión del enfoque de programación que se utiliza para crear aplicaciones Web Dynpro Una buena comprensión de las ventajas del enfoque de metadatos de Web Dynpro
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Describir el enfoque de programación de Web Dynpro
●
Explicar las ventajas del enfoque de metadatos de Web Dynpro
Introducción a Web Dynpro Web Dynpro de SAP para Java y ABAP es un paso revolucionario en el desarrollo de interfaces de usuario basadas en Web. Difiere de cualquier otro paradigma de diseño utilizado por SAP y representa un gran avance en el desarrollo de aplicaciones de planificación de recursos para la empresa (ERP) basadas en Web. Las aplicaciones Web Dynpro están creadas mediante técnicas de programación declarativas basadas en el paradigma Modelo Vista Controlador (MVC). Es decir, usted especifica qué elementos de UI quiere en el cliente y de dónde obtienen los datos estos elementos. También puede definir las posibles rutas de navegación de forma declarativa en su aplicación. Un framework de tiempo de ejecución estándar genera todos los códigos para crear la UI automáticamente. Esto le libera de las repetitivas tareas de codificación que conlleva la escritura en HTML y el hacerla interactiva con JavaScript. Web Dynpro ABAP está disponible a partir de SAP NetWeaver Application Server 7.0. El Object Navigator (código de transacción SE80) se ha mejorado para desarrollar las entidades de una aplicación Web Dynpro. Web Dynpro está diseñado para soportar el desarrollo estructurado. Las unidades de modularización de software son componentes Web Dynpro, que pueden combinarse para crear aplicaciones complejas.
230
© Copyright . Reservados todos los derechos.
Lección: Resumen de los beneficios de Web Dynpro
Declaraciones metamodelo y codificación personalizada: Comparación
Figura 127: Declaraciones metamodelo frente a codificación personalizada
Una aplicación Web Dynpro está desarrollada mediante un enfoque de programación declarativo. En el Workbench ABAP, existen herramientas especiales que le permiten crear una representación abstracta de una aplicación en forma de metamodelo Web Dynpro. A continuación, se genera automáticamente el código fuente necesario y se ajusta a una arquitectura estándar conocida como marco Web Dynpro. El marco Web Dynpro le permite colocar el código fuente personalizado en posiciones predefinidas dentro del código generado. Todas las aplicaciones Web Dynpro están construidas a partir de las mismas unidades básicas. No obstante, mediante el uso de la codificación personalizada, el framework estándar puede ampliarse para ofrecer todas la función empresarial requerida. No todas las decisiones de implementación se toman en la fase de diseño. Es posible implementar una aplicación Web Dynpro, en la que la UI se define en tiempo de ejecución. Esto le permite escribir aplicaciones muy flexibles sin tener que escribir ninguna codificación HTML o JavaScript.
© Copyright . Reservados todos los derechos.
231
Capítulo 8: Introducción a Web Dynpro
Escenarios de aplicación con Web Dynpro
Figura 128: Ejemplos de escenarios de aplicación con Web Dynpro
La figura muestra que las aplicaciones Web Dynpro pueden acceder a varias fuentes de datos. Una aplicación Web Dynpro ABAP puede acceder directamente a todos los tipos de componentes de reutilización. Los siguientes son ejemplos de componentes de reutilización: Los métodos de clases se definen en su sistema.
●
●
●
Los módulos de funciones se definen en su sistema o (mediante RFC) en el sistema back -end. Los servicios web se ofrecen a través de un objeto de cliente de servicio web.
Atención: No ubique de manera directa una declaración SELECT en los métodos del controlador, ya que así se genera una mezcla entre lógica de flujo y lógica empresarial. Los objetos de modelo todavía no se admiten en Web Dynpro ABAP. La mejor forma de disponer de entidades reutilizables que encapsulen lógica empresarial es crear clases ABAP globales que contengan el código fuente. Puede desarrollar componentes Web Dynpro sin UI (anónimos), en los que otros componentes Web Dynpro solo pueden acceder a las partes no visuales del componente mediante la reutilización del componente.
232
© Copyright . Reservados todos los derechos.
Lección: Resumen de los beneficios de Web Dynpro
Beneficios de Web Dynpro
Figura 129: Ventajas de Web Dynpro
El principal objetivo de Web Dynpro es permitir a los desarrolladores de aplicaciones crear aplicaciones Web potentes con el mínimo esfuerzo mediante herramientas descriptivas en un proceso de diseño estructurado. Los beneficios de Web Dynpro son los siguientes: ● Diseño y códigos minimizados ●
Lógica y layout independientes
●
Admite la reutilización de componentes
●
Admite la vinculación de datos
●
Compatibilidad con varias plataformas
●
Basada en el browser, zero-footprint
●
Admite la accesibilidad 508
La filosofía Web Dynpro Según la filosofía Web Dynpro, es mejor tener menos líneas de código escrito a mano. Web Dynpro lleva a cabo su filosofía de las siguientes maneras: Web Dynpro utiliza un metamodelo declarativo para definir las UI. El entorno de desarrollo genera el código fuente requerido a partir de esta definición abstracta. También puede manipular la UI desde el código fuente, lo cual es necesario para implementar cambios dinámicos que se desconocen en el tiempo de diseño.
●
●
Web Dynpro ofrece características técnicas como, por ejemplo, soporte para la internacionalización, interacción sin intermitencias y una separación depurada de la lógica
© Copyright . Reservados todos los derechos.
233
Capítulo 8: Introducción a Web Dynpro
empresarial y la UI. Esta separación se consigue mediante una implementación modificada del paradigma de diseño del MVC. ●
Web Dynpro ofrece asientes que admiten la definición de formularios y tablas en la UI y el código fuente en los métodos del controlador. De esta manera, se reduce significativamente el esfuerzo de desarrollo.
Dado que las tareas repetitivas de codificación de UI se han eliminado, el desarrollador puede centrarse más en el flujo de datos empresariales mediante la aplicación. RESUMEN DE LA LECCIÓN Ahora podrá:
234
●
Describir el enfoque de programación de Web Dynpro
●
Explicar las ventajas del enfoque de metadatos de Web Dynpro
© Copyright . Reservados todos los derechos.
Capítulo 8 Lección 2 Explicación de la arquitectura de Web Dynpro
RESUMEN DE LA LECCIÓN esta lección explica la arquitectura Web Dynpro y sus elementos principales. Esta lección también describe cómo funciona el transporte de datos en Web Dynpro. Ejemplo empresarial Necesita estructurar aplicaciones Web Dynpro complejas, anidar grandes secciones de la aplicación y desarrollar entidades reutilizables para su proyecto. Por este motivo, se requieren los siguientes conocimientos: ●
Una buena comprensión de componentes Web Dynpro
●
Una buena comprensión del transporte de datos y contextos
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Explicar los elementos principales de Web Dynpro
●
Explicar el transporte de datos y contextos
Componente Web Dynpro
Figura 130: Componente Web Dynpro
Los componentes Web Dynpro son contenedores para otras entidades relacionadas con una UI y un programa Web Dynpro.
© Copyright . Reservados todos los derechos.
235
Capítulo 8: Introducción a Web Dynpro
Las entidades relacionadas con la UI son ventanas y vistas. El layout de una vista es la parte rectangular de una página visualizada por el cliente, por ejemplo, un browser. La vista contiene elementos de UI como, por ejemplo, campos de entrada y botones. La página completa enviada al cliente puede estar parametrizada en una sola vista, pero también puede ser una combinación de varias vistas. Las posibles combinaciones de vistas y el flujo entre las vistas se definen en una ventana. Una ventana puede contener cualquier número de vistas. Una vista puede estar incrustada en cualquier número de ventanas. El código fuente de Web Dynpro está ubicado en los controladores Web Dynpro. Las variables globales de los controladores se definen como atributos de controlador. Los datos globales relacionados con la UI (se visualizan mediante los elementos en la UI o se emplean para manipular las propiedades de elemento de UI) se almacenan en un área almacenamiento jerárquico denominado contexto. Acceso a los componentes Web Dynpro Se puede acceder a los componentes Web Dynpro de las siguientes maneras: Mediante una aplicación Web Dynpro, usted puede enlazar un componente Web Dynpro a un URL, al que puede llamar desde un browser de navegación en Web o desde otro cliente Web Dynpro.
●
●
●
Cuando se reutiliza un componente Web Dynpro como subcomponente, puede combinar la interfaz visual de un componente Web Dynpro con las entidades visuales del componente principal para formar la UI. Cuando se reutiliza un componente Web Dynpro como subcomponente, el componente principal puede acceder a todos los métodos y datos definidos en la interfaz de programación.
Vinculación de datos y contexto
Figura 131: Transporte de datos y contextos
La conexión de valores de elementos de UI que permite la entrada de usuario en los atributos de contexto del controlador correspondiente se denomina vinculación de datos. Al usar la
236
© Copyright . Reservados todos los derechos.
Lección: Explicación de la arquitectura de Web Dynpro
vinculación de datos, puede establecer un transporte de datos automático entre los elementos de UI y los atributos de contexto. Hacer referencia a las variables definidas en un controlador Web Dynpro de otro controlador Web Dynpro se denomina asignación de contexto. La asignación de contexto le permite compartir datos comunes entre varios controladores, por lo que no es necesario copiar estos datos entre los contextos de controlador. Al combinar estos dos conceptos, el transporte de datos entre los elementos de UI ubicados en diferentes vistas se pueden definir de una manera puramente declarativa. Asignación de contextos
Figura 132: Uso compartido de datos mediante asignación de contexto
La asignación de contextos permite que a un nodo de contexto de un controlador se le suministren automáticamente datos de ese nodo de contexto a un nodo correspondiente de otro controlador. Éste es el mecanismo básico del uso compartido de datos entre controladores. Los requisitos para establecer una relación de asignación son los siguientes: Debe existir un nodo en el contexto del controlador que actúa como origen de asignación. Es posible que este nodo tenga nodos inferiores o atributos.
●
●
●
El controlador de origen de asignación no debe ser un controlador de vistas. El controlador que contenga el nodo asignado debe declarar la utilización del controlador de origen de asignación como controlador utilizado.
© Copyright . Reservados todos los derechos.
237
Capítulo 8: Introducción a Web Dynpro
Vinculación de datos
Figura 133: Colocación de datos en la pantalla: Vinculación de datos
La vinculación de datos es el medio por el que los datos se transportan automáticamente de un elemento de UI con su layout y viceversa. No debe asociar elementos de UI a los nodos de contexto o atributos definidos en otro controlador. Los elementos de UI son privados para el controlador de vistas en el que se han declarado. El proceso de vinculación de datos El proceso de vinculación de datos separa el objeto del elemento de UI del código de aplicación del controlador de vistas. Por consiguiente, para manipular propiedades de elementos de UI, el código de aplicación del controlador de vistas solo tiene que manipular los valores de los nodos de contexto y atributos a los que están asociados los elementos de UI. A continuación, el marco Web Dynpro realiza las tareas siguientes: ● Transporta los datos desde el atributo de contexto hasta el elemento de UI durante el proceso de renderizado de la pantalla. ●
Rellena el atributo de contexto a partir del elemento de UI una vez que se han introducido los datos y se ha iniciado la siguiente petición al servidor. Los valores introducidos se convierten automáticamente y se verifica la conformidad con el tipo de datos. Si se produce un error, se visualizará el mensaje correspondiente.
La vinculación de datos es un potente instrumento ya que no solo se puede vincular el valor de un elemento de UI a un atributo de contexto, sino también las propiedades de un elemento de UI, como por ejemplo la visibilidad. Esto significa que las propiedades de los elementos de UI se pueden manipular desde el controlador de vistas actuando sobre los atributos de contexto.
238
© Copyright . Reservados todos los derechos.
Capítulo 8 Ejercicio 14 Crear un Web Dynpro simple
Ejemplo empresarial Desea desarrollar una aplicación Web Dynpro. Empieza creando las entidades Web Dynpro que son obligatorias para una aplicación que muestra una página con un campo de texto simple. Modelo: Irrelevante Solución: NET310_INTR_S Cree un componente Web Dynpro con una ventana que incruste una vista individual, defina un elemento de UI simple en el layout de visualización y trate sus propiedades. Tarea 1 Crear un paquete que contenga todos los objetos de repositorio que va a desarrollar. 1. Cree el paquete ZNET310_##. Asigne a su paquete el componente de aplicación BC-WD y el componente de software HOME. Tarea 2 Cree un componente Web Dynpro con una ventana que incruste una vista individual. 1. Cree un componente Web Dynpro ZNET310_INTR_## con una ventana MAIN_WINDOW que incruste un vista individual MAIN_VIEW. 2. ¿Qué otras entidades Web Dynpro se visualizan en el árbol de objetos de ABAP Workbench después de crear el componente Web Dynpro?
Tarea 3 Cree un elemento de UI simple TEXTVIEW que muestre un texto arbitrario en el layout de la vista MAIN_VIEW. 1. Cree un elemento de UI simple (TEXTVIEW) del tipo TextView en el layout de la vista MAIN_VIEW y trate sus propiedades. 2. Actualice el texto que deberá visualizar en el elemento de UI TEXTVIEW. Es posible que desee modificar otras propiedades del elemento y ver el resultado en la presentación preliminar de layout. 3. Active el componente Web Dynpro.
© Copyright . Reservados todos los derechos.
239
Capítulo 8: Introducción a Web Dynpro
Tarea 4 Cree una aplicación Web Dynpro para acceder a su componente Web Dynpro. Inicie la aplicación. 1. Cree una aplicación Web Dynpro (nombre propuesto: ZNET310_INTR_##) que tenga acceso a la única ventana existente de su componente Web Dynpro. 2. Realice un test de la aplicación Web Dynpro.
240
© Copyright . Reservados todos los derechos.
Capítulo 8 Solución 14 Crear un Web Dynpro simple
Ejemplo empresarial Desea desarrollar una aplicación Web Dynpro. Empieza creando las entidades Web Dynpro que son obligatorias para una aplicación que muestra una página con un campo de texto simple. Modelo: Irrelevante Solución: NET310_INTR_S Cree un componente Web Dynpro con una ventana que incruste una vista individual, defina un elemento de UI simple en el layout de visualización y trate sus propiedades. Tarea 1 Crear un paquete que contenga todos los objetos de repositorio que va a desarrollar. 1. Cree el paquete ZNET310_##. Asigne a su paquete el componente de aplicación BC-WD y el componente de software HOME. a) En la pantalla SAP Easy Access ABAP Workbench, seleccione Navegador de objetos. También puede utilizar el código de transacción SE80. b) En la pantalla Navegador de objetos, cree el paquete ZNET310_##. c) En la ventana de diálogo Crear paquete, indique los datos siguientes: Nombre del campo
Valor
Paquete
ZNET310_##
Descripción breve
Paquete Web Dynpro
Componente de aplicación
BC-WD
Componente de software
INICIO
d) Seleccione el pulsador Continuar. Tarea 2 Cree un componente Web Dynpro con una ventana que incruste una vista individual. 1. Cree un componente Web Dynpro ZNET310_INTR_## con una ventana MAIN_WINDOW que incruste un vista individual MAIN_VIEW. a) En el menú contextual del paquete ZNET310_##, seleccione Crear → Web Dynpro → Componente Web Dynpro (Interfaz). b) En la ventana de diálogo Web Dynpro: Componente/Crear interfaz, indique los datos siguientes:
© Copyright . Reservados todos los derechos.
241
Capítulo 8: Introducción a Web Dynpro
Nombre del campo
Valor
Nombre
ZNET310_INTR_##
Descripción
Componente Web Dynpro
Nombre de ventana
Main_Window
Nombre de vista
Main_View
c) Seleccione Continuar. d) En la ventana de diálogo Crear entrada de directorio de objeto, asegúrese de elegir el paquete que creó en la tarea anterior y grabe su selección. 2. ¿Qué otras entidades Web Dynpro se visualizan en el árbol de objetos de ABAP Workbench después de crear el componente Web Dynpro? Las otras entidades Web Dynpro que se visualizan en el árbol de objetos de ABAP Workbench después de crear el componente Web Dynpro son: un controlador de componente, un controlador de interfaz, una vista de interfaz para la ventana y una interfaz global ZIWCI_NET310_INTR_##. Tarea 3 Cree un elemento de UI simple TEXTVIEW que muestre un texto arbitrario en el layout de la vista MAIN_VIEW. 1. Cree un elemento de UI simple (TEXTVIEW) del tipo TextView en el layout de la vista MAIN_VIEW y trate sus propiedades. a) En el árbol de objetos del componente ZNET310_INTR_##, haga doble clic en Vistas y seleccione MAIN_VIEW. b) En la etiqueta Layout, en el menú contextual de ROOTUIELEMENTCONTAINER, seleccione Insertar elemento. c) En la ventana de diálogo Crear elemento, introduzca TEXTVIEW como nombre del elemento y fije el tipo de elemento en TextView. d) Seleccione Continuar. 2. Actualice el texto que deberá visualizar en el elemento de UI TEXTVIEW. Es posible que desee modificar otras propiedades del elemento y ver el resultado en la presentación preliminar de layout. a) En la jerarquía de elementos de UI, seleccione el elemento de UI TEXTVIEW. b) En la lista de propiedades, introduzca cualquier texto en el campoTexto. c) Puede modificar otras propiedades si lo desea. 3. Active el componente Web Dynpro. a) En el menú contextual del componente Web Dynpro ZNET310_INTR_##, seleccione Activar. b) En la ventana de diálogo Objetos inactivos de NET310-##, encontrará que las partes inactivas de su componente están seleccionadas.
242
© Copyright . Reservados todos los derechos.
Lección: Explicación de la arquitectura de Web Dynpro
Tarea 4 Cree una aplicación Web Dynpro para acceder a su componente Web Dynpro. Inicie la aplicación. 1. Cree una aplicación Web Dynpro (nombre propuesto: ZNET310_INTR_##) que tenga acceso a la única ventana existente de su componente Web Dynpro. a) En el menú contextual del componente Web Dynpro ZNET310_INTR_##, seleccione Crear → Aplicación Web Dynpro. b) En la ventana de diálogo Crear aplicación Web Dynpro, indique los datos siguientes: Nombre del campo
Valor
Aplicación
ZNET310_INTR_##
Descripción
Aplicación WD
c) Seleccione Continuar. d) En la pantalla Explorador Web Dynpro: Crear aplicación Web Dynpro, seleccione el pulsador Grabar. 2. Realice un test de la aplicación Web Dynpro. a) En el menú contextual de la aplicación Web Dynpro ZNET310_INTR_##, seleccione Probar para abrir una ventana de navegador e iniciar la aplicación.
© Copyright . Reservados todos los derechos.
243
Capítulo 8: Introducción a Web Dynpro
RESUMEN DE LA LECCIÓN Ahora podrá:
244
●
Explicar los elementos principales de Web Dynpro
●
Explicar el transporte de datos y contextos
© Copyright . Reservados todos los derechos.
Capítulo 8 Lección 3 Navegación entre vistas
RESUMEN DE LA LECCIÓN Esta lección explica el principio de navegación y las formas de navegar entre vistas. Ejemplo empresarial Quiere comprender cómo funciona la navegación entre vistas en Web Dynpro. Para ello, puede crear una aplicación en la que el usuario puede desplazarse de una página a otra presionando botones. Por este motivo, se requieren los siguientes conocimientos: ●
Una buena comprensión de la navegación entre vistas
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Establecer la navegación entre vistas
Principios de navegación
Figura 134: Principio de navegación
La navegación entre vistas se desencadena disparando tomas de salida. Activar un punto de navegación de salida emite un evento de navegación. Los eventos de navegación son eventos asincrónicos especiales que se colocan en una cola de navegación. Se pueden disparar varias tomas de salida desde una vista. Se pueden disparar varias tomas de salida desde una vista; la próxima UI determina cuáles se utilizan. La cola de navegación se procesa en un momento concreto de la fase de procesamiento de Web Dynpro. A partir de este momento, la pila de
© Copyright . Reservados todos los derechos.
245
Capítulo 8: Introducción a Web Dynpro
navegación se puede ampliar disparando tomas de salida adicionales, o bien se puede eliminar toda la pila de navegación. Las tomas de salida se denominan en función de la acción que causa la navegación de la vista actual. Tomas de entrada y salida
Figura 135: Navegación entre vistas
Las tomas de entrada tienen métodos de programa de control de eventos especiales que se suscriben a los eventos de navegación producidos al dispararse tomas de salida. Se llama a los métodos de toma de entrada únicamente cuando se procesa la cola de navegación. Esto solo tiene lugar una vez que las vistas del conjunto de vistas actual han disparado sus tomas de salida y no se han producido errores de validación que pueden cancelar la navegación. Los puntos de navegación de entrada deberán denominarse en función de la razón por la que se visualiza la vista. Las tomas de entrada y salida se unen mediante enlaces de navegación. Enlazar una toma de entrada a una toma de salida significa registrar el método de programa de control de eventos de toma de entrada en el evento de navegación al que se llama disparando una toma de salida. Los enlaces de navegación se definen en una ventana. Las tomas de salida y los métodos de programa de control de eventos relacionados con la toma de entrada pueden tener parámetros, lo que le permite traspasar datos entre las vistas. Se emplea una acción para enlazar un evento del cliente con un método de controlador de eventos (se define automáticamente mediante la acción) en el controlador de vistas correspondiente.
246
© Copyright . Reservados todos los derechos.
Capítulo 8 Ejercicio 15 Navegar entre vistas Web Dynpro
Ejemplo empresarial Desea desarrollar una aplicación Web Dynpro con más de una vista. Para hacerlo, debe definir los pulsadores en los layouts de cada vista para permitir al usuario navegar entre las vistas. Modelo: Irrelevante Solución: NET310_CTRL_S Defina los pulsadores e implemente la navegación entre las vistas Web Dynpro. Tarea 1 Cree un componente Web Dynpro que contenga una ventana y dos vistas. 1. Cree el componente Web Dynpro ZNET310_CTRL_## con una ventana MAIN_WINDOW y una vista INPUT_VIEW. 2. Cree una vista adicional (OUTPUT_VIEW) dentro de su componente e incruste esta vista en MAIN_WINDOW. Tarea 2 Cree una toma de salida y otra de entrada para cada vista. Defina dos enlaces de navegación entre las dos vistas, que vayan del punto de navegación de salida de una vista al punto de navegación de entrada de la otra vista. 1. Para su primera vista (INPUT_VIEW), cree un punto de navegación de salida (OUT_DETAILS) y un punto de navegación de entrada (IN_DEFAULT). 2. ¿Cuáles son las nuevas partes creadas en el controlador de vistas al finalizar el paso anterior (consulte las diferentes etiquetas de las vistas)?
3. Repita el paso 1 para OUTPUT_VIEW. Cree el punto de navegación de salida OUT_BACK y el punto de navegación de entrada IN_DEFAULT. 4. Ahora edite la ventana. Defina un enlace de navegación desde el punto de navegación de salida (OUT_DETAILS) de INPUT_VIEW al punto de navegación de entrada (IN_DEFAULT) de la vista OUTPUT_VIEW. 5. Defina un enlace de navegación desde el punto de navegación de salida (OUT_BACK) de OUTPUT_VIEW al punto de navegación de entrada (IN_DEFAULT) de la vista INPUT_VIEW. Tarea 3
© Copyright . Reservados todos los derechos.
247
Capítulo 8: Introducción a Web Dynpro
Defina un pulsador en cada una de las dos vistas y asegúrese de que el punto de navegación de salida de la vista respectiva se desencadena cuando el usuario pulsa el pulsador. 1. Cree un elemento de UI simple de tipo BUTTON con el nombre BUT_DETAILS en el layout de la vista INPUT_VIEW y actualice el texto que debe mostrarse en el pulsador. 2. Cree una acción para el pulsador con el nombre DISPLAY_DETAILS. Asigne esta acción al pulsador BUT_DETAILS. Si el usuario selecciona este pulsador, el punto de navegación de salida OUT_DETAILS se activa. 3. ¿Cuáles son las nuevas partes creadas en el controlador de vistas con el paso anterior (consulte las diferentes etiquetas de las vistas)?
4. Cree un pulsador en la vista OUTPUT_VIEW con el nombre BUT_BACK. Fije el texto que se visualizará en el pulsador y asigne una acción con el nombre BACK a la propiedad onAction. Asegúrese de que el punto de navegación de salida OUT_BACK se activa cuando el selecciona el pulsador. Tarea 4 Active su componente. Cree una aplicación para acceder a su componente e inicie la aplicación. 1. Active su componente y todas las entidades de componente englobadas. 2. Cree una aplicación Web Dynpro para su componente. Inicie la aplicación.
248
© Copyright . Reservados todos los derechos.
Capítulo 8 Solución 15 Navegar entre vistas Web Dynpro
Ejemplo empresarial Desea desarrollar una aplicación Web Dynpro con más de una vista. Para hacerlo, debe definir los pulsadores en los layouts de cada vista para permitir al usuario navegar entre las vistas. Modelo: Irrelevante Solución: NET310_CTRL_S Defina los pulsadores e implemente la navegación entre las vistas Web Dynpro. Tarea 1 Cree un componente Web Dynpro que contenga una ventana y dos vistas. 1. Cree el componente Web Dynpro ZNET310_CTRL_## con una ventana MAIN_WINDOW y una vista INPUT_VIEW. a) Realice este paso como en el ejercicio anterior. b) En el menú contextual del paquete ZNET310_##, seleccione Crear → WebDynpro → Componente Web Dynpro (Interfaz). c) En la ventana de diálogo Web Dynpro: Componente/Crear interfaz, indique los datos siguientes: Nombre del campo
Valor
Nombre
ZNET310_CTRL_##
Descripción
Componente WD
Tipo
Componente Web Dynpro
Nombre de ventana
MAIN_WINDOW
Nombre de vista
INPUT_VIEW
d) Seleccione Continuar. e) Grabe las entradas. 2. Cree una vista adicional (OUTPUT_VIEW) dentro de su componente e incruste esta vista en MAIN_WINDOW. a) En el menú contextual del componente ZNET310_CTRL_01, seleccione Crear → Vista. b) En la ventana de diálogo Crear vistas, indique los datos siguientes: Nombre del campo
Valor
Componente
ZNET310_CTRL_##
© Copyright . Reservados todos los derechos.
249
Capítulo 8: Introducción a Web Dynpro
Nombre del campo
Valor
de software
OUTPUT_VIEW
Descripción
Output_View
c) Seleccione Continuar. d) Grabe las entradas. e) En el árbol de objetos del componente ZNET310_CTRL_##, seleccione Ventanas y haga doble clic en MAIN_WINDOW. f) En la pantalla de resumen de MAIN_WINDOW, asegúrese de que la estructura de ventana se visualice jerárquicamente (si no es así, seleccione el pulsador Cambiar vista de editor de ventana). g) Desde el árbol de objetos de Workbench ABAP, arrastre OUTPUT_VIEW del componente ZNET310_CTRL_## en el nodo raíz de MAIN_WINDOW. h) Grabe las entradas. Tarea 2 Cree una toma de salida y otra de entrada para cada vista. Defina dos enlaces de navegación entre las dos vistas, que vayan del punto de navegación de salida de una vista al punto de navegación de entrada de la otra vista. 1. Para su primera vista (INPUT_VIEW), cree un punto de navegación de salida (OUT_DETAILS) y un punto de navegación de entrada (IN_DEFAULT). a) En el árbol de objetos del componente ZNET310_CTRL_##, seleccione Vistas y haga doble clic en INPUT_VIEW. b) En la pantalla de resumen de INPUT_VIEW, seleccione la etiqueta Puntos de navegación de salida e introduzca los siguientes datos: Nombre del campo
Valor
Nombre de punto
OUT_DETAILS
Descripción
salida
c) Seleccione la etiqueta Puntos de navegación de entrada e indique los datos siguientes: Nombre del campo
Valor
Nombre de punto
IN_DEFAULT
Descripción
entrada
d) Grabe las entradas.
250
© Copyright . Reservados todos los derechos.
Lección: Navegación entre vistas
2. ¿Cuáles son las nuevas partes creadas en el controlador de vistas al finalizar el paso anterior (consulte las diferentes etiquetas de las vistas)? El método de programa de control de eventos "HANDLEIN_DEFAULT” (vacío) es la nueva parte creada en el controlador de vistas al finalizar el paso anterior. 3. Repita el paso 1 para OUTPUT_VIEW. Cree el punto de navegación de salida OUT_BACK y el punto de navegación de entrada IN_DEFAULT. a) Realice este paso como en los pasos anteriores. 4. Ahora edite la ventana. Defina un enlace de navegación desde el punto de navegación de salida (OUT_DETAILS) de INPUT_VIEW al punto de navegación de entrada (IN_DEFAULT) de la vista OUTPUT_VIEW. a) En el árbol de objetos del componente ZNET310_CTRL_##, seleccione Ventanas y haga doble clic en MAIN_WINDOW. b) En la pantalla de resumen de MAIN_WINDOW, seleccione la etiqueta Ventana y expanda todos los nodos de la estructura de ventana. c) Asegúrese de que la estructura de ventana se visualice jerárquicamente (si no es así, seleccione el pulsador Cambiar vista de editor de ventana). d) Arrastre el punto de navegación de salida OUT_DETAILS de INPUT_VIEW al punto de navegación de entrada IN_DEFAULT de OUTPUT_VIEW. e) Seleccione Continuar. 5. Defina un enlace de navegación desde el punto de navegación de salida (OUT_BACK) de OUTPUT_VIEW al punto de navegación de entrada (IN_DEFAULT) de la vista INPUT_VIEW. a) Realice este paso como se describe antes. Tarea 3 Defina un pulsador en cada una de las dos vistas y asegúrese de que el punto de navegación de salida de la vista respectiva se desencadena cuando el usuario pulsa el pulsador. 1. Cree un elemento de UI simple de tipo BUTTON con el nombre BUT_DETAILS en el layout de la vista INPUT_VIEW y actualice el texto que debe mostrarse en el pulsador. a) En el árbol de objetos del componente ZNET310_CTRL_##, seleccione la vista INPUT_VIEW y seleccione la etiqueta Layout. b) En la etiqueta Layout, en el menú contextual de ROOTUIELEMENTCONTAINER, seleccione Insertar elemento. c) En la ventana de diálogo Crear elemento, indique los datos siguientes: Nombre del campo
Valor
ID
BUT_DETAILS
Typ
Botón
d) Seleccione Continuar. e) Vaya a la propiedad Texto e introduzca el texto que visualizará en la columna Valor.
© Copyright . Reservados todos los derechos.
251
Capítulo 8: Introducción a Web Dynpro
2. Cree una acción para el pulsador con el nombre DISPLAY_DETAILS. Asigne esta acción al pulsador BUT_DETAILS. Si el usuario selecciona este pulsador, el punto de navegación de salida OUT_DETAILS se activa. a) Vaya a la propiedad onAction del botón y seleccione el pulsador Crear en la columna Vinculación. b) En la ventana de diálogo Crear acción, indique los datos siguientes: Campo
Valor
Medida
DISPLAY_DETAILS
Descripción
Acción para la vista de entrada
Punto de salida
OUT_DETAILS
c) Seleccione Continuar. d) Grabe las entradas. 3. ¿Cuáles son las nuevas partes creadas en el controlador de vistas con el paso anterior (consulte las diferentes etiquetas de las vistas)? La acción DISPLAY_DETAILS y el método de programa de control de eventos ONACTIONDISPLAY_DETAILS (con codificación para activar el punto de navegación de salida) son las nuevas partes creadas en el controlador de vistas mediante los pasos anteriores. 4. Cree un pulsador en la vista OUTPUT_VIEW con el nombre BUT_BACK. Fije el texto que se visualizará en el pulsador y asigne una acción con el nombre BACK a la propiedad onAction. Asegúrese de que el punto de navegación de salida OUT_BACK se activa cuando el selecciona el pulsador. a) Realice esto como en los pasos anteriores. Tarea 4 Active su componente. Cree una aplicación para acceder a su componente e inicie la aplicación. 1. Active su componente y todas las entidades de componente englobadas. a) En el menú contextual del componente ZNET310_CTRL_##, seleccione el pulsador Activar. b) Seleccione Grabar. 2. Cree una aplicación Web Dynpro para su componente. Inicie la aplicación. a) En el menú contextual del componente ZNET310_CTRL_##, seleccione Crear → Aplicación Web Dynpro. b) En la ventana de diálogo Crear aplicación Web Dynpro, indique los datos siguientes:
252
Nombre del campo
Valor
Aplicación
znet310_ctrl_##
© Copyright . Reservados todos los derechos.
Lección: Navegación entre vistas
Nombre del campo
Valor
Descripción
Aplicación WD
c) Seleccione Continuar. d) Grabe las entradas. e) Para iniciar la aplicación en una ventana de navegador, en el menú contextual de la aplicación Web Dynpro znet310_ctrl_##, seleccione el pulsador Probar.
© Copyright . Reservados todos los derechos.
253
Capítulo 8: Introducción a Web Dynpro
RESUMEN DE LA LECCIÓN Ahora podrá: ●
254
Establecer la navegación entre vistas
© Copyright . Reservados todos los derechos.
Capítulo 8 Lección 4 Utilización de conjuntos de vistas
RESUMEN DE LA LECCIÓN En este módulo se muestra cómo usar conjuntos de vistas. Ejemplo empresarial Debe crear ventanas y vistas anidadas, incrustar una vista en un controlador de vistas y aprender a usar conjuntos de vistas. Por este motivo, se requieren los siguientes conocimientos: ●
Una buena comprensión de los conjuntos de vistas
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Explicar conjuntos de vistas
Conjuntos de vistas
Figura 136: Ventanas y vistas anidadas
Una ventana define qué vistas se visualizan en qué combinación y cómo se cambia la combinación de vistas disparando tomas de salida. Cuando cree una ventana, recuerde los siguientes puntos:
© Copyright . Reservados todos los derechos.
255
Capítulo 8: Introducción a Web Dynpro
●
●
●
Debe incrustar en la ventana todas las vistas posibles que puedan existir en la interfaz visual del componente. Para visualizar múltiples vistas en paralelo, defina el layout y la posición de estas vistas en una vista especial que incluya ViewContainerUIElements en su layout. Esta vista de container se incrusta en la ventana y se incrustan (incrustación anidada) todas las vistas posibles para esta área de container de vistas dentro de cada área definida por un ViewContainerUIElement. Una vista predeterminada se visualiza al inicio de cada ViewContainerUIElement. Definir los enlaces de navegación entre las diferentes vistas.
Solo se visualiza una vista a la vez en el de container de vistas. Para reemplazar el contenido de un área de container de vistas, defina los enlaces de navegación entre vistas. Las áreas de container de vistas se pueden dejar vacías mediante la incrustación de una vista EMPTYVIEW (se genera automáticamente con el componente) cuyo punto de navegación de entrada responda a un evento de navegación adecuado. Conjunto de vistas
Figura 137: Conjunto de vistas
Los puntos de navegación de salida son los que hacen que un área de container de vistas contenga una vista en particular. En las definiciones de ventana, en las que se incrustan varias vistas en áreas de container de vistas, podrían ser visibles muchas permutaciones de vistas. Exactamente qué se visualiza depende de los enlaces de navegación que el usuario sigue. El subconjunto de vistas continuamente visibles se conoce como conjunto de vistas.
256
© Copyright . Reservados todos los derechos.
Capítulo 8 Ejercicio 16 Utilizar conjuntos de vistas
Ejemplo empresarial Desea desarrollar una aplicación Web Dynpro de imagen individual. Deben combinarse varias vistas para definir la página que el usuario visualiza. Además, la activación de los puntos de navegación de salida debe sustituir una o varias vistas que formen parte del conjunto de vistas. Modelo: NET310_CTRL_S Solución: NET310_CTRL_S_OPT Al finalizar este ejercicio, podrá visualizar más de una vista en paralelo. Tarea 1 Copie la solución del ejercicio anterior o del componente modelo. 1. Copie la solución del ejercicio anterior (ZNET310_CTRL_##) o del componente Web Dynpro NET310_CTRL_S en el nuevo componente, ZNET310_CTRL_##_OPT.
Tarea 2 Defina un área de container en el layout de INPUT_VIEW. 1. Defina un elemento de UI (VC) del tipo VIEWCONTAINERUIELEMENT en el layout de la vista INPUT_VIEW. Tarea 3 1. Defina una nueva ventana con el nombre SECOND_WINDOW. 2. Incruste INPUT_VIEW en la nueva ventana. 3. Incruste la vista EMPTYVIEW en el área de container. 4. Incruste la vista OUTPUT_VIEW en el área de container VC. 5. Defina la navegación. Tarea 4 Active el componente. Defina una nueva aplicación Web Dynpro para acceder a la nueva ventana de su aplicación. Inicie la nueva aplicación. 1. Active su componente y todas sus entidades. 2. Cree una aplicación Web Dynpro para su componente.
© Copyright . Reservados todos los derechos.
257
Capítulo 8 Solución 16 Utilizar conjuntos de vistas
Ejemplo empresarial Desea desarrollar una aplicación Web Dynpro de imagen individual. Deben combinarse varias vistas para definir la página que el usuario visualiza. Además, la activación de los puntos de navegación de salida debe sustituir una o varias vistas que formen parte del conjunto de vistas. Modelo: NET310_CTRL_S Solución: NET310_CTRL_S_OPT Al finalizar este ejercicio, podrá visualizar más de una vista en paralelo. Tarea 1 Copie la solución del ejercicio anterior o del componente modelo. 1. Copie la solución del ejercicio anterior (ZNET310_CTRL_##) o del componente Web Dynpro NET310_CTRL_S en el nuevo componente, ZNET310_CTRL_##_OPT. a) Una solución posible es seleccionar el pulsador Otro objeto en SE80. b) En la ventana de diálogo Selección de objeto, seleccione la etiqueta Objetos web e introduzca ZNET310_CTRL_## en el campo Comp./Interfaz Web Dynpro. c) Seleccione el pulsador Copiar. d) En la ventana de diálogo Copiar componente Web Dynpro, introduzca ZNET310_CTRL_##_OPT en el campo Nombre de la copia. e) Seleccione Continuar. f) En la ventana de diálogo Crear entrada de directorio de objeto, seleccione el pulsador Grabar. g) En la ventana de diálogo, Petición de solicitud de Workbench transportable, seleccione Continuar.
Tarea 2 Defina un área de container en el layout de INPUT_VIEW. 1. Defina un elemento de UI (VC) del tipo VIEWCONTAINERUIELEMENT en el layout de la vista INPUT_VIEW. a) En SE80, seleccione Comp./Interfaz Web Dynpro e introduzca el nombre de su nuevo Web Dynpro ZNET310_CTRL_##_OPT, luego seleccione el pulsador Visualizar. En la pantalla, Visualizar paquete, seleccione ZNET310_CTRL_##_OPT → Vistas → INPUT_VIEW.
258
© Copyright . Reservados todos los derechos.
Lección: Utilización de conjuntos de vistas
b) Trate el layout de INPUT_VIEW. c) En el menú contextual de ROOTUIELEMENTCONTAINER, seleccione Insertar elemento. d) En la ventana de diálogo Crear elemento, indique los datos siguientes: Nombre del campo
Valor
ID
VC
Typ
ViewContainerUIElement
e) Seleccione Continuar. f) Grabe las entradas. Tarea 3 1. Defina una nueva ventana con el nombre SECOND_WINDOW. a) En el menú contextual del componente ZNET310_CTRL_##_OPT, seleccione Crear → Ventana. b) En la ventana de diálogo Web Dynpro: Crear ventana, introduzca SECOND_WINDOW en el campo Ventana. c) Seleccione Continuar. 2. Incruste INPUT_VIEW en la nueva ventana. a) Trate SECOND_WINDOW. Abra la etiqueta Ventana y expanda el nodo SECOND_WINDOW. b) Asegúrese de que la estructura de ventana se visualice jerárquicamente. Si no es así, seleccione el pulsador Cambiar vista de editor de ventana. c) En la lista de objetos del componente, seleccione ZNET310_CTRL_##_OPT → Vistas → INPUT_VIEW. d) Arrastre INPUT_VIEW al nodo raíz SECOND_WINDOW, que se visualiza en la etiqueta Ventana. e) Grabe las entradas. 3. Incruste la vista EMPTYVIEW en el área de container. a) En la pantalla Generador Web Dynpro: Modificar ventana de ZNET310_CTRL_##_OPT, en la etiqueta Ventana, expanda el nodo SECOND_WINDOW y luego el nodo INPUT_VIEW dentro de él. b) En el menú contextual del área de container de vistas VC, seleccione Insertar vista. c) En la ventana de diálogo Web Dynpro: Insertar una vista, indique los datos siguientes: Nombre del campo
Valor
Vista para incrustar
EMPTYVIEW
Componente de vista
ZNET310_CTRL_##_OPT
d) Seleccione Continuar.
© Copyright . Reservados todos los derechos.
259
Capítulo 8: Introducción a Web Dynpro
4. Incruste la vista OUTPUT_VIEW en el área de container VC. a) En el menú contextual del área de container de vistas VC, seleccione Insertar vista. b) En la ventana de diálogo Web Dynpro: Insertar una vista, indique los datos siguientes: Nombre del campo
Valor
Vista para incrustar
OUTPUT_VIEW
Componente de vista
ZNET310_CTRL_##_OPT
c) Seleccione Continuar. 5. Defina la navegación. a) En la pantalla Generador Web Dynpro: Modificar ventana de ZNET310_CTRL_##_OPT, asegúrese de que el nodo SECOND_WINDOW, y todos los nodos dentro de él, estén completamente expandidos. Arrastre el punto de navegación de salida de INPUT_VIEW y suéltelo sobre el punto de navegación de entrada de OUTPUT_VIEW. b) Arrastre el punto de navegación de salida de OUTPUT_VIEW y suéltelo en el punto de navegación de entrada de EMPTYVIEW. c) En la pantalla Generador Web Dynpro: Modificar ventana de ZNET310_CTRL_##_OPT, seleccione el pulsador Grabar. Tarea 4 Active el componente. Defina una nueva aplicación Web Dynpro para acceder a la nueva ventana de su aplicación. Inicie la nueva aplicación. 1. Active su componente y todas sus entidades. a) En el menú contextual del componente ZNET310_CTRL_##_OPT, seleccione Activar. b) En la ventana de diálogo Objetos inactivos de NET310-##, seleccione Continuar. 2. Cree una aplicación Web Dynpro para su componente. a) En el menú contextual del componente ZNET310_CTRL_##_OPT, seleccione Crear → Aplicación Web Dynpro. b) En la ventana de diálogo Crear aplicación Web Dynpro, introduzca ZNET310_CTRL_##_OPT en el campo Aplicación. c) Seleccione Continuar. d) Grabe las entradas. Consejo: Si ya ha creado una aplicación Web Dynpro para su componente, deberá seleccionar explícitamente el nombre de la aplicación cuando cree aplicaciones posteriores. e) Defina las propiedades de la aplicación. En la etiqueta Propiedades, indique los datos siguientes:
260
© Copyright . Reservados todos los derechos.
Lección: Utilización de conjuntos de vistas
Nombre del campo
Valor
Vista de interfaz
SECOND_WINDOW
Nombre de punto
DEFAULT
f) Seleccione el pulsador Grabar y luego en la ventana de diálogo Crear entrada de directorio de objeto, seleccione el pulsador Grabar nuevamente. g) En la ventana de diálogo, Petición de solicitud de Workbench transportable, seleccione Continuar. h) En la pantalla Explorador Web Dynpro: Modificar aplicación Web Dynpro, seleccione el pulsador Probar. Se abre una ventana de navegador y se inicia la aplicación.
© Copyright . Reservados todos los derechos.
261
Capítulo 8: Introducción a Web Dynpro
RESUMEN DE LA LECCIÓN Ahora podrá: ●
262
Explicar conjuntos de vistas
© Copyright . Reservados todos los derechos.
Capítulo 8 Lección 5 Explicación de la arquitectura de Web Dynpro y relaciones entre entidades
RESUMEN DE LA LECCIÓN Esta lección explica el paradigma de diseño Modelo Vista Controlador (MVC) y la visibilidad interna y externa de las entidades Web Dynpro. También le muestra cómo crear un controlador personalizado y ver la interfaz de componentes. Ejemplo empresarial Quiere explorar la arquitectura Web Dynpro para determinar qué entidades Web Dynpro son visibles interna y externamente. Por este motivo, se requieren los siguientes conocimientos: ●
●
Una buena comprensión de las entidades Web Dynpro que solo son visibles dentro de Web Dynpro Una buena comprensión de las entidades Web Dynpro que forman parte de la interfaz de componente Web Dynpro
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Diferenciar entre entidades Web Dynpro visibles interna y externamente
Model View Controller
Figura 138: Model View Controller
© Copyright . Reservados todos los derechos.
263
Capítulo 8: Introducción a Web Dynpro
Web Dynpro de SAP está construido sobre las bases del paradigma de diseño de MVC. MVC fue inventado por el diseñador de software noruego Trygve Reenskaug cuando trabajaba en Xerox PARC a finales de los años 70. La primera implementación de este paradigma de diseño se produjo con el lanzamiento del lenguaje de programación Smalltalk-80. MVC fue un paradigma de diseño revolucionario porque fue el primero en describir los componentes de software en términos de las responsabilidades funcionales que cada uno debe cumplir y los protocolos de mensajes a los que cada componente debe responder. SAP modificó y amplió la especificación MVC original para crear el grupo de herramientas Web Dynpro.
Visibilidad interna frente a visibilidad externa
Figura 139: Entidades Web Dynpro visibles internamente (1)
La arquitectura de un componente Web Dynpro se puede dividir en dos partes: visibilidad externa e interna. La línea discontinua horizontal de la figura separa las entidades que son visibles desde fuera del componente de las que son solo visibles dentro del componente. Las partes visibles internamente pueden dividirse en entidades visuales y entidades de programación. Las entidades visuales se relacionan con la UI. Se generan mediante el framework Web Dynpro y se pasan al cliente. Las entidades visibles internamente constan de ventanas y vistas. Un vista consta de un layout de visualización y del controlador de vistas correspondiente. El controlador de vistas puede contener puntos de navegación, métodos y un contexto. Una ventana incluye una o más vistas y tiene un controlador de ventanas correspondiente. Un controlador de ventanas puede contener puntos de navegación, métodos y un contexto. Cada vista puede estar incrustada en varias ventanas. La toma de salida de una ventana puede conectarse a cualquier toma de entrada de las vistas incrustadas y la toma de salida de una vista puede conectarse a cualquier toma de entrada de la ventana incrustada. No obstante, no es posible navegar entre ventanas del mismo componente.
264
© Copyright . Reservados todos los derechos.
Lección: Explicación de la arquitectura de Web Dynpro y relaciones entre entidades
Entidades Web Dynpro visibles internamente: Controlador de componentes
Figura 140: Entidades Web Dynpro visibles internamente (2)
El controlador de componentes funciona como controlador global del componente. La lógica del programa relacionada únicamente a una vista concreta, por ejemplo la verificación de la entrada de usuario, se codifica en el controlador de vistas relacionado. Las declaraciones de utilización entre los controladores le permiten acceder a los datos de contexto, los atributos públicos y los métodos del controlador declarado (controlador utilizado). Un controlador de vistas no puede declararse como controlador utilizado para otros controladores ya que esto viola el código de buenas prácticas de programación (paradigma de programación MVC). La lógica empresarial no debe formar parte del componente Web Dynpro, sino que debe definirse fuera del componente para garantizar una reutilización alta. Para encapsular el código fuente relacionado, preferentemente debe utilizar clases ABAP globales.
© Copyright . Reservados todos los derechos.
265
Capítulo 8: Introducción a Web Dynpro
Entidades Web Dynpro visibles internamente: Controladores personalizados
Figura 141: Entidades Web Dynpro visibles internamente (3)
Los controladores personalizados son controladores opcionales definidos por el desarrollador. Estos controladores se utilizan para modularizar el contenido del componente. Por ejemplo, los controladores personalizados pueden actuar como controladores locales para algunas vistas, o bien pueden utilizarse para encapsular la lógica relativa a cierta clase de modelo (lógica empresarial). El uso de controladores personalizados le permite reducir el contenido del controlador de componentes mediante la asignación de subfunciones. Entidades Web Dynpro visibles externamente
Figura 142: Entidades Web Dynpro visibles externamente
Si un componente Web Dynpro (componente superior) necesita acceder a otro componente Web Dynpro (componente subordinado), el componente superior puede declarar la
266
© Copyright . Reservados todos los derechos.
Lección: Explicación de la arquitectura de Web Dynpro y relaciones entre entidades
utilización de un componente subordinado. Se crea una instancia de utilización de un componente específico y el componente superior accede a las funciones del componente subordinado mediante su controlador de interfaz de componente. Controladores y vistas de interfaz Las únicas partes de un componente Web Dynpro que son visibles externamente son el controlador de interfaz y la vista de interfaz. Una interfaz de componente Web Dynpro se compone de las siguientes partes: Controlador de interfaces
●
Todos los componentes Web Dynpro tienen solo una interfaz de controlador. Mediante la interfaz de controlador, se puede acceder a los datos, métodos y programas de control de eventos desde otros componentes. ●
Vistas de interfaz Las vistas de interfaz representan la interfaz visual de un componente Web Dynpro. Existe una relación directa entre una ventana y una vista de interfaz. Cada vez que se define una ventana, se genera automáticamente una vista de interfaz relacionada que permite acceder a la ventana desde fuera del componente. La vista de interfaz solo muestra al usuario del componente aquellas tomas de entrada y salida que tienen la propiedad interfaz activada. No se puede acceder a los métodos y datos de contexto de la ventana mediante la vista de interfaz relacionada.
Si un componente no tiene vistas, no es necesario que tenga ventanas. En este caso, el componente no implementa una vista de interfaz. A los componentes que no tienen ninguna interfaz visual se les llama componentes anónimos. Aplicación Web Dynpro
Figura 143: Aplicación Web Dynpro
Una aplicación Web Dynpro es el punto de entrada a un componente Web Dynpro y es la única entidad Web Dynpro a la que se puede acceder mediante un URL. Existe frecuentemente una relación directa entre una vista de interfaz y una aplicación. De la misma forma en que se accede a las funciones en un Modulpool ABAP mediante la definición de varios códigos de transacción, se puede acceder a las funciones de un solo
© Copyright . Reservados todos los derechos.
267
Capítulo 8: Introducción a Web Dynpro
componente Web Dynpro definiendo varias aplicaciones. Cada aplicación accede a una vista de interfaz diferente o a una toma de entrada diferente de la vista de interfaz. Para definir una aplicación Web Dynpro, especifique los siguientes elementos: ● Componente que se debe instanciar. Se conoce como componente raíz ●
●
Vista de interfaz del componente raíz que se debe usar. La vista predeterminada en esta vista de interfaz define el conjunto de la vista predeterminada. La toma de entrada que actúa como punto de entrada para la vista de interfaz designada (esta toma de entrada debe ser del tipo Startup).
RESUMEN DE LA LECCIÓN Ahora podrá: ●
268
Diferenciar entre entidades Web Dynpro visibles interna y externamente
© Copyright . Reservados todos los derechos.
Capítulo 8 Evaluación de la formación
1. ¿Cuál de los siguientes elementos incluye el código fuente de Web Dynpro? Seleccione la respuesta correcta. X
A Controladores Web Dynpro
X
B Vistas Web Dynpro
X
C Nodos Web Dynpro
X
D Componentes Web Dynpro
2. ¿Cuál de las siguientes afirmaciones acerca de la vinculación de datos es verdadera? Seleccione la respuesta correcta. X
A Permite que a un nodo de contexto de un controlador se le suministren automáticamente datos de un nodo de contexto correspondiente de otro controlador.
X
B Permite que se transporten automáticamente de un contexto del controlador de vistas a un elemento de UI en su layout
X
C Permite colocar el código fuente personalizado en posiciones predefinidas dentro del código generado.
X
D Permite que se transporten mensajes automáticamente de un contexto del componente a un elemento de UI en su nodo subordinado.
3. Se pueden disparar varias tomas de salida desde una vista. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
© Copyright . Reservados todos los derechos.
269
Capítulo 8: Evaluación de la formación
4. ¿Qué se debe activar para modificar la vista que se visualiza en un container de vistas? ¿Qué detonantes hacen que un área de container de vistas contenga una vista en particular? Seleccione la respuesta correcta. X
A Puntos de navegación de entrada
X
B Puntos de navegación de salida
X
C Puntos de navegación del campo
X
D Puntos de navegación
5. ¿De qué partes se componen las entidades visibles internamente en la arquitectura Web Dynpro? Seleccione las respuestas correctas.
270
X
A Ventanas y vistas
X
B Frameworks
X
C Tomas de entrada y salida
X
D Entidades
© Copyright . Reservados todos los derechos.
Capítulo 8 Respuestas a la Evaluación de la formación
1. ¿Cuál de los siguientes elementos incluye el código fuente de Web Dynpro? Seleccione la respuesta correcta. X
A Controladores Web Dynpro
X
B Vistas Web Dynpro
X
C Nodos Web Dynpro
X
D Componentes Web Dynpro
2. ¿Cuál de las siguientes afirmaciones acerca de la vinculación de datos es verdadera? Seleccione la respuesta correcta. X
A Permite que a un nodo de contexto de un controlador se le suministren automáticamente datos de un nodo de contexto correspondiente de otro controlador.
X
B Permite que se transporten automáticamente de un contexto del controlador de vistas a un elemento de UI en su layout
X
C Permite colocar el código fuente personalizado en posiciones predefinidas dentro del código generado.
X
D Permite que se transporten mensajes automáticamente de un contexto del componente a un elemento de UI en su nodo subordinado.
3. Se pueden disparar varias tomas de salida desde una vista. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
© Copyright . Reservados todos los derechos.
271
Capítulo 8: Respuestas a la Evaluación de la formación
4. ¿Qué se debe activar para modificar la vista que se visualiza en un container de vistas? ¿Qué detonantes hacen que un área de container de vistas contenga una vista en particular? Seleccione la respuesta correcta. X
A Puntos de navegación de entrada
X
B Puntos de navegación de salida
X
C Puntos de navegación del campo
X
D Puntos de navegación
5. ¿De qué partes se componen las entidades visibles internamente en la arquitectura Web Dynpro? Seleccione las respuestas correctas.
272
X
A Ventanas y vistas
X
B Frameworks
X
C Tomas de entrada y salida
X
D Entidades
© Copyright . Reservados todos los derechos.
CAPÍTULO 9
Controladores Web Dynpro
Lección 1 Explicación de los controladores de Web Dynpro
274
OBJETIVOS DEL CAPÍTULO ●
Examinar controladores de Web Dynpro
●
Detallar la estructura de componente y controladores personalizados
●
Detallar la estructura de los controladores de vistas y controladores de ventanas
© Copyright . Reservados todos los derechos.
273
Capítulo 9 Lección 1 Explicación de los controladores de Web Dynpro
RESUMEN DE LA LECCIÓN Esta lección proporciona una resumen de varios tipos de controladores y entidades que forman una parte integral de un componente Web Dynpro. Ejemplo empresarial Desea implementar la lógica de flujo de su aplicación Web Dynpro. Esto incluirá implementar programas de control de eventos, métodos de punto de navegación de entrada y reacción a eventos de clientes, los cuales viven dentro de los controladores. Por este motivo, se requieren los siguientes conocimientos: ●
Una buena comprensión de los contenidos de un controlador Web Dynpro
●
Una buena comprensión de la función de cada entidad de controlador.
●
Una buena comprensión de las diferencias entre el controlador de componentes, los controladores personalizados, los controladores de vistas y los controladores de ventanas.
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Examinar controladores de Web Dynpro
●
Detallar la estructura de componente y controladores personalizados
●
Detallar la estructura de los controladores de vistas y controladores de ventanas
Tipos de controlador Los diferentes tipos de controladores que se pueden encontrar en un componente Web Dynpro son los siguientes:
274
Tipos de controlador
Descripción
Controlador de componentes
Solo hay un controlador de componentes en cada componente Web Dynpro. Se trata de un controlador global, visible para todos los demás controladores. El controlador de componentes dirige la funcionalidad de todo el componente. Este controlador no tiene interfaz visual.
© Copyright . Reservados todos los derechos.
Lección: Explicación de los controladores de Web Dynpro
Tipos de controlador
Descripción
Controladores personalizados
Los controladores personalizados son opcionales. Se definen en la fase de diseño y pueden utilizarse para encapsular subfunciones del controlador de componentes. Se pueden definir varios controladores personalizados en un componente. El framework Web Dynpro instancia automáticamente los controladores personalizados y la orden de instanciación es indefinida. Por ello, la codificación en un controlador personalizado no debería depender de la existencia de ningún otro controlador personalizado.
Controladores de configuración
Éste es un controlador personalizado especial. Solo es necesario si el componente correspondiente implementa una configuración especial y funciones de personalización. Solo puede existir una sola configuración en cualquier componente. Cualquier controlador puede acceder al controlador de configuración, pero el controlador de configuración no puede acceder a ningún otro controlador.
Controladores de vistas
Cada vista consta de la parte de layout y de un controlador de vistas. Este controlador gestiona la lógica de proceso específica de la vista, como la verificación de la entrada de usuario y la gestión de las acciones de usuario.
Controladores de ventanas
Cada ventana tiene exactamente un controlador de ventanas. Usted puede utilizar este controlador para gestionar los datos traspasados mediante las tomas de entrada cuando se reutiliza como controlador subordinado. Puede llamar métodos de este controlador desde los métodos de la toma de entrada de la ventana.
En tiempo de ejecución, todas las instancias del controlador son singleton con respecto a sus componentes superiores. Esto también es así para los controladores de vistas; por lo tanto, no está permitido incrustar una vista en un conjunto de vistas más de una vez. El contexto y los métodos definidos en un controlador son privados a menos que otro controlador declare de manera explícita la utilización de dicho controlador. No obstante, un controlador de vistas no puede declararse como controlador utilizado, lo que significa que los datos de contexto y los métodos de un controlador de vistas son siempre privados. Vida útil de instancia de controlador
© Copyright . Reservados todos los derechos.
275
Capítulo 9: Controladores Web Dynpro
Web Dynpro es una tecnología con estado. La vida útil de las instancias de controlador no se limita al tiempo usado para procesar el código de programación y para procesar la interfaz de usuario (UI). La siguiente lista describe las vidas útiles de las diferentes instancias de controlador según el tipo de controlador: ● Controlador de componentes La duración del controlador de componentes equivale a la duración del componente. Al iniciar una aplicación Web Dynpro, el tiempo de ejecución de Web Dynpro instancia el controlador de componentes. ●
Controladores personalizados La instanciación de un controlador personalizado se pospone hasta que se llama al primer método del controlador. Las instancias del controlador personalizado no pueden eliminarse explícitamente.
●
Controladores de configuración Un controlador de configuración se instancia como primer controlador del componente. Su duración equivale a la duración del componente.
●
Controladores de vistas La instanciación de un controlador de vistas se pospone hasta que se llama al primer método del controlador. El desarrollador puede controlar la vida útil de un controlador de vistas mediante las propiedades de vista: Para eliminar la instancia de vista con el componente, el desarrollador selecciona la opción controlada por el framework. Para eliminar la instancia de vista cuando la vista ya no pertenezca al conjunto de vistas, el desarrollador selecciona la opción cuando sea visible.
●
Controladores de ventanas La instanciación de un controlador de ventanas se pospone hasta que se llama al primer método del controlador. Esto se realiza iniciando una aplicación Web Dynpro, incrustando la vista de interfaz relacionada en la ventana del componente externo o visualizando la ventana en una ventana de diálogo. Las instancias del controlador de ventanas no pueden eliminarse explícitamente.
276
© Copyright . Reservados todos los derechos.
Lección: Explicación de los controladores de Web Dynpro
Entidades de controlador comunes
Figura 144: Componentes de todos los controladores
Cada controlador tiene su propio contexto. El nodo raíz del contexto ya existe. Todos los otros nodos y atributos se definen estáticamente o dinámicamente en el tiempo de ejecución en el código fuente. En todos los controladores, el framework Web Dynpro llama a determinados métodos en un orden predefinido. A estos métodos se les denomina métodos de conexión. Hay disponibles diferentes métodos de conexión en función del tipo de controlador. Todos los tipos de controlador contienen por lo menos dos métodos de conexión que se procesan solo una vez durante la vida útil de la instancia del controlador, en los siguientes eventos: ●
Cuando se crea una instancia de controlador (wddoinit( ))
●
Cuando se elimina una instancia de controlador (wddoexit( ))
Los métodos adicionales se pueden definir en la etiqueta Métodos. Los atributos que no están asociados a ninguna propiedad de elemento de UI se declaran en la etiqueta Atributos. Una vez declarados, los atributos son visibles en todos los métodos de este controlador. Existen dos atributos predefinidos, que se utilizan para acceder a la funcionalidad del controlador (WD_THIS) y del contexto (WD_CONTEXT). Uso compartido de información entre controladores Para compartir información entre varios controladores, un controlador debe declarar la utilización de otro controlador. Esto se puede llevar a cabo en la etiqueta Propiedades del controlador que necesita acceder a otro controlador. Este tipo de uso compartido de datos se utiliza para crear un nodo de contexto asignado o para acceder a los métodos definidos por el usuario y a los atributos públicos de otro controlador. No se debe especificar el nombre de un controlador de vistas como controlador utilizado, ya que se esto viola los principios de diseño Modelo Vista Controlador (MVC). Un controlador de vistas se debe escribir de manera que sea únicamente responsable de la visualización de los
© Copyright . Reservados todos los derechos.
277
Capítulo 9: Controladores Web Dynpro
datos y la interacción del usuario. Un controlador de vistas no es responsable de generar los datos que visualiza; ése es el rol de un controlador personalizado. Los métodos de todos los controladores le permiten acceder a la lógica empresarial, como módulos de función, BAPI u otros métodos en clases auxiliares.
Entidades especiales de componente / Controladores personalizados
Figura 145: Controladores de componentes y personalizados: Entidades especiales
Tanto en el controlador de componentes como en los controladores personalizados, los eventos se pueden definir con los parámetros de su elección. Cualquier método de cualquier otro controlador, incluidos los controladores de vistas y de ventanas, se pueden registrar a estos eventos si dicho método se define como método auxiliar de eventos. Estos eventos se utilizan normalmente para invocar el procesamiento en un controlador de vistas una vez finalizado el procesamiento en el controlador de componentes. Esto se puede realizar cuando un método del controlador de vistas se suscribe a un evento emitido por el controlador de componentes. Mediante sus declaraciones en la fase de diseño, el marco Web Dynpro lleva a cabo automáticamente la definición, la activación y la gestión de la suscripción a dichos eventos. También tiene la opción adicional de realizar suscripciones dinámicas a eventos en tiempo de ejecución.
Atención: Si dos o más métodos se suscriben al mismo evento, el orden en el que se ejecutan será indefinido. El controlador de componentes posee los siguientes métodos de conexión adicionales: ● wddobeforenavigation() ●
278
wddopostprocessing()
© Copyright . Reservados todos los derechos.
Lección: Explicación de los controladores de Web Dynpro
●
wddoapplicationstatechange()
Los métodos, elementos de contexto y eventos pueden marcarse como parte de la interfaz. Estos elementos se muestran entonces a otros componentes mediante el controlador de interfaz.
Entidades especiales de los controladores de vistas
Figura 146: Entidades especiales de los controladores de vistas
Un controlador de vistas es un bloque de construcción visual de un componente Web Dynpro y está diseñado para gestionar todos los aspectos de la visualización de datos y la interacción del usuario. Los eventos especiales de navegación y los programas de control de eventos de navegación, llamados puntos de navegación, se han creado para permitir la navegación entre varios controladores de vistas Web Dynpro. Activar un punto de navegación de salida emite un evento de navegación. Mediante el nombre genérico para una toma de salida, su declaración produce la generación de un método denominado FIRE__PLG en el controlador de componentes de la vista. Este método solo está visible para el framework de Web Dynpro. Una toma de entrada es un programa de control de eventos de navegación que puede estar registrado a una solicitud de navegación. Mediante el nombre genérico para una toma de entrada, su declaración produce la generación de un método denominado HANDLE__PLG en el controlador de la vista. Un registro estático de un punto de navegación de entrada al evento de navegación provocado por un punto de navegación de salida se denomina un enlace de navegación. Los enlaces de navegación no forman parte de una vista pero se definen en una ventana incrustada en la vista. Por consiguiente, el registro de eventos se puede definir de manera diferente en varias ventanas.
© Copyright . Reservados todos los derechos.
279
Capítulo 9: Controladores Web Dynpro
Métodos de conexión especial Una acción enlaza un evento del cliente (por ejemplo, seleccionar un pulsador en un browser) a un método de programa de control de eventos definido en el controlador de vistas correspondiente. Cuando define una acción con el nombre , se genera automáticamente un método de programa de control de eventos (ONACTION). Si debe sustituirse una vista como resultado de un evento de cliente, el punto de navegación de salida relacionado se puede activar en este método de programa de control de eventos de la acción. Los controladores de vistas incluyen los siguientes métodos de conexión especial: wddobeforeaction()
●
●
wddoafteraction()
●
wddomodifyview()
●
wddooncontextmenu()
Además de los atributos estándar que existen en todos los controladores (WD_THIS y WD_CONTEXT), un controlador de vistas tiene una referencia al controlador de componentes de su componente: WD_COMP_CONTROLLER. Se puede utilizar esta referencia para acceder a funciones del controlador de componente, por ejemplo, para llamar métodos declarados allí.
Consejo: El atributo WD_COMP_CONTROLLER solo se genera si se declara la utilización del controlador de componentes.
Entidades especiales de los controladores de ventanas
Figura 147: Arquitectura del controlador de ventanas
280
© Copyright . Reservados todos los derechos.
Lección: Explicación de los controladores de Web Dynpro
Los controladores de ventanas son similares a los controladores de vistas pero, a diferencia de estos, no tienen una interfaz de usuario (layout de vista). Todas las vistas que se visualizarán cuando se utilice una aplicación Web Dynpro deben incrustarse en la ventana a la que la aplicación o el componente que llama hacen referencia. La ventana Web Dynpro incrusta todas las vistas que se visualizarán. Si se definen estáticamente, los enlaces de navegación que definen los posibles conjuntos de vistas están incrustados en la ventana Web Dynpro. Cada ventana Web Dynpro contiene tomas de salida y de entrada, igual que las vistas. Puede utilizar las tomas para establecer la navegación en varios componentes. Para mostrar las tomas a la interfaz del componente, seleccione la propiedad Interfaz de cada toma. A continuación, estas tomas forman parte de la vista de interfaz relacionada. Si se declara la utilización del controlador de componentes, el controlador de ventanas contiene el atributo adicional WD_COMP_CONTROLLER que permite el acceso a la funcionalidad del controlador de componentes. Los controladores de ventanas incluyen los siguientes métodos de conexión especial: wddoonopen( )
●
●
wddoonclose( )
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Examinar controladores de Web Dynpro
●
Detallar la estructura de componente y controladores personalizados
●
Detallar la estructura de los controladores de vistas y controladores de ventanas
© Copyright . Reservados todos los derechos.
281
Capítulo 9: Controladores Web Dynpro
282
© Copyright . Reservados todos los derechos.
Capítulo 9 Evaluación de la formación
1. El contexto y los métodos definidos en un controlador son privados a menos que otro controlador declare de manera explícita la utilización de dicho controlador. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
2. ¿Cuál de los siguientes métodos de conexión existe en un controlador de componente? Seleccione las respuestas correctas. X
A wddobeforenavigation()
X
B wddopostprocessing()
X
C wddoonopen( )
X
D wddoapplicationstatechange()
3. Los enlaces de navegación que definen los posibles conjuntos de vistas siempre están incrustados en una ventana Web Dynpro. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
© Copyright . Reservados todos los derechos.
283
Capítulo 9 Respuestas a la Evaluación de la formación
1. El contexto y los métodos definidos en un controlador son privados a menos que otro controlador declare de manera explícita la utilización de dicho controlador. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
2. ¿Cuál de los siguientes métodos de conexión existe en un controlador de componente? Seleccione las respuestas correctas. X
A wddobeforenavigation()
X
B wddopostprocessing()
X
C wddoonopen( )
X
D wddoapplicationstatechange()
3. Los enlaces de navegación que definen los posibles conjuntos de vistas siempre están incrustados en una ventana Web Dynpro. Indique si esta afirmación es verdadera o falsa.
284
X
Verdadero
X
Falso
© Copyright . Reservados todos los derechos.
CAPÍTULO 10
Contexto de Web Dynpro
Lección 1 Definición de contexto
286
Lección 2 Establecer propiedades a los nodos del contexto
292
Lección 3 Asignación de contextos Ejercicio 17: Definir, asignar y vincular datos al contexto
300 303
OBJETIVOS DEL CAPÍTULO ●
Definir nodos y atributos en el contexto de un controlador.
●
Explicar la propiedad de cardinalidad de los nodos de contexto
●
Explicar la propiedad Singleton de los nodos de contexto
●
Definir asignación interna de contextos
© Copyright . Reservados todos los derechos.
285
Capítulo 10 Lección 1 Definición de contexto
RESUMEN DE LA LECCIÓN Esta lección explica el contexto. Además, describe cómo definir nodos y atributos en el contexto. Ejemplo empresarial Ha creado su primer componente Web Dynpro con vistas y ventanas que incluyen las vistas. Ha creado una aplicación Web Dynpro para acceder a su componente Web Dynpro desde el browser. Quiere que su aplicación muestre datos del sistema back-end. Por lo tanto, necesita definir variables que puedan asociarse a elementos de UI y que puedan intercambiarse fácilmente entre varios controladores. Estas variables se definen en el contexto de controlador, por lo que desea aprender a definir esta estructura jerárquica de almacenamiento de datos. Por este motivo, se requieren los siguientes conocimientos: ●
Comprensión de los nodos y atributos en el contexto de un controlador
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Definir nodos y atributos en el contexto de un controlador.
La estructura contextual
Figura 148: El contexto
286
© Copyright . Reservados todos los derechos.
Lección: Definición de contexto
Cada controlador Web Dynpro tiene exactamente una estructura de almacenamiento de datos jerárquica, conocida como contexto. Los datos incluidos en el contexto existen únicamente durante el período de vida del controlador. Una vez cancelada la instancia de controlador, todos los datos incluidos en su contexto se pierden. La estructura del contexto, es decir, los metadatos, se define normalmente en la fase de diseño. No obstante, en tiempo de ejecución se puede modificar el contenido del contexto, y también puede modificar dinámicamente la estructura. Proceso de modificación del contexto
Figura 149: Modificación del contexto (1)
La figura muestra los diferentes pasos para modificar los nodos y atributos de contexto usando diferentes opciones en las pantallas de aplicación. Proceso de modificación de la vista de editor de contexto
Figura 150: Modificación del contexto (2)
© Copyright . Reservados todos los derechos.
287
Capítulo 10: Contexto de Web Dynpro
A menos que se declare de otro modo, todos los datos de tiempo de ejecución del contexto de un controlador son privados para ese componente. Puede facilitar el acceso a la información que contiene el contexto del controlador de componentes en gran medida para el contexto de otro controlador (personalizado o de vistas) mediante una técnica conocida como asignación de contextos. Mediante esta técnica, dos o más controladores pueden acceder a los mismos datos de tiempo de ejecución. La asignación de contextos es el mecanismo básico del uso compartido de datos entre controladores de un único componente.
Nota: Un controlador de vistas no puede compartir sus datos de contexto. Nuevos nodos y atributos de contexto: Creación
Figura 151: Creación de nuevos nodos y atributos de contexto
Todos los contextos de controlador se construyen a partir de una disposición jerárquica de entidades conocidas como nodos y atributos. Un contexto tiene siempre un nodo superior conocido como nodo raíz de contexto. Este nodo raíz de contexto tiene propiedades fijas y no se puede eliminar. Un nodo de contexto es la clase de abstracción principal utilizada para el almacenamiento de datos de tiempo de ejecución en el marco Web Dynpro. Los nodos de contexto se organizan jerárquicamente. El nodo debe tener atributos u otros nodos como nodos subordinados.
288
© Copyright . Reservados todos los derechos.
Lección: Definición de contexto
Consejo: Por razones de simplicidad, el término nodo se utiliza de las siguientes formas: ●
●
Cuando se refiere al tiempo de diseño, el término nodo describe un elemento definido en el contexto de un controlador. Cuando se refiere al tiempo de ejecución, el término nodo se utiliza para describir un objeto (instancia) derivado de los metadatos. Un término más correcto sería objeto de nodo o instancia de nodo.
Todas las entidades subordinadas de un nodo se agregan a una unidad conocida como elemento. Un nodo se puede considerar como una serie de dichos elementos del mismo modo que una tabla es una serie de filas.
Atención: El nombre de un nodo de contexto debe ser único en toda la estructura del contexto de un controlador. Un atributo de contexto es una entidad del contexto que no puede tener subordinados. Un atributo de contexto no puede existir sin estar subordinado a algún nodo superior, estar en el nodo raíz de contexto o en algún otro nodo. Si debe almacenarse una serie de objetos de datos estructurados en un contexto de controlador en tiempo de ejecución, se define un nodo de contexto para almacenar la serie. Cada set de datos estructurado se almacena en un elemento. La referencia a cada elemento se almacena en la serie de nodos. La estructura de datos se deriva de los atributos del contexto definidos como subelementos del nodo.
© Copyright . Reservados todos los derechos.
289
Capítulo 10: Contexto de Web Dynpro
Propiedades de los nodos de contexto
Figura 152: Nodos de contexto y atributos de contexto en tiempo de ejecución (1)
La figura muestra la creación del objeto de nodo en tiempo de ejecución y la raíz de contexto en la fase de diseño. Atributos de contexto relacionados con la raíz de contexto
Figura 153: Nodos de contexto y atributos de contexto en tiempo de ejecución (2)
290
© Copyright . Reservados todos los derechos.
Lección: Definición de contexto
Una estructura se genera en tiempo de ejecución para los atributos de contexto relacionados con la raíz de contexto. La referencia a esta estructura se almacena en el atributo de elemento STATIC_ATTRIBUTES. Nodos de contexto y atributos de contexto en tiempo de ejecución
Figura 154: Nodos de contexto y atributos de contexto en tiempo de ejecución (3)
Un objeto de nodo se crea automáticamente para cada subnodo de la raíz de contexto. Las referencias se almacenan en el atributo CHILD_NODES del elemento raíz de contexto. RESUMEN DE LA LECCIÓN Ahora podrá: ●
Definir nodos y atributos en el contexto de un controlador.
© Copyright . Reservados todos los derechos.
291
Capítulo 10 Lección 2 Establecer propiedades a los nodos del contexto
RESUMEN DE LA LECCIÓN Esta lección explica varias propiedades de un nodo de contexto. Ejemplo empresarial Usted quiere crear el contexto del controlador de componente para su componente Web Dynpro con los nodos y atributos necesarios para mantener los datos necesarios para su aplicación Web Dynpro. Necesita establecer las propiedades de estos nodos correctamente para que se pueda mantener la cantidad correcta de datos en tiempo de ejecución, entre otros. Por este motivo, se requieren los siguientes conocimientos: ●
Una buena comprensión de la propiedad de cardinalidad de los nodos de contexto
●
Una buena comprensión de la propiedad Singleton de los nodos de contexto
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá:
292
●
Explicar la propiedad de cardinalidad de los nodos de contexto
●
Explicar la propiedad Singleton de los nodos de contexto
© Copyright . Reservados todos los derechos.
Lección: Establecer propiedades a los nodos del contexto
Cardinalidad
Figura 155: Estructura contextual en tiempo de ejecución: Propiedad de cardinalidad (1)
Muchas propiedades de los nodos establecidos en el tiempo de diseño determinan la asignación de memoria (por ejemplo, la dimensión de los arrays de datos que deben almacenarse) en tiempo de ejecución. Por lo tanto, es esencial conocer las propiedades de los nodos. En la fase de diseño, puede crear la estructura de metadatos en la que se almacenan los datos de tiempo de ejecución. Todos los nodos de contexto constituyen series, por lo que es posible que referencias a varios elementos sean guardadas por un nodo de contexto en tiempo de ejecución. Todos los nodos de contexto tienen una propiedad conocida como cardinalidad. La cardinalidad describe la cantidad máxima y mínima de elementos que la serie de nodos puede tener en tiempo de ejecución. Todos los nodos contienen una serie de elementos, incluso cuando el número máximo de elementos de la colección está limitado a uno. Los posibles valores de cardinalidad (especificados como ..) y los permisos de elemento que dependen de los valores de cardinalidad son los siguientes: Valores de cardinalidad
Descripción
0..1
Se permite cero o un elemento
0..n
se permite cero o más elementos
1..1
Se permite exactamente un elemento
1..n
se permite uno o más elementos
© Copyright . Reservados todos los derechos.
293
Capítulo 10: Contexto de Web Dynpro
En el tiempo de ejecución, el nodo raíz de contexto se instancia automáticamente. La referencia a este nodo se proporciona mediante el marco a través del atributo de controlador WD_CONTEXT. No puede modificar las propiedades del nodo raíz de contexto. Como la cardinalidad es 1..1, el nodo raíz de contexto contiene siempre exactamente un elemento. Nodos de contexto: Cardinalidad Todos los nodos de contexto definidos como subordinados directos del nodo raíz de contexto (nodos independientes) se instancian automáticamente cuando se accede a ellos por primera vez (mediante programación o porque los datos del nodo se visualizarán en la UI). Si la cardinalidad del nodo es igual a 1..1 o 1..n, se crea automáticamente el elemento con el índice 1 cuando se instancia el nodo. Todos los otros elementos se instancian mediante programación. Es posible que no exista un nodo si la serie del objeto de nodo superior está vacío (no existen elementos relacionados con el nodo superior). Esto significa que no se garantiza la existencia de nodos que no están definidos como subordinados directos del nodo raíz de contexto (nodos dependientes). Los siguientes son los escenarios que pueden hacer que la aplicación tenga fallos en el volcado debido a violaciones de cardinalidad: ● Eliminar el elemento por defecto de un nodo con cardinalidad 1..1 o 1..n. ●
Agregar un segundo elemento a un nodo con cardinalidad 0..1 ó 1..1.
Estructura contextual en tiempo de ejecución: Propiedad de cardinalidad
Figura 156: Estructura contextual en tiempo de ejecución: Propiedad de cardinalidad (2)
La figura muestra que la estructura del contexto en tiempo de ejecución no es la jerarquía plana en dos dimensiones como en la fase de diseño. En el tiempo de ejecución, el contexto consta de varios objetos dependientes. Esto puede compararse a un tabla interna en ABAP en la fase de diseño y en tiempo de ejecución. En la fase de diseño, los metadatos de la tabla interna incluye la estructura dada
294
© Copyright . Reservados todos los derechos.
Lección: Establecer propiedades a los nodos del contexto
por el tipo de línea. La dimensión de la tabla interna (el número de líneas que el objeto de datos incluye en tiempo de ejecución) no forma parte de la definición. En tiempo de ejecución, se pueden añadir varias líneas al objeto de datos de la tabla interna, al igual que se pueden añadir varios elementos a una serie que se origine a partir de un nodo de contexto en tiempo de ejecución. No obstante, como no hay restricciones sobre el número mínimo y máximo de líneas que una tabla interna puede incluir, no existe una contrapartida para la propiedad cardinalidad. Las tablas internas tienen siempre cero líneas tras la declaración del objeto y pueden incluir un número ilimitado de líneas en tiempo de ejecución.
Selección de leads
Figura 157: Índice de selección de leads
Cada nodo de contexto contiene el atributo LEAD_SELECTION_INDEX. Este atributo de tipo número entero se utiliza para simplificar el acceso de la serie del nodo. El marco Web Dynpro establece automáticamente el índice de la selección de leads si la propiedad de nodo de contexto Inicializar selección de leads está establecida en verdadero. En este caso, el atributo se fija automáticamente en 1 apenas se crea el primer elemento. El índice de la selección de leads también puede establecerse mediante el código fuente de programa o con las acciones de usuario relacionadas con los elementos de UI (por ejemplo, mediante la selección de una línea en el elemento de UI de una Tabla asociado al nodo).
Consejo: El índice de la selección de leads se elimina seleccionando el valor de la constante IF_WD_CONTEXT_NODE=>NO_SELECTION. Índice de selección de leads: Utilización En el código fuente del controlador, se pueden utilizar métodos especiales para acceder al valor del índice de selección de leads del nodo y al elemento relacionado a este índice.
© Copyright . Reservados todos los derechos.
295
Capítulo 10: Contexto de Web Dynpro
El índice de selección de leads es importante en las siguientes situaciones: ●
●
●
Si se selecciona una sola fila en una tabla, el índice de selección de leads se ajusta automáticamente según la fila seleccionada. Se puede acceder al elemento de contexto relacionado sin tener que encontrar el índice de elemento explícitamente. Por otro lado, la fila marcada se puede manipular de manera programada cambiando el índice de selección de leads. Los campos de formulario pueden estar vinculados a atributos de un nodo de contexto con la cardinalidad 0:n o 1:n. En este caso, los datos del formulario se originan del elemento relacionado al índice de selección de leads del nodo. El set de datos visualizado por el formulario se puede manipular de manera programada cambiando el índice de selección de leads. Se pueden asignar métodos especiales (funciones de suministro) a nodos de contexto. El framework puede llamar automáticamente a una función de suministro si la selección de leads en el nodo superior cambia.
La propiedad Singleton
Figura 158: Estructura contextual en tiempo de ejecución: Propiedad Singleton (1)
La figura muestra que el nodo de contexto N1 tiene un nodo subordinado llamado N2. El nodo N2 es un nodo diferente con su propia serie de elementos. La propiedad booleana Singleton afecta de manera importante a la relación entre un nodo y su nodo superior. Si la propiedad singleton del nodo N2 está establecida en falso (el nodo N2 es un no singleton en tiempo de ejecución, que es el valor predeterminado), hay una instancia diferente del nodo subordinado N2 para cada elemento de la serie de nodos superior N1. Lo más importante es que cada instancia del nodo N2 está relacionada con el elemento respectivo de la serie de nodos superior. Tenga en cuenta que las flechas que señalan a cada
296
© Copyright . Reservados todos los derechos.
Lección: Establecer propiedades a los nodos del contexto
una de las series de nodos N2 se crean en los elementos del nodo superior. Por consiguiente, si hay n elementos en el nodo superior, hay n instancias diferentes de un nodo subordinado no singleton. Estructura contextual en tiempo de ejecución: Propiedad Singleton
Figura 159: Estructura contextual en tiempo de ejecución: Propiedad Singleton (2)
Si la propiedad Singleton del nodo N2 se establece en true, la cantidad de elementos presentes en la serie de nodos superiores N1 no tiene importancia. Siempre habrá únicamente una instancia del nodo subordinado N2 para el nodo N2 en tiempo de ejecución si es un singleton.
© Copyright . Reservados todos los derechos.
297
Capítulo 10: Contexto de Web Dynpro
Funciones de suministro
Figura 160: Relleno de un nodo dependiente (nodo Singleton): función de suministro
La figura muestra que puede haber muchos elementos diferentes en la serie de nodos N1. Debemos asegurarnos de que cuando se accede al nodo inferior N2, éste contiene los datos correctos para el elemento seleccionado en el nodo superior. Las funciones de suministro se utilizan para garantizar que los nodos subordinados se rellenen automáticamente. Se puede asignar una función de suministro a cada nodo de contexto de un controlador. El tiempo de ejecución de Web Dynpro llama a la función de suministro automáticamente en las siguientes situaciones: ● Si la serie de nodos es inicial. ●
Si se modifica el índice de selección de leads del nodo superior.
●
Si la serie de nodos se invalida de manera programada.
Consejo: En todas estas situaciones, la función de suministro solo se llama cuando es necesario Si no se accede de manera programada al nodo inferior N2 o si éste no está asociado con ningún elemento de UI en el próximo conjunto de vistas, no se llama a la función de suministros. Quizás no se llamen a las funciones de suministro explícitamente desde el código fuente de un método de controlador. Solo el tiempo de ejecución de Web Dynpro puede acceder a dicho método.
298
© Copyright . Reservados todos los derechos.
Lección: Establecer propiedades a los nodos del contexto
Asignación de una función de suministro a un nodo Puede asignarse una función de suministro a un nodo estableciendo el valor de la propiedad Función de suministro. Como resultado, se crea un método de controlador adicional con una firma dada. Una referencia al elemento en la selección de leads del nodo superior (nombre: PARENT_ELEMENT) permite acceder a los atributos de este elemento. Una referencia al nodo con el cual se relaciona la función de suministro (nombre: NODE) le permite almacenar los datos dependientes en la serie de nodos inferiores. Cuando se utiliza una transacción empresarial estándar, la información se presenta en forma de lista de registros de cabecera de alguna clasificación (por ejemplo, cabeceras de pedidos de cliente). Desde esta lista, el usuario selecciona normalmente una cabecera de pedidos y, a continuación, mira sus partidas. Tiene mucho más sentido leer la información de partida únicamente cuando es necesario que leer todas las partidas de todos los pedidos de cliente en el supuesto de que sean relevantes para alguien. Esto generaría una arquitectura de aplicación muy ineficiente tanto en términos de requisitos de procesamiento como de uso de la memoria. Instanciación de datos no activa Web Dynpro sigue el principio de instanciación de datos no activa. Los datos solo se crean cuando realmente se necesitan. Cuando se aplica este principio a la arquitectura de contexto, el nodo subordinado permanece sin procesar a menos que el programa necesite realmente mirar los datos de este. La instanciación de datos no activa significa también que no se crean automáticamente series dependientes para todos los elementos del nodo superior. La creación de una serie del nodo dependiente se pospone hasta que el elemento relacionado de la serie superior obtiene la selección de liderazgo. RESUMEN DE LA LECCIÓN Ahora podrá: ●
Explicar la propiedad de cardinalidad de los nodos de contexto
●
Explicar la propiedad Singleton de los nodos de contexto
© Copyright . Reservados todos los derechos.
299
Capítulo 10 Lección 3 Asignación de contextos
RESUMEN DE LA LECCIÓN Esta lección explica la asignación de contexto. Ejemplo empresarial Necesita acceder a datos del contexto desde otro controlador. Por este motivo, se requieren los siguientes conocimientos: ●
Cómo asignar el contexto
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Definir asignación interna de contextos
Asignación de contextos
Figura 161: Asignación de contextos
La asignación de contextos permite a un controlador (normalmente un controlador de vistas) acceder a los datos procesados anteriormente por otro controlador. Como una relación de asignación permite que se realice una referencia directa a los datos de otro controlador, no es necesario que estos datos se copien o muevan.
300
© Copyright . Reservados todos los derechos.
Lección: Asignación de contextos
Al nodo de contexto que actúa como fuente de datos se le conoce como el nodo de origen de asignación, y al nodo de contexto que se asigna se le denomina nodo asignado.
Nota: Un nodo asignado no actualiza su serie de elementos propia. En su lugar, hace referencia a la serie de elementos del nodo de origen de asignación. Un controlador de vistas no puede actuar como fuente de datos para una relación de asignación porque esto viola los principios del diseño de programa MVC. Principio de diseño En los programas diseñados de acuerdo con el principio MVC, un controlador de vistas se escribe de modo que no tome parte en la generación de los datos que visualiza. En su lugar, el controlador de vistas solo se preocupa de la visualización de datos generados con anterioridad y de la gestión de la interacción resultante del usuario (validación, tratamiento de errores, etc.). Interactuar con lógica back end para generar los datos solicitados es tarea del controlador de componentes o controlador personalizado. Una vez generados los datos, el controlador de componentes (o controlador personalizado) los suministra a un controlador de vistas para su visualización. Si un controlador de vistas actúa como fuente de datos (origen) para una relación de asignación, puede producirse una situación en la que un controlador de componentes (o controlador personalizado) sería dependiente de la funcionalidad de un controlador de vistas. Esto no es un diseño adecuado y, por consiguiente, no está permitido. Asignación entre controladores Para establecer una asignación de contextos entre dos controladores, el controlador de destino debe declarar el controlador de origen como controlador utilizado en sus propiedades. Si se selecciona la etiqueta Contexto en modo de edición del controlador de destino, se visualizarán los contextos de todos los controladores utilizados. A continuación, se puede hacer referencia a un nodo de un contexto de origen de la siguiente manera: ● Si todavía no se ha definido un nodo independiente a asignar en el contexto del controlador de destino, toda la estructura relacionada con el nodo de origen se copia arrastrándolo desde el contexto del controlador de origen al nodo raíz del contexto del controlador de destino. Además, el nodo que se copia se asigna al nodo de origen. ●
Si la estructura relacionada con un nodo ya se ha definido en el contexto del controlador de destino, la asignación puede establecerse arrastrando uno de los nodos y soltándolo en el otro nodo. Sin embargo, el origen de la asignación siempre es el nodo incluido en el controlador utilizado (que se visualiza en la parte derecha).
Consejo: Si el nodo que quiere asignar contiene los atributos que no se incluyen en el origen de la asignación, estos atributos se borran al asignar el nodo. La asignación de origen y el nodo asignado quizás posean diferentes nombres. Después de ejecutarse la asignación entre los dos nodos, todos sus elementos se asignan, tanto los atributos como los nodos subordinados.
© Copyright . Reservados todos los derechos.
301
Capítulo 10: Contexto de Web Dynpro
Si la estructura de nodo del origen de asignación se modifica (si se añaden, eliminan o modifican atributos), la asignación se puede actualizar (sincronizar) mediante el menú contextual del nodo asignado. Asignación interna
Figura 162: Asignación de contextos: Asignación interna
Asignación interna es el nombre que se da a una relación de asignación en la que tanto el nodo asignado como el nodo de origen de asignación están dentro de los límites de un componente. Esto significa que la relación de asignación puede establecerse completamente al escribir el componente actual. Sin embargo, existe un caso especial en el que una relación de asignación solo puede establecerse parcialmente al escribir el componente actual. Esto se conoce como asignación externa. Se trata de una situación en la que el nodo de origen de asignación está fuera de los límites de, o es externo a, el componente actual.
Nota: La asignación externa detallada se trata más adelante en el curso.
¿Qué tipo de relación de asignación es la asignación interna?
302
X
A Solo el nodo asignado está dentro de los límites de un componente
X
B Solo el nodo de origen de asignación está dentro de los límites de un componente
X
C Tanto el nodo asignado como el nodo de origen de asignación están dentro de los límites de un componente
X
D Tanto el nodo asignado como el nodo de origen de asignación están fuera de los límites de un componente
© Copyright . Reservados todos los derechos.
Capítulo 10 Ejercicio 17 Definir, asignar y vincular datos al contexto
Ejemplo empresarial Desea desarrollar una aplicación Web Dynpro que le permita introducir datos en los campos de entrada de la primera vista. La entrada de usuario se visualiza en la próxima vista. Modelo: NET310_CTRL_S Solución: NET310_COND_S Crear nodos en contextos de componentes y vistas, y vincular elementos de UI para ver nodos de contexto. Tarea 1 Copie la solución del ejercicio anterior o del componente modelo. 1. Copie la solución del ejercicio anterior (ZNET310_CTRL_##) o del componente Web Dynpro NET310_CTRL_S en el nuevo componente, ZNET310_COND_##. Tarea 2 En el contexto del controlador de componentes, cree un nodo de contexto que contenga atributos para almacenar un ID de transportista y un ID de conexión. Cree el mismo nodo de contexto en cada una de las dos vistas y asigne los nodos definidos en los contextos del controlador de vistas al nodo definido en el contexto del controlador de componentes. 1. En el contexto del controlador de componentes, cree un nodo de contexto con el nombre FLIGHTINFO. Este nodo se basa en el tipo dictionary SFLIGHT y tiene la cardinalidad 1..1. Añada dos atributos basados en los campos CARRID y CONNID de la tabla SFLIGHT. 2. Cree el mismo nodo en el contexto de cada controlador de vistas y asigne el nodo de contexto de los controladores de vistas al nodo de contexto FLIGHTINFO del controlador de componentes. Tarea 3 Para ambas vistas, cree un formulario que visualice una etiqueta y un campo de entrada para cada atributo de contexto del nodo FLIGHTINFO. Utilice el asistente de codificación Web Dynpro para realizar este paso. 1. En el layout de la vista INPUT_VIEW, cree un formulario con referencias a los atributos de contexto CARRID y CONNID. Utilice el Asistente de codificación Web Dynpro para crear el formulario. 2. Repita el paso anterior para la vista OUTPUT_VIEW. Sin embargo, visualice los valores de atributo de los elementos de UI del tipo TextView. 3. Active su componente. Cree una aplicación Web Dynpro para su componente. Pruebe la aplicación.
© Copyright . Reservados todos los derechos.
303
Capítulo 10 Solución 17 Definir, asignar y vincular datos al contexto
Ejemplo empresarial Desea desarrollar una aplicación Web Dynpro que le permita introducir datos en los campos de entrada de la primera vista. La entrada de usuario se visualiza en la próxima vista. Modelo: NET310_CTRL_S Solución: NET310_COND_S Crear nodos en contextos de componentes y vistas, y vincular elementos de UI para ver nodos de contexto. Tarea 1 Copie la solución del ejercicio anterior o del componente modelo. 1. Copie la solución del ejercicio anterior (ZNET310_CTRL_##) o del componente Web Dynpro NET310_CTRL_S en el nuevo componente, ZNET310_COND_##. a) En la pantalla Navegador de objetos, seleccione el componente Web DynproZNET310_CTRL_## y luego explorador Web Dynpro Explorer. b)
(Otro objeto) en la barra de herramientas del
En la ventana de diálogo Selección de objeto, seleccione
(Copiar).
c) En la ventana de diálogo Copiar componente Web Dynpro, indique los datos siguientes: Campo
Valor
Nombre de la copia
ZNET310_COND_##
d) Seleccione Continuar. e) Asigne su componente Web Dynpro a su paquete y orden de transporte cuando se le solicite. Tarea 2 En el contexto del controlador de componentes, cree un nodo de contexto que contenga atributos para almacenar un ID de transportista y un ID de conexión. Cree el mismo nodo de contexto en cada una de las dos vistas y asigne los nodos definidos en los contextos del controlador de vistas al nodo definido en el contexto del controlador de componentes. 1. En el contexto del controlador de componentes, cree un nodo de contexto con el nombre FLIGHTINFO. Este nodo se basa en el tipo dictionary SFLIGHT y tiene la cardinalidad 1..1. Añada dos atributos basados en los campos CARRID y CONNID de la tabla SFLIGHT. a) Trate el controlador de componentes y seleccione la etiqueta Contexto.
304
© Copyright . Reservados todos los derechos.
Lección: Asignación de contextos
b) En el menú contextual del nodo raíz de contexto COMPONENTCONTROLLER seleccione Crear → Nodo. c) En la ventana de diálogo Crear nodos, indique los datos siguientes: Campo
Valor
Nombre de nodo
FLIGHTINFO
Estructura Dictionary
SFLIGHT
Cardinalidad
1..1
d) Seleccione el pulsador Añadir atributo desde estructura. e) En la ventana de diálogo Seleccionar componentes de estructura SFLIGHT, marque los componentes de estructura CARRID y CONNID, y seleccione Continuar. f) Seleccione Grabar. 2. Cree el mismo nodo en el contexto de cada controlador de vistas y asigne el nodo de contexto de los controladores de vistas al nodo de contexto FLIGHTINFO del controlador de componentes. a) En la pantalla Explorador Web Dynpro: Modificar controlador de ZNET310_COND_##, abra la vista Web Dynpro INPUT_VIEW y seleccione la etiqueta Contexto. b) Arrastre el nodo de contexto FLIGHTINFO del contexto COMPONENTCONTROLLER y suéltelo en el nodo raíz del controlador de vista CONTEXT. c) Seleccione Grabar. d) Abra la vista Web Dynpro OUTPUT_VIEW y seleccione la etiqueta Contexto. e) Arrastre el nodo de contexto FLIGHTINFO del contexto COMPONENTCONTROLLER y suéltelo en el nodo raíz del controlador de vista CONTEXT. f) Seleccione Grabar. Tarea 3 Para ambas vistas, cree un formulario que visualice una etiqueta y un campo de entrada para cada atributo de contexto del nodo FLIGHTINFO. Utilice el asistente de codificación Web Dynpro para realizar este paso. 1. En el layout de la vista INPUT_VIEW, cree un formulario con referencias a los atributos de contexto CARRID y CONNID. Utilice el Asistente de codificación Web Dynpro para crear el formulario. a) En la pantalla Explorador Web Dynpro: Modificar vista de ZNET310_COND_##, abra la vista INPUT_VIEW y seleccione la etiqueta Layout. b) Seleccione el elemento de UI ROOTUIELEMENTCONTAINER de la jerarquía de elementos de UI. c) Seleccione el pulsador Asistente de codificación Web Dynpro. d) En la ventana de diálogo Galería de modelos, seleccione Formulario.
© Copyright . Reservados todos los derechos.
305
Capítulo 10: Contexto de Web Dynpro
e) En la ventana de diálogo Crear elementos de formulario para container ROOTUIELEMENTCONTAINER, seleccione el pulsador Contexto y haga doble clic en el nodo de contexto FLIGHTINFO. f) Marque la casilla de selección Crear formulario en el container nuevo y Crear cabecera de sección. g) Seleccione Continuar. h) Seleccione Grabar. 2. Repita el paso anterior para la vista OUTPUT_VIEW. Sin embargo, visualice los valores de atributo de los elementos de UI del tipo TextView. a) En la pantalla Explorador Web Dynpro: Modificar vista de ZNET310_COND_##, abra la vista OUTPUT_VIEW y seleccione la etiqueta Layout. b) Seleccione en ROOTUIELEMENTCONTAINER la jerarquía de elementos de UI. c) Seleccione el pulsador Asistente de codificación Web Dynpro. d) En la ventana de diálogo Galería de modelos, seleccione Formulario. e) En la ventana de diálogo Crear elementos de formulario para container ROOTUIELEMENTCONTAINER, seleccione el pulsador Contexto y haga doble clic en el nodo de contexto FLIGHTINFO. f) En el campo Editor de celdas estándar, seleccione el elemento TextView. g) Marque la casilla de selección Crear formulario en el container nuevo y Crear cabecera de sección. h) Seleccione Continuar. i) Seleccione Grabar. 3. Active su componente. Cree una aplicación Web Dynpro para su componente. Pruebe la aplicación. a) En la pantalla Explorador Web Dynpro: Modificar vista de ZNET310_COND_##, en el menú contextual del componente ZNET310_COND_##, seleccione Activar. b) En la ventana de diálogo Objetos inactivos de NET310-##, seleccione Continuar. c) En la pantalla Explorador Web Dynpro: Modificar vista de ZNET310_COND_##, en el menú contextual del componente ZNET310_COND_##, seleccione Crear → Aplicación Web Dynpro. d) En la ventana de diálogo, Crear aplicación Web Dynpro, seleccione Continuar. e) Seleccione Grabar. f) Asigne su aplicación Web Dynpro a su paquete y orden de transporte cuando se le solicite. g) Desde el menú contextual de su aplicación Web Dynpro ZNET310_COND_##, seleccione Probar para abrir una ventana de navegador e iniciar su aplicación.
306
© Copyright . Reservados todos los derechos.
Lección: Asignación de contextos
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Definir asignación interna de contextos
© Copyright . Reservados todos los derechos.
307
Capítulo 10: Contexto de Web Dynpro
308
© Copyright . Reservados todos los derechos.
Capítulo 10 Evaluación de la formación
1. Un contexto tiene siempre un nodo superior conocido como nodo raíz de contexto. ¿Qué tipo de propiedades tiene este nodo raíz de contexto? Seleccione la respuesta correcta. X
A Propiedades fijas y no se puede eliminar
X
B Sin propiedades fijas y no se puede eliminar
X
C Propiedades fijas y se puede eliminar
X
D Algunos propiedades fijas y se puede eliminar
2. ¿Qué ocurre cuando la cardinalidad de un nodo es igual a 1..1 ó 1..n? Seleccione la respuesta correcta. X
A El elemento con un índice aleatorio se crea automáticamente cuando se instancia el nodo
X
B El elemento con índice 1 se crea automáticamente cuando se instancia el nodo
X
C El elemento con índice 1 se elimina automáticamente cuando se instancia el nodo
3. ¿Cuáles de las siguientes afirmaciones acerca de la asignación interna son verdaderas? Seleccione la respuesta correcta. X
A Solo el nodo asignado está dentro de los límites de un componente
X
B Solo el nodo de origen de asignación está dentro de los límites de un componente
X
C Tanto el nodo asignado como el nodo de origen de asignación están dentro de los límites de un componente
X
D Tanto el nodo asignado como el nodo de origen de asignación están fuera de los límites de un componente
© Copyright . Reservados todos los derechos.
309
Capítulo 10 Respuestas a la Evaluación de la formación
1. Un contexto tiene siempre un nodo superior conocido como nodo raíz de contexto. ¿Qué tipo de propiedades tiene este nodo raíz de contexto? Seleccione la respuesta correcta. X
A Propiedades fijas y no se puede eliminar
X
B Sin propiedades fijas y no se puede eliminar
X
C Propiedades fijas y se puede eliminar
X
D Algunos propiedades fijas y se puede eliminar
2. ¿Qué ocurre cuando la cardinalidad de un nodo es igual a 1..1 ó 1..n? Seleccione la respuesta correcta. X
A El elemento con un índice aleatorio se crea automáticamente cuando se instancia el nodo
X
B El elemento con índice 1 se crea automáticamente cuando se instancia el nodo
X
C El elemento con índice 1 se elimina automáticamente cuando se instancia el nodo
3. ¿Cuáles de las siguientes afirmaciones acerca de la asignación interna son verdaderas? Seleccione la respuesta correcta.
310
X
A Solo el nodo asignado está dentro de los límites de un componente
X
B Solo el nodo de origen de asignación está dentro de los límites de un componente
X
C Tanto el nodo asignado como el nodo de origen de asignación están dentro de los límites de un componente
X
D Tanto el nodo asignado como el nodo de origen de asignación están fuera de los límites de un componente
© Copyright . Reservados todos los derechos.
CAPÍTULO 11
Interfaz de usuario de Web Dynpro
Lección 1 Definición del layout de visualización Ejercicio 18: Usar gestores de layout para disponer elementos de UI
312 327
Lección 2 Vinculación de datos y control del comportamiento del elemento de UI
334
Lección 3 Utilización de elementos de UI compuestos Ejercicio 19: Usar el asistente de servicio y visualizar tablas
342 351
OBJETIVOS DEL CAPÍTULO ●
Diferenciar elementos de UI
●
Definir el layout mediante elementos de container
●
Añadir elementos de UI al layout
●
Vincular las propiedades de elemento de UI a atributos de contexto.
●
Controlar el comportamiento del elemento de UI
●
Explicar elementos de UI compuestos
●
Definir la vinculación de contexto para las UI de la tabla
●
Definir la propiedad de selección para las UI de la tabla
●
Utilizar la página de test para elementos de UI
© Copyright . Reservados todos los derechos.
311
Capítulo 11 Lección 1 Definición del layout de visualización
RESUMEN DE LA LECCIÓN En esta lección se explica cómo disponer los diferentes elementos de UI para formar el layout de una vista. En esta lección no se describirán únicamente elementos de UI simples, sino también elementos complejos como los elementos de UI anidados (por ejemplo, Tabla). También muestra cómo definir la vinculación de datos entre las propiedades de los elementos de UI y los atributos de contexto. Ejemplo empresarial Desea crear una aplicación Web Dynpro que tenga una interfaz de usuario optimizada (UI) y disponer los elementos de la pantalla por grupos o trays. Desea crear una aplicación Web Dynpro que tenga una interfaz de usuario optimizada (UI) utilizando diferentes elementos de container para disponer los elementos en la pantalla. También quisiera poder visualizar varios registros del usuario en una tabla y entender cómo las propiedades de algunos de sus elementos de UI se pueden manipular en tiempo de ejecución (por ejemplo, su visibilidad). Por este motivo, se requieren los siguientes conocimientos: ●
Cómo definir el layout de la vista mediante la disposición de los elementos de UI y el establecimiento de sus propiedades
●
Cómo asociar propiedades de elemento de UI a atributos de contexto
●
Cómo usar el elemento de UI de tabla como ejemplo de elementos de UI compuestos
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá:
312
●
Diferenciar elementos de UI
●
Definir el layout mediante elementos de container
●
Añadir elementos de UI al layout
© Copyright . Reservados todos los derechos.
Lección: Definición del layout de visualización
Elementos de UI
Figura 163: Elementos de UI
Un elemento de UI es cualquier entidad gráfica que ocupe una posición dentro de un layout de visualización. No obstante, esto no significa que todos los elementos de UI sean visibles en la pantalla. Determinados elementos de UI, como TransparentContainer, ViewContainerUIElement o InvisibleElement, no son visibles en la pantalla. Estos elementos ocupan una posición en la jerarquía de elementos de UI similar a cualquier otro elemento de UI visible y ayudan a estructurar la UI. Además, todos los elementos de UI pueden establecerse en invisibles en tiempo de ejecución sin por ello liberar el espacio que ocuparían como elementos de UI visibles. Por ejemplo, al ocultar el elemento de UI Label ubicado a la izquierda de un elemento de UI InputField no significa que el elemento de UI InputField se mueva a la izquierda y aparezca en la posición en la que se visualizaba anteriormente el elemento de UI Label. Web Dynpro está diseñado para operar con cualquier UI basada en formularios. Esto implica que cualquier elemento de UI es solo una descripción abstracta del código fuente que se renderiza en tiempo de ejecución, y no únicamente una representación WML o HTML de este elemento.
© Copyright . Reservados todos los derechos.
313
Capítulo 11: Interfaz de usuario de Web Dynpro
Categorías de elementos de UI
Figura 164: Categorías de elementos de UI
Existe una gran cantidad de elementos disponibles para el diseño de la UI de una aplicación Web Dynpro. Todos los elementos de UI disponibles se dividen en categorías. Cuando la presentación preliminar de layout es visible, el diseñador de vistas visualiza las siguientes categorías: ● La categoría Text Esta categoría contiene elementos que se pueden emplear para visualizar textos o introducir literales. ●
La categoría Action Esta categoría contiene elementos simples que el usuario puede seleccionar para activar la navegación o solo para circular.
●
La categoría Selection Esta categoría contiene elementos simples que visualizan varios valores. Según la clase de elemento, los usuarios pueden seleccionar uno o más valores.
●
La categoría Complex Esta categoría contiene elementos que requieren subelementos para definir un elemento de UI válido.
●
La categoría Layout Esta categoría contiene elementos de UI que se utilizan para estructurar el layout. Un subconjunto especial (elementos de container) consta de los elementos de UI Group, Panel, TransparentContainer y Tray. Estos elementos definen áreas rectangulares en las cuales se ordenan los subelementos según las reglas definidas por el container.
314
© Copyright . Reservados todos los derechos.
Lección: Definición del layout de visualización
●
La categoría Graphics Esta categoría contiene elementos para renderizar los miembros gráficos de la página.
●
La categoría Integration Esta categoría contiene elementos para incrustar todo tipo de tecnologías que no son ABAP en Web Dynpro.
La categoría __________ contiene elementos que se emplean para visualizar textos o introducir literales. X
A text
X
B action
X
C selection
X
D complex
Disposición de elementos de UI
Figura 165: Disposición de elementos de UI
Todos los layouts de visualización constan de una jerarquía de elementos de UI. El nodo raíz es de tipo TransparentContainer y se denomina RootUIElementContainer. El ID del elemento no se puede modificar porque la codificación es fija. Sin embargo, puede cambiar el tipo de elemento de UI desde el menú contextual de este elemento. Esto es importante si desea incrustar un archivo Flash o un archivo Silverlight dentro de una vista Web Dynpro. Todos los elementos de UI posteriores añadidos a un layout de visualización están subordinados jerárquicamente a RootUIElementContainer. Context_Menus es el segundo elemento que se visualiza arriba de RootUIElementContainer. Este proveedor de menú de contexto le permite crear menús contextuales en tiempo de diseño. En el tiempo de ejecución, estos menús pueden instanciarse y asignarse a los elementos de UI. El usuario hace clic con el botón secundario del ratón sobre un elemento de
© Copyright . Reservados todos los derechos.
315
Capítulo 11: Interfaz de usuario de Web Dynpro
UI en tiempo de ejecución para visualizar los elementos del menú contextual relacionado junto con el menú contextual estándar.
Elementos de container y gestores de layout Los elementos de container son elementos de UI que pueden tener elementos inferiores arbitrarios. Los siguientes son los elementos de container disponibles: ●
Group
●
Panel
●
TransparentContainer
●
Tray
●
ScrollContainer (obsoleto, reemplácelo por TransparentContainer)
Los elementos de container ocupan un área rectangular en el layout de la vista. Todos los elementos de UI que están subordinados a un elemento de container están ubicados en esta área rectangular. Todos los elementos de container definen la disposición de sus subordinados. Hacen esto mediante la propiedad Layout, que asigna un gestor de layout al elemento de UI del container. Todos los elementos subordinados de un elemento de UI heredan un conjunto de propiedades relacionado con el gestor de layout asignado al elemento de UI del container superior. La propiedad Layout puede tener los siguientes valores:
316
●
FlowLayout
●
RowLayout
●
MatrixLayout
●
FormLayout
●
GridLayout (cuando sea posible, reemplácelo por MatrixLayout)
●
FormLayoutAdvanced
© Copyright . Reservados todos los derechos.
Lección: Definición del layout de visualización
Gestores de layout: FlowLayout
Figura 166: Gestores de layout: FlowLayout
FlowLayout es el gestor de layout predeterminado. Todos los elementos subordinados de un container que utiliza FlowLayout como el gestor de layout se dispondrán secuencialmente. Por lo tanto, no se pueden especificar explícitamente saltos de línea. Sin embargo, según el tipo de elemento, se puede forzar implícitamente un salto de línea mediante el elemento. Los elementos que no fuerzan un salto de línea se muestran en una fila, siempre y cuando el container tenga la longitud suficiente. Si el container es demasiado estrecho como para que se puedan visualizar estos elementos subordinados en una fila (por ejemplo, si la ventana del browser es demasiado estrecha), estos saltan automáticamente a las siguientes filas. Este salto no puede forzarse en la fase de diseño. Sin embargo, el salto puede desactivarse fijando la propiedad wrapping en false. Los elementos que están en líneas diferentes no están relacionados entre ellos. Este tipo de container se puede utilizar para disponer subcontainers. Los siguientes elementos no fuerzan un salto de línea: ●
InputField
●
Label
●
FormattedTextView y TextView
●
Button, ButtonChoice, ToggleButton
●
LinkChoice, LinkToAction, LinkToUrl, ToggleLink
●
CheckBox, TriStateCheckBox
●
DropDownByIndex, DropDownByKey
© Copyright . Reservados todos los derechos.
317
Capítulo 11: Interfaz de usuario de Web Dynpro
●
RadioButton
●
Image
Gestores de layout: RowLayout
Figura 167: Gestores de layout: RowLayout
Si RowLayout se utiliza para el elemento de UI de container, todos los subordinados heredarán la propiedad LayoutData, que puede tener los valores RowData y RowHeadData. Si se establece esta propiedad en RowHeadData, se forzará un salto de línea. Si se establece la propiedad en RowData, no se forzará un salto de línea. Sin embargo, según el tipo de elemento, se puede forzar implícitamente un salto de línea mediante el elemento. Los elementos que no fuerzan un salto de línea y que tienen la propiedad LayoutData = RowData se muestran en la misma fila que el elemento anterior, aun si se alcanza el margen derecho del container. Los elementos de UI ubicados en filas diferentes no están relacionados entre sí ya que todos los elementos están alineados en una sola columna.
318
© Copyright . Reservados todos los derechos.
Lección: Definición del layout de visualización
Gestores de layout: MatrixLayout
Figura 168: Gestores de layout: MatrixLayout
Si MatrixLayout se utiliza con el elemento de UI de container, todos los subordinados heredarán la propiedad LayoutData, que puede tener los valores MatrixData y MatrixHeadData. Si se establece esta propiedad en MatrixHeadData, se forzará un salto de línea. Si se establece la propiedad en MatrixData, los elementos subordinados se muestran en la misma fila que el elemento anterior, incluso si ya se ha alcanzado el margen de la derecha. Los elementos subordinados de este container se disponen en columnas. Con este gestor de layout, el número de columnas no se define estáticamente, sino por el número máximo de elementos subordinados en cualquier fila. La cantidad de elementos en diferentes filas puede variar. Puede utilizar las propiedades StretchedHorizontally y StretchedVertically para especificar si los elementos de UI se distribuirán en el área del container. Si ambas propiedades se establecen en blanco, los elementos se ubican en la esquina superior izquierda del container. Los elementos de UI dispuestos en un MatrixLayout pueden ocupar varias celdas (propiedad colSpan).
© Copyright . Reservados todos los derechos.
319
Capítulo 11: Interfaz de usuario de Web Dynpro
Gestores de layout: GridLayout
Figura 169: Gestores de layout: GridLayout
Al igual que el MatrixLayout, el GridLayout puede utilizarse si se desea un alineamiento vertical de los elementos. No obstante, en este caso el número de columnas se define estáticamente mediante la propiedad colCount del elemento de container. No puede definir explícitamente saltos de línea. Se producirá un salto de línea cuando se ocupen todas las celdas de una fila. Si se elimina un elemento de la jerarquía se modificará toda la disposición, ya que todos los elementos posteriores de la jerarquía se moverán hacia la izquierda tantas celdas como ocupaba el elemento eliminado. Utilice este gestor de layout solo si todas las filas tienen el mismo número de columnas y si se insertan o eliminan filas completas. Cuando se utilice este gestor de layout, asegúrese de no eliminar completamente los elementos de UI, sino que se deberán sustituir por un InvisibleElement con el fin de mantener la disposición de elementos original.
320
© Copyright . Reservados todos los derechos.
Lección: Definición del layout de visualización
Gestores de layout: FormLayout (1)
Figura 170: Gestores de layout: FormLayout (1)
Si FormLayout se utiliza con el elemento de UI de container, todos los subordinados heredarán la propiedad LayoutData, que puede tener los valores FormTopData, FormHeadData y FormData.
Nota: FormLayout solo está disponible en SAP NetWeaver 7.0 Enhancement Package 2 y versiones posteriores. La parametrización FormTopData divide la página horizontalmente en secciones, y cada sección contiene una cantidad definida estáticamente de columnas. El ancho de estas columnas es único en todas las secciones. Por lo tanto, la proporción de los anchos de la sección se basa en la proporción de los recuentos de columnas relacionados con las secciones. Por ejemplo, en la figura (Gestores de layout: FormLayout [1]), FormLayout es asignado al grupo con la cabecera Layout de formulario y a cada uno de los grupos incrustados. Los grupos con las cabeceras Grupo 1 y Grupo 2 definen una nueva sección con respecto al grupo incrustado. Para el Grupo 1, colCount se establece en 4 y para el Grupo 2, colCount se establece en 8. Cada uno de los grupos incrustados también usa FormLayout como su gestor de layout. El recuento de columnas para cada uno de los grupos incrustados se define mediante la primera etiqueta en el grupo.
© Copyright . Reservados todos los derechos.
321
Capítulo 11: Interfaz de usuario de Web Dynpro
Gestores de layout: FormLayout (2)
Figura 171: Gestores de layout: FormLayout (2)
En cada sección, los saltos de línea se pueden forzar estableciendo LayoutData = FormHeadData. Si establece la propiedad en FormData, los elementos subordinados se muestran en la misma fila que el elemento anterior. Los elementos de UI dispuestos en un FormLayout pueden ocupar varias celdas (propiedad colSpan). Si se deja colSpan en su valor por defecto (-1), los elementos se extienden en las columnas automáticamente. Por ejemplo, en la figura (Gestores de layout: FormLayout [2]), LayoutData = FormHeadData es asignado al grupo con la cabecera Grupo 3, mientras que LayoutData = FormData es asignado al grupo con la cabecera Grupo 4. Para el grupo con la cabecera Grupo 3, colCount se establece en 6, mientras que para el grupo con la cabecera Grupo 4 esta propiedad se establece en -1. En cada uno de estos grupos, el primer elemento en la primera línea tiene la propiedad LayoutData = FormTopData, mientras que todos los otros elementos que comienzan una nueva fila tienen la propiedad LayoutData = FormHeadData. Todos los campos de formulario que no comienzan una nueva fila tienen LayoutData = FormData.
Consejo: Para obtener detalles sobre la propagación automática de elementos de UI en la tabla, consulte la documentación online. En SAP NetWeaver 7.0 Enhancement Package 2, la propiedad LayoutData nunca se visualiza para el primer subelemento de un container. Esto se debe a que el valor de esta propiedad para el primer subelemento solo tiene un valor válido. El único valor del primer elemento de la propiedad LayoutData se determina de la siguiente manera:
322
© Copyright . Reservados todos los derechos.
Lección: Definición del layout de visualización
●
●
●
Si se asigna RowLayout a la propiedad Layout del container, el primer subelemento automáticamente se convierte en LayoutData = RowHeadData. Si se asigna MatrixLayout a la propiedad Layout del container, el primer subelemento automáticamente se convierte en LayoutData = MatrixHeadData. Si se asigna FormLayout a la propiedad Layout del container, el primer subelemento automáticamente se convierte en LayoutData = FormTopData.
FormLayoutAdvanced
Figura 172: FormLayoutAdvanced
FormLayoutAdvanced admite la alineación de elementos de UI en los límites del container. También es posible disponer los elementos de UI en forma de cascada en diferentes filas. Los datos de layout de un elemento de UI, que pertenece a un container que tiene asignado FormLayoutAdvanced, son proporcionados por FormDataAdvanced. La altura de FormLayoutAdvanced en la forma de rowspan se debe especificar en cada elemento de UI. FormLayoutAdvanced solo está disponible en SAP NetWeaver 7.0 Enhancement Package 3 / SAP NetWeaver 7.3 Enhancement Package 1.
Nota: La altura de la celda de layout no se ajusta automáticamente a la altura de su elemento de UI. Si es muy grande, se trunca. Otros layouts sí se ajustan a la altura. Para más información, consulte MatrixLayout y GridLayout. Usted utiliza el editor de vistas en un controlador personalizado para tratar el layout de vista. X
Verdadero
X
Falso
© Copyright . Reservados todos los derechos.
323
Capítulo 11: Interfaz de usuario de Web Dynpro
Adición de elementos de UI al layout
Figura 173: Utilización del editor de vistas
El editor de vistas es una herramienta específica de Web Dynpro que le permite tratar un layout de visualización. El Editor de vistas solo está disponible cuando trata un controlador de vistas. No aparece cuando se trata un controlador personalizado porque estos controladores no tienen interfaz visual. El editor de vistas se puede utilizar con o sin la presentación preliminar de layout. Nota: En la siguiente descripción se asume que está familiarizado con la presentación preliminar de layout básico.
324
© Copyright . Reservados todos los derechos.
Lección: Definición del layout de visualización
Editor de vistas
Figura 174: Editor de vistas
Para añadir cualquier elemento de UI a la jerarquía de elementos de UI, puede arrastrarlo desde la barra de herramientas situada en la parte izquierda del editor de vistas hasta la presentación preliminar de layout. también se puede añadir un nuevo elemento de UI en la representación jerárquica desde el menú contextual de cualquier elemento de la jerarquía que tenga elementos subordinados (por ejemplo, un elemento TransparentContainer o un elemento Group). Para modificar la posición de un elemento de UI a la jerarquía de elementos, puede moverlo hacia arriba o hacia abajo usando la función relacionada desde el menú contextual del elemento o arrastrarlo a una nueva posición en la representación jerárquica o en la presentación preliminar de layout.
Nota: Si arrastra y suelta un elemento en otro elemento que pueda funcionar como su elemento superior, el elemento soltado se convierte en subelemento. Utilice los siguientes métodos para copiar un elemento con todos sus subelementos: ● Para copiar un elemento dentro de la misma vista, seleccione Copiar elemento desde el menú contextual del elemento que quiere copiar. Luego, focalícese en el elemento que debería ser el superior del elemento copiado. Finalmente, seleccione Insertar elemento copiado desde el elemento de contexto del elemento padre. ●
Para crear un modelo de la copia persistente, seleccione Guardar como modelo desde el menú contextual de este elemento. Para usar el modelo, utilice el asistente de codificación Web Dynpro. Para cada modelo de copia, se muestra una entrada de lista debajo de las entradas estándares del asistente.
© Copyright . Reservados todos los derechos.
325
Capítulo 11: Interfaz de usuario de Web Dynpro
La etiqueta Propiedades visualiza todas las propiedades del elemento de UI seleccionado. Los eventos del cliente admitidos por un elemento de UI se enumerarán en la sección de la propiedad Events. Las propiedades relacionadas con los eventos del cliente empiezan con el prefijo on (por ejemplo, onFilter, onSort u onAction). Para gestionar estos eventos del cliente, se asocian acciones a cada uno de los eventos.
Consejo: Los eventos del cliente son eventos relacionados con elementos de UI que el marco Web Dynpro predefine. No se puede gestionar eventos adicionales del cliente (por ejemplo, mediante JavaScript).
326
© Copyright . Reservados todos los derechos.
Capítulo 11 Ejercicio 18 Usar gestores de layout para disponer elementos de UI
Ejemplo empresarial Desarrolle una aplicación Web Dynpro con una imagen en la primera vista. Además, disponga los elementos de UI de forma prudente. Modelo: NET310_COND_S Solución: NET310_UI_S1 Tarea 1 Copie la solución del ejercicio anterior o del componente modelo. 1. Copie la solución del ejercicio anterior (ZNET310_COND_##) o del componente Web Dynpro NET310_COND_S en el nuevo componente, ZNET310_UI1_##. Cuando se le solicite, asigne el nuevo componente Web Dynpro a su paquete y orden de transporte. Tarea 2 Añada un elemento de UI Image al layout de la vista INPUT_VIEW. El elemento de UI Image deberá visualizar el archivo reisen_1.jpg ubicado en la carpeta de MIME Repository SAP → BC → WebDynpro → SAP → PUBLIC → NET310. 1. En la pantalla Explorador Web Dynpro: Visualizar componente, seleccione ZNET310_UI1_## → Vistas → INPUT_VIEW. En el layout de la vista INPUT_VIEW, cree un elemento de UI de tipo IMAGE (ID: IMG_PLANE). Actualice el origen del elemento de UI Image. La fuente deberá ser el archivo reisen_1.jpg ubicado en la carpeta de MIME Repository SAP → BC → WebDynpro → SAP → PUBLIC → NET310. Tarea 3 Disponga los elementos de UI de la vista INPUT_VIEW. El container transparente que contiene los campos de entrada y la imagen deberá visualizarse en una fila. Estos dos elementos juntos deberán ocupar todo el ancho de página. El container transparente y la imagen deberán ocupar la misma altura. Modifique el color de fondo para visualizar el espacio ocupado por el container transparente. 1. Corrija el orden de los elementos de UI en la jerarquía de elementos de UI. Ubique el botón en el container transparente que incrusta el formulario. Al final de este ejercicio, el container transparente deberá estar ubicado a la izquierda de la imagen. 2. Ajuste el gestor de layout asignado al ROOTUIELEMENTCONTAINER. En vez del valor por defecto (FlowLayout) utilice MatrixLayout. Además, el botón debe visualizarse en una nueva fila debajo de los campos de formulario.
© Copyright . Reservados todos los derechos.
327
Capítulo 11: Interfaz de usuario de Web Dynpro
3. Modifique el color de fondo del formulario. El área que ocupa el contenedor transparente circundante debe mostrarse en gris. 4. La imagen está rodeada de un marco transparente. Por lo tanto, la altura de la imagen sin el marco no es igual a la altura del container. Elimine este marco. Nota: Este paso es opcional.
Tarea 4 Disponga los elementos de UI de la vista OUTPUT_VIEW en filas. El container transparente que contenga los campos de formulario deberá ocupar el ancho completo de página. Visualice el área ocupada por este container en gris. 1. Corrija el orden de los elementos de UI en la jerarquía de elementos de UI. Al final de esta tarea, el botón debe visualizarse debajo del container transparente que incrusta el formulario. Utilice la opción de menú Arriba o Abajo en el menú contextual del botón para convertirlo en el último elemento en la jerarquía de elementos de UI. 2. Disponga los elementos de UI de la vista usando el gestor RowLayout (no se necesitan columnas, pero se puede disponer el contenido en filas). 3. Modifique el color de fondo del formulario. El área que ocupa el contenedor transparente circundante debe mostrarse en gris. Tarea 5 Active su componente Web Dynpro y realice un test. 1. Active su componente. Cree una aplicación Web Dynpro con el mismo nombre que su componente. Inicie la aplicación Web Dynpro.
328
© Copyright . Reservados todos los derechos.
Capítulo 11 Solución 18 Usar gestores de layout para disponer elementos de UI
Ejemplo empresarial Desarrolle una aplicación Web Dynpro con una imagen en la primera vista. Además, disponga los elementos de UI de forma prudente. Modelo: NET310_COND_S Solución: NET310_UI_S1 Tarea 1 Copie la solución del ejercicio anterior o del componente modelo. 1. Copie la solución del ejercicio anterior (ZNET310_COND_##) o del componente Web Dynpro NET310_COND_S en el nuevo componente, ZNET310_UI1_##. a) En la pantalla Object Navigator, seleccione el pulsador Otro objeto y, a continuación, seleccione la etiqueta Objetos Web. b) Introduzca el nombre del componente Web Dynpro ZNET310_COND_## en el campo Web Dynpro Comp./Intf. y seleccione el pulsador Copiar. c) En la ventana de diálogo Copiar componente Web Dynpro, introduzca el nuevo componente ZNET310_UI1_## en el campo Nombre de la copia. d) Seleccione Continuar. Cuando se le solicite, asigne el nuevo componente Web Dynpro a su paquete y orden de transporte. Tarea 2 Añada un elemento de UI Image al layout de la vista INPUT_VIEW. El elemento de UI Image deberá visualizar el archivo reisen_1.jpg ubicado en la carpeta de MIME Repository SAP → BC → WebDynpro → SAP → PUBLIC → NET310. 1. En la pantalla Explorador Web Dynpro: Visualizar componente, seleccione ZNET310_UI1_## → Vistas → INPUT_VIEW. En el layout de la vista INPUT_VIEW, cree un elemento de UI de tipo IMAGE (ID: IMG_PLANE). Actualice el origen del elemento de UI Image. La fuente deberá ser el archivo reisen_1.jpg ubicado en la carpeta de MIME Repository SAP → BC → WebDynpro → SAP → PUBLIC → NET310. a) En el menú contextual del ROOTUIELEMENTCONTAINER, seleccione Insertar elemento. b) Seleccione el tipo de elemento IMAGE e introduzca la ID en el campo adecuado.
© Copyright . Reservados todos los derechos.
329
Capítulo 11: Interfaz de usuario de Web Dynpro
c) Seleccione el pulsador MIME Repository situado en la parte superior del área de navegación de Workbench ABAP. d) Abra la carpeta específica (seleccione SAP → BC → WebDynpro → SAP → PUBLIC → NET310). Arrastre el objeto MIME reisen_1.jpg al elemento de UI Image de la jerarquía de elementos de UI. e) Grabe el parámetro (Strg + S o icono correspondiente). Consejo: La imagen también puede asignarse al elemento de UI estableciendo la propiedad del elemento origen en {PUBLIC}/net310/reisen_1.jpg.
Tarea 3 Disponga los elementos de UI de la vista INPUT_VIEW. El container transparente que contiene los campos de entrada y la imagen deberá visualizarse en una fila. Estos dos elementos juntos deberán ocupar todo el ancho de página. El container transparente y la imagen deberán ocupar la misma altura. Modifique el color de fondo para visualizar el espacio ocupado por el container transparente. 1. Corrija el orden de los elementos de UI en la jerarquía de elementos de UI. Ubique el botón en el container transparente que incrusta el formulario. Al final de este ejercicio, el container transparente deberá estar ubicado a la izquierda de la imagen. a) Arrastre el botón al container transparente que incrusta el formulario. El botón será el último elemento en el container transparente. 2. Ajuste el gestor de layout asignado al ROOTUIELEMENTCONTAINER. En vez del valor por defecto (FlowLayout) utilice MatrixLayout. Además, el botón debe visualizarse en una nueva fila debajo de los campos de formulario. a) En la propiedad Layout seleccione MatrixLayout. b) Haga doble clic en BUT_DETAILS. Nota: No es necesario corregir las parametrizaciones de layout del container transparente que contiene el formulario y la imagen. En SAP NW 7.0 EhP2, el primer subelemento de un container al que se le asigna el gestor de layout MatrixLayout obtiene automáticamente el layout MatrixHeadData. Todos los otros subelementos obtendrán automáticamente el layout MatrixData. Esto significa que el container transparente y la imagen forman una fila. c) Para el botón, establezca la propiedad Layout en FormHeadData. Además, establezca colSpan en 2. Consejo: Si no se modifica el valor por defecto (-1) para la propiedad colSpan, el botón se extiende por toda la fila completa.
330
© Copyright . Reservados todos los derechos.
Lección: Definición del layout de visualización
3. Modifique el color de fondo del formulario. El área que ocupa el contenedor transparente circundante debe mostrarse en gris. a) Trate las propiedades del container transparente que incrusta los campos de formulario. En el campo cellBackgroundDesign, seleccione border. 4. La imagen está rodeada de un marco transparente. Por lo tanto, la altura de la imagen sin el marco no es igual a la altura del container. Elimine este marco. Nota: Este paso es opcional. a) En el campo cellDesign, seleccione padless. Grabe el parámetro. Tarea 4 Disponga los elementos de UI de la vista OUTPUT_VIEW en filas. El container transparente que contenga los campos de formulario deberá ocupar el ancho completo de página. Visualice el área ocupada por este container en gris. 1. Corrija el orden de los elementos de UI en la jerarquía de elementos de UI. Al final de esta tarea, el botón debe visualizarse debajo del container transparente que incrusta el formulario. Utilice la opción de menú Arriba o Abajo en el menú contextual del botón para convertirlo en el último elemento en la jerarquía de elementos de UI. a) Haga doble clic en OUTPUT_VIEW. b) Seleccione FORM_CONTAINER. c) En el menú contextual del BUT_BACK, seleccione EN LA ÚLTIMA POSICIÓN. 2. Disponga los elementos de UI de la vista usando el gestor RowLayout (no se necesitan columnas, pero se puede disponer el contenido en filas). a) Para el ROOTUIELEMENTCONTAINER, establezca la propiedad Layout en RowLayout. Consejo: No corrija las parametrizaciones de layout del container transparente que incrusta el formulario. En SAP NW 7.0 EhP2, el primer subelemento de un container al que se le asigna el gestor de layout RowLayout obtiene automáticamente el layout RowHeadData. Todos los otros subelementos obtendrán automáticamente el layout RowData. b) Edite las propiedades del botón. Establezca Layout Data = RowHeadData. 3. Modifique el color de fondo del formulario. El área que ocupa el contenedor transparente circundante debe mostrarse en gris. a) Edite las propiedades del container transparente. Establezca cellBackgroundDesign = border. Grabe. Tarea 5 Active su componente Web Dynpro y realice un test.
© Copyright . Reservados todos los derechos.
331
Capítulo 11: Interfaz de usuario de Web Dynpro
1. Active su componente. Cree una aplicación Web Dynpro con el mismo nombre que su componente. Inicie la aplicación Web Dynpro. a) Realice este paso como en los ejercicios anteriores.
332
© Copyright . Reservados todos los derechos.
Lección: Definición del layout de visualización
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Diferenciar elementos de UI
●
Definir el layout mediante elementos de container
●
Añadir elementos de UI al layout
© Copyright . Reservados todos los derechos.
333
Capítulo 11 Lección 2 Vinculación de datos y control del comportamiento del elemento de UI
RESUMEN DE LA LECCIÓN Esta lección explica cómo controlar el comportamiento del elemento de UI usando la vinculación de datos. Ejemplo empresarial Quiere controlar dinámicamente el comportamiento del elemento de UI (por ejemplo, modificar la visibilidad). Para esto necesita manipular las entidades en el contexto en el que están vinculadas las propiedades de los elementos de UI. Por este motivo, se requieren los siguientes conocimientos: ●
Cómo vincular propiedades de elementos de UI a los atributos de contexto
●
Cómo controlar mediante programación las propiedades del elemento de UI
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Vincular las propiedades de elemento de UI a atributos de contexto.
●
Controlar el comportamiento del elemento de UI
Vinculación de datos
Figura 175: Vinculación de datos
Para controlar el comportamiento de los elementos de UI, debe manipular los atributos o nodos de contexto a los que están vinculadas las propiedades de los elementos de UI. Una vez que la propiedad del elemento de UI se asocia a un atributo o nodo de contexto, los datos de contexto suministran un valor a la propiedad del elemento de UI. Si el usuario puede actualizar la propiedad del elemento de UI (como la propiedad value de un elemento de UI
334
© Copyright . Reservados todos los derechos.
Lección: Vinculación de datos y control del comportamiento del elemento de UI
InputField), el contexto se actualizará automáticamente con el nuevo valor durante la siguiente circulación. Casi todas las propiedades de un elemento de UI se pueden asociar bien a un nodo de contexto o bien a un atributo de contexto con el tipo de datos correcto.
Nota: Una relación de asociación solo puede existir entre el contexto y los elementos de UI del mismo controlador de vistas. El desarrollador tiene el control total de la apariencia del layout de la pantalla del controlador de vistas Web Dynpro sin tener que acceder directamente a los objetos de elemento de UI. Para tener control programático de cualquier propiedad, debería estar asociado al atributo o nodo de contexto correspondiente. Relación de vinculación de contexto La ruta de contexto al nodo o atributo se visualizará como valor de la propiedad. Además, el círculo vacío se sustituirá por un icono de marca de comprobación verde. El elemento de UI de la presentación preliminar de layout también visualizará la ruta de contexto del nodo o atributo al que está asociado. El establecimiento de una relación de vinculación ordena al renderizador de pantalla Web Dynpro que obtenga el valor de una propiedad de elemento de UI a partir del atributo o nodo de contexto al que está asociado. La vinculación de datos no está limitada a proporcionar un valor a un InputField. La propiedad de valor de un elemento de UI se puede proporcionar con datos mediante una relación de vinculación. Éste es el mecanismo mediante el cual un controlador de vistas puede ajustar la apariencia y el comportamiento de su layout de visualización sin tener que acceder nunca a los propios objetos de elemento de UI.
© Copyright . Reservados todos los derechos.
335
Capítulo 11: Interfaz de usuario de Web Dynpro
Relación de vinculación de datos
Figura 176: Posicionamiento de datos en el layout de la pantalla de vista
La vinculación de datos es una relación de doble sentido. Una vez que se ha declarado una relación de asociación, los datos de los nodos y atributos asociados se transportan automáticamente a los elementos de UI correspondientes. Después de que el usuario haya interactuado con la pantalla e inicializado un trayecto circular HTTP, los datos nuevos o modificados de los elementos de UI se transportan de vuelta a los mismos nodos y atributos del contexto del controlador de vistas. Para cuando el marco Web Dynpro transfiere el control a su controlador de acciones, el contexto ya tiene la información actualizada. Este proceso de transporte de doble sentido es totalmente automático y no requiere ninguna acción por parte del desarrollador de la aplicación.
Nota: Los datos ingresados por el usuario se convierten automáticamente en formato interno. Luego el tiempo de ejecución de Web Dynpro verifica si la clase de datos coincide con la clase del atributo asociado (incluidos los valores fijos del dominio). Si se produce un error de verificación, los datos no se transportan al atributo de contexto. Sin embargo, el tiempo de ejecución de Web Dynpro almacena la entrada del usuario para poder visualizarla nuevamente (con el mensaje de error de verificación visualizada en el próximo conjunto de vistas). Una vez que la propiedad del elemento de UI se asocia a un atributo o nodo de contexto, ___________ se utilizan para suministrar un valor a la propiedad del elemento de UI. X
336
A datos de contexto
© Copyright . Reservados todos los derechos.
Lección: Vinculación de datos y control del comportamiento del elemento de UI
X
B elemento de UI correspondiente
X
C controlador de vistas Web Dynpro
X
D métodos de conexión de controlador
Para definir vinculación de datos Los siguientes pasos son los requisitos mínimos para visualizar los datos en la pantalla del controlador: 1. Crear un nodo o atributo en el contexto del controlador de vistas que contenga los datos. 2. Crear el elemento de UI en el layout de visualización. 3. Para todas las propiedades que requieren asociación de datos, se visualizará un pulsador con un icono amarillo y un círculo vacío a la derecha de la propiedad. Defina la vinculación requerida seleccionando este pulsador. Se visualizará el contexto del controlador de vistas en un cuadro de diálogo. Todos los nodos o atributos que tengan el tipo correcto para la asociación de la propiedad de elemento de UI se visualizarán en él. 4. Seleccione un nodo o atributo apropiado.
Definir las propiedades de elemento de UI de manera estática
Figura 177: Definición de las propiedades de elemento de UI de manera estática
El valor de una propiedad de elemento de UI puede ser de codificación fija o estar vinculado a un atributo de contexto con un tipo de datos adecuado. Si un valor de propiedad es de codificación fija en la fase de diseño, solo podrá modificarse en tiempo de ejecución mediante el acceso directo al elemento de UI desde el código fuente del controlador de vistas. Esto solo
© Copyright . Reservados todos los derechos.
337
Capítulo 11: Interfaz de usuario de Web Dynpro
se puede llevar a cabo mediante el método de conexión wddomodifyview( ), ya que es el único método que proporciona una referencia a la jerarquía de elementos de UI.
Atención: El acceso directo a la jerarquía de elementos de UI desde el método de un controlador está considerado un diseño pobre, porque la separación entre la lógica de proceso y la UI no está retenida. Evite esta técnica.
Controlar dinámicamente las propiedades del elemento de UI
Figura 178: Control de las propiedades del elemento de UI
Para controlar mediante programación el comportamiento de un elemento de UI, cree un atributo de contexto con un tipo de datos que coincida con la propiedad que desea controlar. Esto le permite controlar el comportamiento del elemento de UI mediante la modificación del valor del atributo relacionado en cualquier método de cualquier controlador que tenga acceso a este atributo de contexto. No será necesario que acceda directamente al objeto de elemento de UI desde el código fuente del controlador. Para controlar mediante programación el comportamiento de un elemento de UI, cree un atributo de contexto con un _____________ que coincida con la propiedad que desea controlar.
338
X
A tipo de datos
X
B de objeto
X
C vinculación de datos
© Copyright . Reservados todos los derechos.
Lección: Vinculación de datos y control del comportamiento del elemento de UI
Vinculación de las propiedades del elemento de UI
Figura 179: Vinculación de las propiedades del elemento de UI
Una vez creado el atributo de contexto, éste debe asociarse a la propiedad de elemento de UI apropiada. La figura muestra que la propiedad readOnly de un elemento InputField se ha asociado a un atributo de contexto booleano. El valor del atributo de contexto puede ahora manipularse mediante cualquier método de conexión de controlador o mediante sus métodos definidos de manera adicional. Esta técnica se puede aplicar a la mayoría de las propiedades de elemento de UI. Podrá encontrar los tipos de datos apropiados utilizando la etiqueta Tipos del tiempo de ejecución Web Dynpro en el cuadro de diálogo que se visualiza al escribir un atributo de contexto. Las propiedades que suelen vincularse con atributos de contexto son la propiedad primaria del elemento de UI (por ejemplo la propiedad value para InputField), y las propiedades enabled, readOnly, state y visible.
© Copyright . Reservados todos los derechos.
339
Capítulo 11: Interfaz de usuario de Web Dynpro
Vinculación de las propiedades de elementos de UI (1)
Figura 180: Vinculación de datos para SAP NW 7.0 (ABAP SPS ≥ 12)
En SAP NetWeaver 7.0 SAP_ABAP support package stack 12, cada atributo de contexto puede vincularse no solo con la propiedad primaria del elemento de UI, sino que también con las propiedades enabled, visible, readOnly y state. Para permitir este tipo de vinculación de datos, la ventana de diálogo que se visualiza en el proceso de vinculación de datos contiene un grupo adicional de botones de selección que posee dos de estos botones. Si selecciona el botón de selección superior, se establece una vinculación de datos directa. Si selecciona el botón de selección inferior, las propiedades enabled, visible, readOnly y state pueden vincularse con las correspondientes propiedades de atributo de contexto. Textos del Dictionary ABAP Muchos elementos de UI (TextView, Label, Caption, etc.) visualizan textos en la UI renderizada. Se pueden obtener textos a partir del Dictionary ABAP de las siguientes maneras: ● La propiedad relacionada con el texto se vincula explícitamente con el elemento de datos, un campo de estructura o un campo de una tabla transparente. ●
El elemento de UI se relaciona con un segundo elemento de UI y la propiedad primaria de este segundo elemento se asocia a un elemento de contexto tipificado con un elemento de datos. En este caso, la propiedad relativa al texto debe dejarse en blanco para poder utilizar el texto del diccionario.
Por ejemplo, se relaciona una Label con un InputField y se deja la propiedad Text de la Label en blanco. El texto de la etiqueta se origina a partir del elemento de datos relacionado con la propiedad value del InputField.
340
© Copyright . Reservados todos los derechos.
Lección: Vinculación de datos y control del comportamiento del elemento de UI
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Vincular las propiedades de elemento de UI a atributos de contexto.
●
Controlar el comportamiento del elemento de UI
© Copyright . Reservados todos los derechos.
341
Capítulo 11 Lección 3 Utilización de elementos de UI compuestos
RESUMEN DE LA LECCIÓN Esta lección explica los elementos de UI compuestos y en particular el UI Table. Además muestra cómo realizar la vinculación de contexto necesaria y describe la propiedad de selección para Tablas. Ejemplo empresarial Usted quiere visualizar varios registros para el usuario en la pantalla desde una tabla. Por este motivo, se requieren los siguientes conocimientos: ●
●
●
Cómo definir elementos de UI compuestos Cómo realizar la vinculación de contexto necesaria y utilizar la propiedad de selección para la interfaz de usuario (UI) Table. Cómo utilizar la página de test para elementos de UI
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá:
342
●
Explicar elementos de UI compuestos
●
Definir la vinculación de contexto para las UI de la tabla
●
Definir la propiedad de selección para las UI de la tabla
●
Utilizar la página de test para elementos de UI
© Copyright . Reservados todos los derechos.
Lección: Utilización de elementos de UI compuestos
Elementos de UI compuestos (1)
Figura 181: Elementos de UI compuestos (1)
Algunos elementos de UI, como la UI Table se visualizan en la pantalla como agregaciones de elementos de UI más sencillos y básicos. Elementos de UI compuestos (2)
Figura 182: Elementos de UI compuestos (2)
Sin los elementos de UI subordinados (o inferiores), un elemento de UI compuesto no es capaz de visualizar ninguna información. Los elementos de UI compuestos, como Group y Tray, tienen un elemento de UI subordinado Caption obligatorio, pero por lo demás, su
© Copyright . Reservados todos los derechos.
343
Capítulo 11: Interfaz de usuario de Web Dynpro
estructura está totalmente definida por el usuario. Sin embargo, los elementos de UI compuestos, como Table y Tree, requieren una estructura subordinada obligatoria más compleja. El elemento de UI Table
Figura 183: El elemento de UI Table
El elemento de UI Table actúa como el superior de varios elementos de UI TableColumn, cada uno de los cuales actúa como el superior de una cabecera (implementada por un elemento de UI Caption) y un editor de celdas. El término editor de celdas es una expresión abstracta de todas las clases de elemento de UI que se pueden utilizar como elementos de celda en una columna determinada. El elemento de UI predeterminado para el editor de celdas es el elemento de UI TextView. No obstante, en función del valor de la celda y de si es modificable o no, se pueden utilizar otros elementos de UI como editores de celdas (por ejemplo, InputField, DropDownByKey, Checkbox o Button). El elemento de UI Table es un ejemplo de elemento de UI compuesto. El elemento de UI TableColumn también es un elemento de UI compuesto.
344
© Copyright . Reservados todos los derechos.
Lección: Utilización de elementos de UI compuestos
Vinculación de contexto para las UI de la tabla
Figura 184: Vinculación de un elemento de UI Table al contexto
El elemento de UI Table permite visualizar en dos dimensiones los datos de las celdas dispuestos en filas y columnas. El elemento de UI consta de un área de cabecera opcional, cero o más filas y un área de pie de página. Los elementos de UI Table debe asociarse a un nodo de contexto de cardinalidad 0..n o 1..n. El elemento de la selección de leads del nodo de contexto se visualiza como una fila resaltada en la pantalla (solo si se visualiza una columna de selección). El elemento de UI Table, junto con sus elementos subordinados, se puede crear con el asistente de codificación Web Dynpro. Si lo construyó de esta forma, la vinculación de datos necesaria se hará automáticamente como parte del proceso. No obstante, si el elemento de UI Table se ha añadido a la jerarquía de elementos manualmente, se utiliza la opción del menú contextual Crear asociación para crear la asociación completa.
© Copyright . Reservados todos los derechos.
345
Capítulo 11: Interfaz de usuario de Web Dynpro
Elementos de UI TableColumn
Figura 185: Elementos de UI TableColumn
El elemento de UI Table debe incluir al menos un elemento de UI TableColumn. Los elementos de UI TableColumn son elementos de UI compuestos. Esto significa que deben tener elementos de UI subordinados para poder funcionar correctamente. La cabecera de columna se crea mediante un elemento Caption. El texto visualizado en la cabecera de columna se puede obtener a partir del Dictionary ABAP si la propiedad text del elemento de UI Caption se ha dejado en blanco y si la propiedad primaria el atributo del contexto visualizado en esta columna está tipificado con un elemento de datos de Dictionary ABAP.
346
© Copyright . Reservados todos los derechos.
Lección: Utilización de elementos de UI compuestos
Elementos de UI subordinados de un TableColumn
Figura 186: Definición de elementos de UI subordinados para un TableColumn
Para presentar la información al usuario, un elemento de UI TableColumn debe tener un elemento de UI subordinado que actúe como editor de celdas. Para decidir qué elemento de UI utilizar, debe aclararse el tipo de interacción entre el usuario y los datos de cada columna. A pesar de llamarlo Editor de celdas, el usuario no necesariamente puede modificar los datos. Si se selecciona un elemento de UI solo de visualización como TextView, el elemento de UI no le permite al usuario modificar los datos. Si selecciona un Button, el valor de celda se visualizará en el texto del pulsador. En este caso no puede introducir datos, pero puede disparar un evento de cliente. Si selecciona un InputField en el editor de celdas de tabla, todas las celdas que aparecen en esa columna se abrirán para la entrada de manera predeterminada. El título que aparece como cabecera de columna es opcional, pero si se define siempre es del tipo Caption.
© Copyright . Reservados todos los derechos.
347
Capítulo 11: Interfaz de usuario de Web Dynpro
Selección de filas de tabla
Figura 187: Selección de fila de tabla
Cada vez que seleccione el botón de selección de una entrada en tabla de la pantalla renderizada, se iniciará un trayecto circular (comportamiento predeterminado). Este trayecto circular ocasiona la modificación de la selección de liderazgo del nodo de contexto al que está asociada esta tabla. En la figura, la serie de nodos contiene dos elementos y el usuario selecciona la segunda entrada en tabla. Esto corresponde al elemento 2 del nodo FLIGHTS, y la selección de liderazgo de este nodo se altera para reflejar la selección del usuario. La cantidad de filas de la tabla iguala la cantidad de elementos en la serie de nodos. También puede definir una acción Web Dynpro y asociarla al evento onLeadSelect de la tabla. Esto asegura que cuando el usuario modifica el índice de selección de leads mediante la selección de una fila de tabla, se procesan el método de conexión wddobeforeaction( ), el método controlador de acciones correspondiente y el método de conexión wddoafteraction( ) de la vista que contiene el elemento de UI de tabla.
348
© Copyright . Reservados todos los derechos.
Lección: Utilización de elementos de UI compuestos
Selecciones múltiples de filas desde una tabla
Figura 188: Selección de varias filas desde una tabla
Para permitir a un usuario seleccionar múltiples filas en una tabla (apretando SHIFT o CTRL y seleccionando las filas necesarias), el nodo de contexto al cual está vinculado el elemento de UI table DEBE tener una cardinalidad de selección de 0...n o 1...n. Antes de esto, el nodo de contexto al que está vinculado el elemento de UI Table debe tener una cardinalidad de selección de 0..n o 1..n. La parametrización de cardinalidad de selección predeterminada para cualquier nodo de contexto es 0..1, lo que significa que se puede seleccionar cero elementos o un elemento. La propiedad SelectionMode del elemento de UI Table El valor predeterminado de la propiedad Table, selectionMode (auto), se puede ajustar a none, single, multi, singleNoLead y multiNoLead. La parametrización influye en la capacidad del usuario de marcar filas y establece la selección de leads: Las parametrizaciones para la propiedad del elemento de UI Table, SelectionMode, y sus efectos son los siguientes: ● selectionMode = none No se muestra la columna de selección. La fila relacionada con la selección de leads no está resaltada. ●
selectionMode = single o singleNoLead Solo se puede seleccionar una fila. Esta es independiente de la propiedad del nodo de contexto Selection.
●
selectionMode = singleNoLead o multiNoLead El índice de selección de leads no se modifica seleccionando filas de tabla.
© Copyright . Reservados todos los derechos.
349
Capítulo 11: Interfaz de usuario de Web Dynpro
350
© Copyright . Reservados todos los derechos.
Capítulo 11 Ejercicio 19 Usar el asistente de servicio y visualizar tablas
Ejemplo empresarial Ha encontrado un módulo de funciones que planea usar para recuperar los datos que se usará en el componente Web Dynpro. Usted decide utilizar el asistente de servicio para ayudarle a crear el contexto y el código basado en el módulo de funciones. Modelo: Irrelevante Solución: NET310_UI_S2 Tarea 1 Cree un componente Web Dynpro con una vista incrustada en una ventana. 1. Cree el componente Web Dynpro ZNET310_UI2_## que contiene una vista (DISPLAY_VIEW), la cual está incrustada en una ventana (MAIN_WINDOW). Tarea 2 Cree una llamada de servicio del módulo de funciones BAPI_FLIGHT_GETLIST en el controlador de componentes. Esto crea un método que encapsulará la llamada BAPI. Además, los parámetros de interfaz de la BAPI se deben utilizar para crear los nodos y atributos del contexto del controlador de componentes. 1. Cree una llamada de servicio para el módulo de funciones BAPI_FLIGHT_GETLIST. Defina el método de servicio y los nodos y atributos de contexto relacionados en el controlador de componentes. En Adaptar contexto, seleccione Contexto (Nodo/Atributo) en la columna Tipo de objeto de los parámetros DESTINATION_FROM, DESTINATION_TO y FLIGHT_LIST. Cuando se le pida el nombre del método de servicio, acepte el nombre por defecto (EXECUTE_BAPI_FLIGHT_GETLIST). 2. ¿Qué entidades del componente se han creado?
3. ¿Cuáles son las cardinalidades de los nodos DESTINATION_FROM y FLIGHT_LIST? ¿Por qué son diferentes?
Tarea 3 Copie el nodo BAPI_FLIGHT_GETLIST del contexto de la vista y defina la asignación de contexto.
© Copyright . Reservados todos los derechos.
351
Capítulo 11: Interfaz de usuario de Web Dynpro
1. Copie el nodo BAPI_FLIGHT_GETLIST del contexto del controlador de componentes en el contexto de la vista y defina la asignación de contexto. Tarea 4 En el layout, cree dos grupos en una fila. Cada grupo ocupa el 50% del ancho total de la página. El primer grupo tiene que incrustar un formulario que contenga campos de entrada para introducir la ciudad de salida y el país de salida. El segundo grupo tiene que incrustar un formulario que contenga campos de entrada para introducir la ciudad de destino y el país de destino. 1. Cree un grupo como un subelemento para el ROOTUIELEMENTCONTAINER. Nombre el grupo GROUP_DEPA. Visualice Salida en la cabecera del grupo. 2. Cree el segundo grupo. Nombre el grupo GROUP_DEST. Visualice Destino en la cabecera del grupo. 3. Utilice el asistente de codificación Web Dynpro para crear un formulario que contenga campos de entrada para introducir la ciudad de salida y el país de salida en el grupo GROUP_DEPA. Disponga los campos de formulario usando el gestor de layout MatrixLayout. 4. Repita el último paso para el grupo GROUP_DEST. Cree un formulario que contenga campos de entrada para introducir la ciudad de destino y el país de destino. 5. Ajuste las propiedades de los elementos de UI. Cada grupo debe ocupar el 50% del ancho total de la página. Utilice un matrix layout para la página a fin de definir dos columnas. Tarea 5 Se define una tabla que visualiza los vuelos relacionados debajo de los dos formularios que creó. La tabla debe ocupar todo el ancho de la página y debe visualizar 10 filas. Suprima la columna de selección. 1. Utilice el asistente de codificación Web Dynpro para crear una tabla que visualice los vuelos almacenados en el nodo FLIGHT_LIST. La tabla debe visualizar toda la información, salvo el ID de transportista y el código ISO de la moneda. 2. Ajuste las propiedades del elemento de UI. La tabla debe ocupar todo el ancho de la página y debe visualizar 10 filas. Suprima la columna de selección. Tarea 6 Defina un pulsador que llame el método de servicio definido en el controlador de componentes. Ubique el pulsador en una nueva fila entre los grupos y la tabla. 1. Defina el pulsador. 2. Adapte la jerarquía de elementos de UI. Al final de esta tarea, el botón debe visualizarse en una nueva fila entre los grupos y la tabla. 3. Ajuste las propiedades del pulsador. Coloque el pulsador como el primer elemento en una nueva fila y defina el texto que debe visualizarse. Asigne una acción al pulsador (DISPLAY_DETAILS.
352
© Copyright . Reservados todos los derechos.
Lección: Utilización de elementos de UI compuestos
4. Implemente el código fuente del método controlador de acciones. Llame al método de servicio. Tarea 7 Pruebe su aplicación. 1. Active su componente. Cree una aplicación para acceder a su componente para poder probarlo.
© Copyright . Reservados todos los derechos.
353
Capítulo 11 Solución 19 Usar el asistente de servicio y visualizar tablas
Ejemplo empresarial Ha encontrado un módulo de funciones que planea usar para recuperar los datos que se usará en el componente Web Dynpro. Usted decide utilizar el asistente de servicio para ayudarle a crear el contexto y el código basado en el módulo de funciones. Modelo: Irrelevante Solución: NET310_UI_S2 Tarea 1 Cree un componente Web Dynpro con una vista incrustada en una ventana. 1. Cree el componente Web Dynpro ZNET310_UI2_## que contiene una vista (DISPLAY_VIEW), la cual está incrustada en una ventana (MAIN_WINDOW). a) Realice este paso como en los ejercicios anteriores. Tarea 2 Cree una llamada de servicio del módulo de funciones BAPI_FLIGHT_GETLIST en el controlador de componentes. Esto crea un método que encapsulará la llamada BAPI. Además, los parámetros de interfaz de la BAPI se deben utilizar para crear los nodos y atributos del contexto del controlador de componentes. 1. Cree una llamada de servicio para el módulo de funciones BAPI_FLIGHT_GETLIST. Defina el método de servicio y los nodos y atributos de contexto relacionados en el controlador de componentes. En Adaptar contexto, seleccione Contexto (Nodo/Atributo) en la columna Tipo de objeto de los parámetros DESTINATION_FROM, DESTINATION_TO y FLIGHT_LIST. Cuando se le pida el nombre del método de servicio, acepte el nombre por defecto (EXECUTE_BAPI_FLIGHT_GETLIST). a) En la pantalla Explorador Web Dynpro: Modificar componente, en el menú contextual de ZNET310_UI2_##, seleccione Crear → Llamada de servicio. b) En la ventana de diálogo Asistente Web Dynpro: Inicio, seleccione Continuar. c) Seleccione Utilizar controlador existente, seleccione el controlador de componentes de su componente y seleccione Continuar. d) En la ventana de diálogo Asistente Dynpro: Seleccionar servicio, introduzca BAPI_FLIGHT_GETLIST para Módulo de funciones y seleccione Continuar. e) En la ventana de diálogo Asistente Dynpro: Adaptar nombre del nodo, seleccione Contexto (Nodo/Atributo) en la columna Tipo de objeto de los parámetros de contexto de controlador DESTINATION_FROM, DESTINATION_TO y FLIGHT_LIST. Seleccione Continuar.
354
© Copyright . Reservados todos los derechos.
Lección: Utilización de elementos de UI compuestos
f) En la ventana de diálogo Asistente Dynpro: Especificar nombre de método, seleccione Continuar. g) En la ventana de diálogo A sistente Dynpro: Generar controlador, seleccione Completar. 2. ¿Qué entidades del componente se han creado? El nodo de contexto BAPI_FLIGHT_GETLIST con varios subnodos para los parámetros IMPORTING y TABLES seleccionados del módulo de funciones El método EXECUTE_BAPI_FLIGHT_GETLIST( ) en el controlador de componentes, que encapsula la llamada del módulo de funciones. Se crean los atributos del controlador para los parámetros AIRLINE y MAX_ROWS del módulo de funciones. 3. ¿Cuáles son las cardinalidades de los nodos DESTINATION_FROM y FLIGHT_LIST? ¿Por qué son diferentes? La cardinalidad del nodo DESTINATION_FROM es 1..1 y la del nodo FLIGHTLIST es 0..n. Son diferentes porque el parámetro DESTINATION_FROM es una estructura mientras que el parámetro FLIGHT_LIST es una tabla interna. Tarea 3 Copie el nodo BAPI_FLIGHT_GETLIST del contexto de la vista y defina la asignación de contexto. 1. Copie el nodo BAPI_FLIGHT_GETLIST del contexto del controlador de componentes en el contexto de la vista y defina la asignación de contexto. a) En la pantalla Explorador Web Dynpro: Modificar controlador de ZNET310_UI2_##, haga doble clic en OUTPUT_VIEW y seleccione la etiqueta Contexto. b) En el contexto COMPONENTCONTROLLER, arrastre el nodo BAPI_FLIGHT_GETLIST en el contexto del controlador de la vista y suéltelo en el nodo raíz del contexto CONTEXT. c) Grabe las entradas. Tarea 4 En el layout, cree dos grupos en una fila. Cada grupo ocupa el 50% del ancho total de la página. El primer grupo tiene que incrustar un formulario que contenga campos de entrada para introducir la ciudad de salida y el país de salida. El segundo grupo tiene que incrustar un formulario que contenga campos de entrada para introducir la ciudad de destino y el país de destino. 1. Cree un grupo como un subelemento para el ROOTUIELEMENTCONTAINER. Nombre el grupo GROUP_DEPA. Visualice Salida en la cabecera del grupo. a) En la pantalla Explorador Web Dynpro: Modificar vista de ZNET310_UI2_##, para la vista DISPLAY_VIEW, seleccione la etiqueta Layout. b) En el menú contextual del ROOTUIELEMENTCONTAINER, seleccione Insertar elemento e introduzca los siguientes datos:
© Copyright . Reservados todos los derechos.
355
Capítulo 11: Interfaz de usuario de Web Dynpro
Nombre del campo
Valor
ID
GROUP_DEPA
TYP
Grupo
c) Seleccione Continuar. d) Para el texto de propiedad, indique Salida en el campo Valor. e) Grabe las entradas. 2. Cree el segundo grupo. Nombre el grupo GROUP_DEST. Visualice Destino en la cabecera del grupo. a) Realice este paso como se describe en el paso anterior. 3. Utilice el asistente de codificación Web Dynpro para crear un formulario que contenga campos de entrada para introducir la ciudad de salida y el país de salida en el grupo GROUP_DEPA. Disponga los campos de formulario usando el gestor de layout MatrixLayout. a) En la pantalla Explorador Web Dynpro: Modificar vista de ZNET310_UI2_##, para la vista DISPLAY_VIEW, en la etiqueta Layout seleccione el elemento GROUP_DEPA. b) Seleccione el pulsador Asistente de codificación Web Dynpro. c) En la ventana de diálogo Galería de modelos, haga doble clic en el modelo Formulario. d) En la ventana de diálogo Crear elementos de formulario para el container GROUP_DEPA, seleccione el pulsador Contexto. e) En la ventana de diálogo Seleccionar elemento de contenido, haga doble clic en DESTINATION_FROM. f) En la ventana de diálogo Crear elementos de formulario para el container GROUP_DEPA, limpie la casilla de selección en la columna Vinculación de los atributos AIRPORTID y COUNTR_ISO. g) Introduzca MatrixLayout en el campo Layout de container nuevo y seleccione Continuar. 4. Repita el último paso para el grupo GROUP_DEST. Cree un formulario que contenga campos de entrada para introducir la ciudad de destino y el país de destino. a) Realice este paso como se describe en los pasos anteriores usando el nodo DESTINATION_TO para la información de destino. 5. Ajuste las propiedades de los elementos de UI. Cada grupo debe ocupar el 50% del ancho total de la página. Utilice un matrix layout para la página a fin de definir dos columnas. a) En la pantalla Explorador Web Dynpro: Modificar vista de ZNET310_UI2_## para ROOTUIELEMENTCONTAINER, introduzca los siguientes datos:
356
Nombre del campo
Valor
Layout
MatrixLayout
ancho
100%
© Copyright . Reservados todos los derechos.
Lección: Utilización de elementos de UI compuestos
b) Seleccione la casilla de selección para la propiedad stretchedHorizontally. c) Para el grupo GROUP_DEPA, introduzca los siguientes datos: Nombre del campo
Valor
ancho
100%
ancho (LayoutData)
50%
d) Para el grupo GROUP_DEST, introduzca los siguientes datos: Nombre del campo
Valor
ancho
100%
ancho (LayoutData)
50%
e) Grabe las entradas. Tarea 5 Se define una tabla que visualiza los vuelos relacionados debajo de los dos formularios que creó. La tabla debe ocupar todo el ancho de la página y debe visualizar 10 filas. Suprima la columna de selección. 1. Utilice el asistente de codificación Web Dynpro para crear una tabla que visualice los vuelos almacenados en el nodo FLIGHT_LIST. La tabla debe visualizar toda la información, salvo el ID de transportista y el código ISO de la moneda. a) En la pantalla Explorador Web Dynpro: Modificar vista de ZNET310_UI2_##, para la vista DISPLAY_VIEW, en la etiqueta Layout seleccione ROOTUIELEMENTCONTAINER b) Seleccione el pulsador Asistente de codificación Web Dynpro. c) En la ventana de diálogo Galería de modelos, haga doble clic en el modelo Tabla. d) En la ventana de diálogo Crear vinculación de contexto para la tabla "TABLE", seleccione el pulsador Contexto. e) En la ventana de diálogo Seleccionar elemento de contexto, haga doble clic en FLIGHT_LIST. f) En la ventana de diálogo Crear vinculación de contexto para la tabla "TABLE", limpie la casilla de selección en la columna Vinculación de los atributos AIRLINEID y CURR_ISO. g) Seleccione Continuar. 2. Ajuste las propiedades del elemento de UI. La tabla debe ocupar todo el ancho de la página y debe visualizar 10 filas. Suprima la columna de selección. a) En la pantalla Explorador Web Dynpro: Modificar vista de ZNET310_UI2_## para ROOTUIELEMENTCONTAINERTABLE, introduzca los siguientes datos: Nombre del campo
Valor
LayoutData
MatrixHeadData
Width
100%
colSpan
2
© Copyright . Reservados todos los derechos.
357
Capítulo 11: Interfaz de usuario de Web Dynpro
Nombre del campo
Valor
selectionMode
ninguno
visibleRowCount
10
b) Grabe las entradas. Tarea 6 Defina un pulsador que llame el método de servicio definido en el controlador de componentes. Ubique el pulsador en una nueva fila entre los grupos y la tabla. 1. Defina el pulsador. a) En la pantalla Explorador Web Dynpro: Modificar vista de ZNET310_UI2_##, para la vista DISPLAY_VIEW, en el menú contextual de ROOTUIELEMENTCONTAINER seleccione InsertElement b) En la ventana de diálogo Crear elemento, indique los datos siguientes: Nombre del campo
Valor
ID
BUT_CALL_SERVICE
Typ
Botón
c) Seleccione Continuar. 2. Adapte la jerarquía de elementos de UI. Al final de esta tarea, el botón debe visualizarse en una nueva fila entre los grupos y la tabla. a) En la pantalla Explorador Web Dynpro: Modificar vista de ZNET310_UI2_##, desde la jerarquía de elementos, arrastre el botón BUT_CALL_SERVICE y suéltelo en TABLE. De esta manera, se intercambiarán las posiciones de estos dos elementos. 3. Ajuste las propiedades del pulsador. Coloque el pulsador como el primer elemento en una nueva fila y defina el texto que debe visualizarse. Asigne una acción al pulsador (DISPLAY_DETAILS. a) En las propiedades del botón, indique los datos siguientes: Nombre del campo
Valor
Datos de Layout
MatrixHeadData
Texto
Visualizar vuelos
b) En la fila onAction, seleccione el pulsador Crear. c) En la ventana de diálogo Crear acción, indique los datos siguientes: Nombre del campo
Valor
Medida
DISPLAY_DETAILS
Descripción
visualizar botón de detalles
d) Seleccione Continuar.
358
© Copyright . Reservados todos los derechos.
Lección: Utilización de elementos de UI compuestos
4. Implemente el código fuente del método controlador de acciones. Llame al método de servicio. a) En la pantalla Explorador Web Dynpro: Modificar vista de ZNET310_UI2_##, seleccione la etiqueta Acciones. b) En la columna Programa de control de eventos, haga doble clic en el método ONACTIONDISPLAY_DETAILS. Esto muestra el código fuente del método. c) Seleccione el pulsador Asistente de codificación Web Dynpro. d) En la ventana de diálogo Estructura de la sentencia Web Dynpro, seleccione la etiqueta General. e) Seleccione Llamada de método en controlador utilizado e introduzca los siguientes datos: Nombre del campo
Valor
Nombre de componente
ZNET310_UI2_##
Nombre de controlador
COMPONENTCONTROLLER
Nombre de método
EXECUTE_BAPI_FLIGHT_GETLIST
f) Seleccione Continuar. g) Grabe las entradas. Tarea 7 Pruebe su aplicación. 1. Active su componente. Cree una aplicación para acceder a su componente para poder probarlo. a) Realice este paso como en los ejercicios anteriores.
© Copyright . Reservados todos los derechos.
359
Capítulo 11: Interfaz de usuario de Web Dynpro
Página de test para elementos de UI
Figura 189: Página de test para elementos de UI
La aplicación Web Dynpro WDR_TEST_UI_ELEMENTS permite investigar y probar la función de los elementos de UI disponibles. WDR_TEST_UI_ELEMENTS se proporciona con todos los sistemas que contienen el marco Web Dynpro.
360
© Copyright . Reservados todos los derechos.
Lección: Utilización de elementos de UI compuestos
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Explicar elementos de UI compuestos
●
Definir la vinculación de contexto para las UI de la tabla
●
Definir la propiedad de selección para las UI de la tabla
●
Utilizar la página de test para elementos de UI
© Copyright . Reservados todos los derechos.
361
Capítulo 11: Interfaz de usuario de Web Dynpro
362
© Copyright . Reservados todos los derechos.
Capítulo 11 Evaluación de la formación
1. Un elemento de UI es cualquier entidad gráfica que ocupe una posición dentro de un layout de visualización. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
2. La categoría __________ contiene elementos que se emplean para visualizar textos o introducir literales. Seleccione la respuesta correcta. X
A text
X
B action
X
C selection
X
D complex
3. Usted utiliza el editor de vistas en el controlador personalizado para tratar el layout de vista. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
4. Una vez que la propiedad del elemento de UI se asocia a un atributo o nodo de contexto, ___________ se utilizan para suministrar un valor a la propiedad del elemento de UI. Seleccione la respuesta correcta. X
A datos de contexto
X
B elemento de UI correspondiente
X
C controlador de vistas Web Dynpro
X
D métodos de conexión de controlador
© Copyright . Reservados todos los derechos.
363
Capítulo 11: Evaluación de la formación
5. Para controlar mediante programación el comportamiento de un elemento de UI, cree un atributo de contexto con un _____________ que coincida con la propiedad que desea controlar. Seleccione la respuesta correcta. X
A tipo de datos
X
B de objeto
X
C vinculación de datos
6. El elemento de UI Table permite visualizar ____________ los datos de las celdas dispuestos en filas y columnas. Seleccione la respuesta correcta. X
A en dos dimensiones
X
B en una dimensión
X
C en tres dimensiones
X
D en cuatro dimensiones
7. ¿Cuál es la cardinalidad de selección predeterminada para cualquier nodo de contexto? Seleccione la respuesta correcta.
364
X
A 0
X
B 1
X
C 0..1
X
D 1..0
© Copyright . Reservados todos los derechos.
Capítulo 11 Respuestas a la Evaluación de la formación
1. Un elemento de UI es cualquier entidad gráfica que ocupe una posición dentro de un layout de visualización. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
2. La categoría __________ contiene elementos que se emplean para visualizar textos o introducir literales. Seleccione la respuesta correcta. X
A text
X
B action
X
C selection
X
D complex
3. Usted utiliza el editor de vistas en el controlador personalizado para tratar el layout de vista. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
© Copyright . Reservados todos los derechos.
365
Capítulo 11: Respuestas a la Evaluación de la formación
4. Una vez que la propiedad del elemento de UI se asocia a un atributo o nodo de contexto, ___________ se utilizan para suministrar un valor a la propiedad del elemento de UI. Seleccione la respuesta correcta. X
A datos de contexto
X
B elemento de UI correspondiente
X
C controlador de vistas Web Dynpro
X
D métodos de conexión de controlador
5. Para controlar mediante programación el comportamiento de un elemento de UI, cree un atributo de contexto con un _____________ que coincida con la propiedad que desea controlar. Seleccione la respuesta correcta. X
A tipo de datos
X
B de objeto
X
C vinculación de datos
6. El elemento de UI Table permite visualizar ____________ los datos de las celdas dispuestos en filas y columnas. Seleccione la respuesta correcta. X
A en dos dimensiones
X
B en una dimensión
X
C en tres dimensiones
X
D en cuatro dimensiones
7. ¿Cuál es la cardinalidad de selección predeterminada para cualquier nodo de contexto? Seleccione la respuesta correcta.
366
X
A 0
X
B 1
X
C 0..1
X
D 1..0
© Copyright . Reservados todos los derechos.
CAPÍTULO 12
Programación de contextos y controladores
Lección 1 Comprensión de métodos y atributos de controlador
368
Lección 2 Utilización de métodos de controlador para acceder al contexto en tiempo de ejecución Ejercicio 20: Acceso al contexto en tiempo de ejecución
379 389
Lección 3 Adición de elementos nuevos a un nodo de contexto Ejercicio 21: Visualizar datos en masa mediante tablas
394 401
Lección 4 Implementación de las funciones de suministro Ejercicio 22: Implementar las funciones de suministro
409 411
OBJETIVOS DEL CAPÍTULO ●
Explicar cómo se procesan los métodos de conexión
●
Implementar métodos de controlador
●
Utilizar atributos de controlador
●
Acceder al contexto de un controlador
●
Acceder a los elementos de nodo de contexto
●
Agregar elementos nuevos a un nodo de contexto
●
Utilizar funciones de suministro
© Copyright . Reservados todos los derechos.
367
Capítulo 12 Lección 1 Comprensión de métodos y atributos de controlador
RESUMEN DE LA LECCIÓN Esta lección explica los diferentes métodos de conexión y el orden en el que son procesados. También describe cómo se pueden crear métodos y atributos de controlador. Ejemplo empresarial Ya sabe cómo crear un componente Web Dynpro, pero hasta ahora, ha trabajado exclusivamente con entidades que se pueden crear de manera declarativa. Ahora necesita implementar la lógica de proceso (incluido el acceso a la lógica back end) mediante la escritura de código fuente ABAP en métodos de controlador. Por este motivo, se requieren los siguientes conocimientos: ●
Una buena comprensión del modelo de fases y los métodos de conexión
●
Una buena comprensión de los métodos de controlador adicionales
●
Una buena comprensión de los atributos de controlador
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá:
368
●
Explicar cómo se procesan los métodos de conexión
●
Implementar métodos de controlador
●
Utilizar atributos de controlador
© Copyright . Reservados todos los derechos.
Lección: Comprensión de métodos y atributos de controlador
Entidades de controladores
Figura 190: Métodos de controlador
Cada controlador Web Dynpro es una clase ABAP local individual que se define en la clase ABAP global relacionada con el componente Web Dynpro. La definición de estas clases se genera automáticamente cuando se declara un componente o un controlador nuevo. El código fuente que implementa a estos controladores se genera automáticamente. Cada controlador proporciona una cantidad de métodos predefinidos que se llaman métodos de conexión. Los métodos de conexión se llaman en tiempo de ejecución Web Dynpro en un orden predefinido. Cuando se crea un controlador, estos métodos están vacíos, pero luego el desarrollador puede añadirles un código según sea necesario. Además de los métodos de conexión, el desarrollador puede definir los siguientes tipos de métodos: ● Métodos ordinarios ●
Métodos de programa de control de eventos
●
Funciones de suministro
La clase de controlador se genera a partir de todos los métodos de controlador, métodos de conexión y métodos definidos por el usuario, cada vez que se activa el controlador. ABAP Workbench le permite introducir código fuente solo en los métodos del controlador. La clase de controlador generada no es accesible.
© Copyright . Reservados todos los derechos.
369
Capítulo 12: Programación de contextos y controladores
Métodos de conexión estándar para todos los controladores
Figura 191: Métodos de conexión estándar para todos los controladores
Todos los tipos de controladores ofrecen los siguientes métodos de conexión estándar: wddoinit( ) Este es el primer método procesado en la duración del controlador. Solo se le llama una vez en el ciclo de vida del controlador. Todo su código de inicialización deberá ir dentro de este método, ya que a este método se le llama inmediatamente una vez instanciado el controlador. wddoexit() Este es el último método procesado al final del ciclo de vida de un controlador. Todo su código de depuración deberá ir dentro de este método. Hay disponibles métodos de conexión adicionales en función del tipo de controlador.
370
© Copyright . Reservados todos los derechos.
Lección: Comprensión de métodos y atributos de controlador
Métodos de conexión estándar: Controlador de componentes
Figura 192: Métodos de conexión estándar: Controlador de componentes
El controlador de componentes posee los siguientes métodos de conexión estándar adicionales: ● wddobeforenavigation() Cuando se emite un evento de cliente, el método de acciones correspondiente se procesa en el controlador de vistas. Se llama al método wddobeforenavigation( ) después de que se haya procesado el método de acciones y justo antes de que el marco Web Dynpro procese los eventos de la cola de navegación. En aplicaciones Web Dynpro complejas, puede que sea necesario validar los datos desde varios componentes antes de poder pasar al siguiente paso del proceso empresarial. Este método se puede utilizar con este objetivo. ●
wddopostprocessing() Este es el último método de controlador que se procesa antes de enviar la interfaz de usuario (UI) al cliente.
●
wddoapplicationstatechange() Este método se procesa cada vez que la aplicación se suspende o reanuda. La suspensión de una aplicación Web Dynpro se produce si se activa un punto de conexión de interrupción de la ventana. Este método puede aplicarse para iniciar una nueva aplicación sin salir de la aplicación Web Dynpro actual. La aplicación Web Dynpro deshabilitada temporalmente se reanuda automáticamente si se ha detenido la segunda aplicación. La aplicación Web Dynpro interrumpida se reanuda ingresando a la ventana a través de un punto de conexión de reanudación. Si se crea un punto de conexión de interrupción para la ventana, debe crearse un punto de conexión de reanudación.
© Copyright . Reservados todos los derechos.
371
Capítulo 12: Programación de contextos y controladores
Métodos de conexión estándar del controlador de vistas
Figura 193: Métodos de conexión estándar: Controlador de vistas
El controlador de vistas posee los siguientes métodos de conexión adicionales: ● wddobeforeaction() Este método suele contener el código fuente relacionado con las verificaciones de entrada. Luego de que el usuario haya emitido un evento de cliente vinculado con una acción, los primeros métodos que se procesan en la aplicación Web Dynpro son los métodos wddobeforeaction( ) de todos los controladores de vistas del conjunto de vistas que se renderizó previamente. Esto ocurre incluso antes de que el método de controlador de acciones relacionado con el evento de cliente se procese. ●
wddoafteraction() Este método puede emplearse para modularizar el código fuente relacionado con el control de acciones. Luego de procesar una método controlador de acciones, se procesan los métodos wddoafteraction( ) de todos los controladores de vistas del conjunto de vistas que se renderizó previamente.
●
wddomodifyview() Este evento se puede utilizar para manipular la jerarquía de elementos de UI dinámicamente. El único método que permite el acceso a la jerarquía de elementos de UI es el método wddomodifyview( ) de la vista. El parámetro de interfaz VIEW es una referencia a la jerarquía de elementos de UI. Se puede utilizar el parámetro FIRST_TIME para averiguar si este método se ha procesado anteriormente en el ciclo de vida del controlador de vistas.
●
372
wddooncontextmenu()
© Copyright . Reservados todos los derechos.
Lección: Comprensión de métodos y atributos de controlador
Este método se procesa cada vez que el usuario hace clic con el botón derecho del ratón sobre cualquier elemento de UI definido en el layout de visualización relacionado. A partir del código fuente de este método, pueden instanciarse los menúes contextuales definidos estáticamente y pueden definirse los menúes contextuales nuevos. Estos menúes contextuales pueden asignarse a cualquier elemento de UI definido en la jerarquía de vista. Esto permite extender el menú contextual al que se accede con un clic del botón derecho del ratón para incluir las funciones específicas de la aplicación. Métodos de conexión especial para controladores de ventanas Los métodos de conexión especial para controladores de ventanas son los siguientes: wddoonopen( )
●
Este método de conexión especial se procesa si la ventana se visualiza como una ventana de diálogo, justo antes de que ésta se abra. ●
wddoonclose( ) Este método de conexión especial se procesa si la ventana se visualiza como una ventana de diálogo, justo antes de que ésta se cierre.
Nota: Estos dos métodos de conexión especial pueden contener el código que solo debe procesarse si la ventana se visualiza como una ventana de diálogo (por ejemplo, definición de botones que se visualizan en el marco de la ventana de diálogo). Modelo fase (conceptos básicos)
Figura 194: Modelo de fase (caso simple)
© Copyright . Reservados todos los derechos.
373
Capítulo 12: Programación de contextos y controladores
El modelo fase describe el orden en el que se procesan los métodos de controlador. Según la complejidad de la aplicación Web Dynpro (si hay subcomponentes involucrados y si hay vistas anidadas usando ViewContainerUIElements) el modelo de fase también puede ser complejo. Además, los mensajes de error afectan el modelo de fase.
Nota: Esta sección describe la situación más simple con un componente, una vista y sin situaciones de error. Inicio de la aplicación Web Dynpro Cuando se inicia una aplicación Web Dynpro, los controladores se procesan de la siguiente manera: ● Se instancian todos los controladores necesarios para la primera visualización. Esto significa que los métodos wddoinit( ) se procesan para el controlador de componentes, el controlador de ventanas y el controlador de vistas. ●
Se procesa el método del punto de navegación de entrada de la vista de interfaz relacionada con la aplicación. Por defecto, se utiliza el punto de navegación Por defecto. Esto significa que se procesa el método handledefault( ).
●
Se procesa el método del controlador de componente wddobeforenavigation( ).
●
Se procesa el método del controlador de vista wddomodifyview( ).
●
Se procesa el método del controlador de componente wddopostprocessing( ).
Una interacción del usuario normalmente activa la siguiente solicitud. Para algunos elementos de UI (por ejemplo, pulsador) es necesario que una acción esté vinculada al evento del cliente. Sin embargo, algunas interacciones del usuario llevan a una solicitud que tiene que vincular una acción a un evento del cliente relacionado (por ejemplo., desplazarse en una tabla y seleccionar una nueva fila de tabla). El modelo fase para una solicitud desencadenada por la interacción de un usuario se puede describir de la siguiente manera: ● Si el evento del cliente está vinculado a una acción, se procesan los métodos wddobeforeaction( ), onaction( ) y wddoafteraction( ). En el controlador de componente, se procesa el método wddobeforenavigation( ). ●
●
374
Si se activa un punto de navegación de salida y se define en la ventana un enlace de navegación a un punto de navegación de entrada, se instancia la vista relacionada al punto de navegación de entrada y se procesa el método wddoinit( ). Se procesa el método de punto de navegación de entrada handle( ) para esta vista. Si la duración de la vista anterior está limitada, se procesa el método wddoexit( ) para la vista anterior.
●
En el controlador de vista, se procesa el método wddomodifyview( ) para la siguiente vista.
●
En el controlador de componente, se procesa el método wddopostprocessing( ).
© Copyright . Reservados todos los derechos.
Lección: Comprensión de métodos y atributos de controlador
Métodos de controlador adicionales
Figura 195: Métodos de controlador adicionales
Puede crear métodos adicionales para todos los controladores mediante la declaración del nombre y los parámetros del método en la etiqueta Métodos de la ventana del editor de controladores. Para definir un método ordinario, seleccione Tipo de método = Método. Si selecciona Tipo de método = Programa de control de eventos, se creará un método de programa de control de eventos. Este método de controlador de eventos se puede registrar estáticamente (en la columna Evento) en cualquier evento activado en un controlador que se define como Controlador utilizado en la etiqueta Propiedades. Por último, se puede establecer Tipo de método = Función de suministro para que defina métodos que se puedan vincular a nodos de contexto (propiedad Función de suministro). El framework de Web Dynpro puede llamar a los métodos que se pueden vincular a nodos de contexto en las siguientes condiciones: ● Se accede a uno o más elementos del nodo de contexto y el nodo de contexto aún no está rellenado o es inicial. ●
El nodo de contexto ha sido invalidado en un paso anterior.
Consejo: No se puede llamar explícitamente a las funciones de suministro desde el código fuente de los métodos de controlador. Solo el tiempo de ejecución Web Dynpro puede llamar a esta clase de método. Definiciones de método de controlador Cuando hace doble clic en el nombre del método, puede definir la firma y el código fuente del método.
© Copyright . Reservados todos los derechos.
375
Capítulo 12: Programación de contextos y controladores
Todos los métodos son públicos y cualquier otro controlador del mismo componente puede utilizarlos (excepto métodos definidos en un controlador de vistas, que solo pueden ser llamados dentro de la propia vista). Como condición previa, el controlador que llama al método debe definir una relación de utilización con el controlador al que pertenecen los métodos. El código fuente ABAP para llamar a un método en el controlador utilizado puede generarse mediante el asistente de codificación Web Dynpro. Si el indicador Interfaz está establecido para un método de controlador de componente definido por el usuario, este método aparece en la interfaz del componente. Como resultado, este método también se hace visible a otros componentes.
Atributos de controlador
Figura 196: Atributos de controlador estándar
Cada controlador es una clase ABAP local independiente con métodos y atributos predefinidos y definidos por el usuario. Para cada controlador, se predefinen al menos dos atributos. La visibilidad de estos atributos está limitada a los métodos del mismo controlador. Un controlador tiene los siguientes atributos estándares: ● WD_THIS Este es una autorreferencia a la interfaz del controlador local. Este atributo se distingue de la autorreferencia ABAP estándar ME, que no deberá utilizarse en el código fuente de ningún controlador. WD_THIS es una referencia a la interfaz del controlador actual, IF_, y representa todas las funcionalidades implementadas en la clase generada. También le da acceso a funcionalidades Web Dynpro estándar, como la validación. ●
WD_CONTEXT Este es una referencia al nodo raíz de contexto del controlador y, por consiguiente, a todo el contexto. Todo acceso al contexto del controlador se inicia con esta referencia.
376
© Copyright . Reservados todos los derechos.
Lección: Comprensión de métodos y atributos de controlador
Atributos adicionales Si el controlador de componentes se declara como controlador utilizado en la etiqueta Propiedades de cualquier otro controlador, se creará automáticamente un atributo adicional, WD_COMP_CONTROLLER, para el controlador que ha declarado la utilización: WD_COMP_CONTROLLER es una referencia al controlador de componentes. Con esta referencia, se puede acceder a todos los atributos públicos y métodos del controlador de componente (wd_comp_controller->, en el que es un marcador de posición del nombre del método o (wd_comp_controller->, en el que es un marcador de posición del nombre del atributo). Esta referencia no está disponible para todos los demás controladores, incluso si están declarados como controladores utilizados. Sin embargo, esto no significa que los métodos definidos por el usuario y los atributos públicos no estén disponibles. En vez de eso, significa que se debe determinar primero la referencia. Para acceder a la interfaz del controlador local de un controlador usado , utilice la siguiente sentencia: DATA: lo_ctrl TYPE REF TO ig_ . lo_ctrl = wd_this->get__ctr( ). Atributos definidos por el usuario
Figura 197: Métodos de controlador y atributos de controlador definidos por el usuario
En la etiqueta Atributos, pueden definirse los atributos adicionales para el controlador relacionado. Si el indicador Público está establecido, estos atributos también serán visibles para los demás controladores del mismo componente Web Dynpro. Los atributos no se pueden mostrar en la interfaz de componentes. Se utiliza la variable de referencia WD_THIS para acceder a los atributos de controlador públicos de uno de los métodos del controlador. Para acceder a los atributos públicos definidos en otros controladores del mismo componente, determine la referencia a la interfaz del controlador local del controlador usado.
© Copyright . Reservados todos los derechos.
377
Capítulo 12: Programación de contextos y controladores
RESUMEN DE LA LECCIÓN Ahora podrá:
378
●
Explicar cómo se procesan los métodos de conexión
●
Implementar métodos de controlador
●
Utilizar atributos de controlador
© Copyright . Reservados todos los derechos.
Capítulo 12 Lección 2 Utilización de métodos de controlador para acceder al contexto en tiempo de ejecución
RESUMEN DE LA LECCIÓN Esta lección explica cómo acceder a nodos de contexto y elementos. Además, muestra cómo leer y modificar los valores de atributo. Ejemplo empresarial Usted quiere usar los métodos Web Dynpro apropiados para acceder al contexto de controlador en tiempo de ejecución, y para leer, modificar, agregar o eliminar información guardada allí. Por este motivo, se requieren los siguientes conocimientos: ●
Una buena comprensión de cómo acceder al contexto de controlador
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Acceder al contexto de un controlador
●
Acceder a los elementos de nodo de contexto
Acceso a elementos y nodos de contexto
Figura 198: Acceso a un nodo de contexto
© Copyright . Reservados todos los derechos.
379
Capítulo 12: Programación de contextos y controladores
Los atributos del controlador se pueden utilizar para incluir datos que son visibles a través del controlador. No obstante, no se puede asociar propiedades de elementos de UI a estos atributos de controlador. Las propiedades de elementos de UI solo se pueden asociar a atributos definidos en el contexto de controlador. El acceso al contexto de controlador en tiempo de ejecución (por ejemplo leer o modificar datos) requiere el conocimiento de los métodos Web Dynpro apropiados. Para acceder a un elemento de contexto o a un atributo de contexto, primero necesita una referencia al nodo de contexto relacionado. Para cada controlador (), se genera una interfaz local con el nombre IF_. Para cada nodo del contexto de controlador se genera una constante (WDCTX_) dentro de esta interfaz. Tiene el nombre del nodo (en letras mayúsculas) como su valor. Esta constante puede utilizarse para acceder al nodo de contexto. Acceso al nodo raíz de contexto Se puede acceder al nodo raíz de contexto mediante el atributo estándar WD_CONTEXT. Los nodos subordinados del nodo raíz de contexto se pueden identificar mediante el método get_child_node( ). Este método devuelve una referencia a la instancia de nodo de tipo IF_WD_CONTEXT_NODE. El método get_child_node( ) requiere que el programa de llamada especifique el nombre del nodo. Opcionalmente, puede proporcionar al método el índice del elemento del nodo superior al que pertenece la instancia de nodo deseada. Si no se indica el índice, se emplea implícitamente el índice de selección de leads. Consejo: Para los nodos independientes, el índice siempre puede omitirse, ya que cada nodo raíz de contexto posee un elemento que es el elemento en la selección de leads.
Nota: El método path_get_node ( path = ’’ ) es un medio especial de acceder a la referencia en un nodo dependiente. Al igual que un parámetro, toda la vía de acceso al nodo deseado se transmite al método. Los nombres de los nodos y los índices de los elementos forman la ruta (por ejemplo, ..). Si se omite el índice del elemento (en este caso, .), la instancia del subnodo se determina según el elemento en la selección de leads del nodo superior .
380
© Copyright . Reservados todos los derechos.
Lección: Utilización de métodos de controlador para acceder al contexto en tiempo de ejecución
Acceso a un elemento de nodo
Figura 199: Acceso al elemento de nodo de la selección de lead
Después de acceder a un nodo de contexto, la referencia al elemento de la selección de liderazgo de este nodo se puede obtener llamando el método get_element( ). Este método devuelve una referencia a la instancia de elemento de tipo IF_WD_CONTEXT_ELEMENT. Se puede acceder al elemento con índice n mediante el método get_element( index = n ). El número de elementos de una serie se puede obtener a partir del método get_element_count( ). acceso a nodos de contexto y elementos de nodo Para acceder a nodos de contexto y a elementos de nodo, se pueden usar los siguientes métodos: Medida
Método
Referencia al nodo de contexto
lo_nd_ = wd_context->get_child_node( name = wd_this->wdctx_ ).
Referencia a un elemento de la selección de liderazgo
lo_el_ = lo_nd_->get_element( ).
© Copyright . Reservados todos los derechos.
381
Capítulo 12: Programación de contextos y controladores
Medida
Método
Referencia a un elemento con índice n lo_el_ = lo_nd_->get_element( index = n ). Obtener el número de elementos de una serie
n = lo_->get_element_count( ).
Lectura y modificación de valores de atributo
Figura 200: Acceso a un atributo individual de un elemento de nodo
El marco Web Dynpro ofrece varios métodos para acceder a los atributos de un elemento de nodo o para acceder a los atributos de todos los elementos de un nodo de contexto. Una vez obtenida la referencia a un elemento de nodo, puede obtener los valores de atributo de este elemento de las siguientes maneras: ● Puede acceder a cualquier atributo de un elemento de nodo mediante el método get_attribute( ). Debe exportar el nombre del atributo. Se devuelve el valor del atributo en un parámetro de importación. ●
382
Puede obtener los atributos definidos estáticamente llamando el método get_static_attributes( ). Se devuelve una estructura. La estructura de destino puede ser diferente de la estructura de nodo si se utilizó un tipo de Dictionary para definirla, pero no se utilizaron todos los campos como atributos.
© Copyright . Reservados todos los derechos.
Lección: Utilización de métodos de controlador para acceder al contexto en tiempo de ejecución
Acceso a todos los atributos definidos estáticamente de un elemento de nodo
Figura 201: Acceso a todos los atributos definidos estáticamente de un elemento de nodo
Mediante el método get_static_attributes( ), usted puede recuperar todos los atributos de los elementos en una estructura en vez de tener que llamar el método get_attribute( ) varias veces. La siguiente información es importante cuando se accede a atributos de contexto: Para cada nodo de un contexto de controlador, se genera de manera implícita un tipo de estructura element_ en la interfaz IF_. Si se tipifica el nodo usando el Dictionary, element_ se tipifica de igual manera. Si no se tipifica el nodo, los campos de estructura se corresponden con los atributos definidos en el nodo. Este tipo de estructura puede ser usado para tipificar un objeto de datos, el cual se rellena con los métodos get_attribute( ) y get_static_attributes( ).
●
●
Además, para cada nodo de un contexto de controlador, se genera de manera implícita un tipo de tabla estándar elements_ en la interfaz IF_. El tipo de línea de esta tabla es element_. Este tipo de tabla se puede utilizar para tipificar una tabla interna que pueda incluir los atributos de varios elementos de nodo.
© Copyright . Reservados todos los derechos.
383
Capítulo 12: Programación de contextos y controladores
Acceso a los atributos estáticos de todos los elementos de nodo
Figura 202: Acceso a los atributos estáticos de todos los elementos de nodo
Se pueden recuperar los atributos de todos los elementos a modo de tabla interna con el método get_static_attributes_table( ). Para acceder a los sets de datos relacionados con varias filas de tabla que selecciona el usuario, llame el método del nodo get_selected_elements( ). Este método retorna todos los elementos seleccionados a una tabla interna (tipo WDR_CONTEXT_ELEMENT_SET). Cada fila de esta tabla interna contiene la referencia a un elemento seleccionado.
Nota: Para seleccionar un elemento de contexto, el usuario debe marcar la fila de tabla correspondiente. Aunque el elemento en la selección de leads esté resaltado, el elemento de contexto relacionado no se selecciona automáticamente. Por lo tanto, al llamar el método get_selected_elements( ), la aplicación debe definir si debe retornarse el elemento en la selección de leads aunque no se haya seleccionado explícitamente. El valor del parámetro INCLUDING_LEAD_SELECTION determina este proceso.
384
© Copyright . Reservados todos los derechos.
Lección: Utilización de métodos de controlador para acceder al contexto en tiempo de ejecución
Modificación de los valores de atributo de un elemento de nodo
Figura 203: Modificación de un atributo individual de un elemento de nodo
Cuando se ha determinado la referencia a un determinado elemento de nodo, puede leer los valores de atributo mediante los métodos GET correspondientes. También puede modificar los valores de atributo existentes llamando los métodos SET relacionados. El método set_attribute( ) se puede utilizar para modificar el valor de cualquier atributo del elemento de nodo. Se pueden modificar varios atributos si están definidos estáticamente mediante el método set_static_attributes( ).
© Copyright . Reservados todos los derechos.
385
Capítulo 12: Programación de contextos y controladores
Modificación de varios atributos de un elemento de nodo
Figura 204: Modificación de varios atributos de un elemento de nodo
La figura muestra un fragmento de código que modifica varios atributos de un elemento de nodo al mismo tiempo. acceso y modificación de atributos en el nodo del controlador Para acceder y modificar atributos de un nodo, utilice los métodos correspondientes: Medida
Método
Leer el valor del atributo
DATA: lv_ TYPE wd_this->element_-. lo_el_->get_attribute( EXPORTING name = '' IMPORTING value = lv_ ).
Leer el valor de varios atributos estáticos
DATA: ls_ TYPE wd_this->element_. lo_el_-> get_static_attributes( IMPORTING static_attributes = ls_ ).
386
© Copyright . Reservados todos los derechos.
Lección: Utilización de métodos de controlador para acceder al contexto en tiempo de ejecución
Medida Leer los valores de atributo estáticos para todos los elementos de nodo
Método DATA: lt_ TYPE wd_this->elements_. lo_nd_-> get_static_attributes_tabl e( IMPORTING table = lt_ ).
Modificar el valor lv_ de un atributo individual
DATA: lv_ TYPE wd_this->element_-. lv_ = ... lo_el_->set_attribute( EXPORTING name = '' value = lv_ ).
Modificar varios atributos de un elemento de nodo
DATA: ls_ TYPE wd_this->element_. ls_- = ...... ‐ lo_el_-> set_static_attributes( EXPORTING static_attrs = ls_ ).
© Copyright . Reservados todos los derechos.
387
Capítulo 12: Programación de contextos y controladores
388
© Copyright . Reservados todos los derechos.
Capítulo 12 Ejercicio 20 Acceso al contexto en tiempo de ejecución
Ejemplo empresarial Desea desarrollar una aplicación Web Dynpro que visualice valores predefinidos en los campos de entrada de la primera vista en tiempo de ejecución. Modelo: NET310_UI_S1 Solución: NET310_CONR_S1 Tarea 1 Copie su componente Web Dynpro ZNET310_UI1_## o el modelo NET310_UI_S1 en el componente Web Dynpro ZNET310_CONR1_##. Cree una aplicación para acceder a este componente. 1. Copie el modelo. 2. Cree una aplicación Web Dynpro para acceder al nuevo componente.
Tarea 2 Coloque AA como valor predeterminado del campo que visualiza el ID de transportista en INPUT_VIEW. 1. Implemente el método WDDOINIT del controlador de vistas; utilice el asistente de codificación Web Dynpro para establecer el valor predeterminado del atributo de contexto FLIGHTINFO.CARRID. 2. Active sus cambios y pruebe su aplicación.
Tarea 3 Ahora establezca valores por defecto para todos los campos de entrada antes de que se visualice la vista. Coloque LH como el valor predeterminado del campo que visualiza el ID de transportista y coloque 0400 como el valor predeterminado del campo que visualiza el número de conexión. 1. Convierta en comentario el código que agregó en la última tarea. 2. Utilice el asistente de codificación Web Dynpro para establecer los valores predefinidos de los atributos de contexto FLIGHTINFO.CARRID y FLIGHTINFO.CONNID en un paso. 3. Active sus cambios y pruebe su aplicación.
© Copyright . Reservados todos los derechos.
389
Capítulo 12 Solución 20 Acceso al contexto en tiempo de ejecución
Ejemplo empresarial Desea desarrollar una aplicación Web Dynpro que visualice valores predefinidos en los campos de entrada de la primera vista en tiempo de ejecución. Modelo: NET310_UI_S1 Solución: NET310_CONR_S1 Tarea 1 Copie su componente Web Dynpro ZNET310_UI1_## o el modelo NET310_UI_S1 en el componente Web Dynpro ZNET310_CONR1_##. Cree una aplicación para acceder a este componente. 1. Copie el modelo. a) En la pantalla Navegador de objetos, seleccione el componente Web DynproZNET310_UI1_## y el pulsador Otro objeto en la barra del explorador Web Dynpro Explorer. b) En la pantalla Explorador Web Dynpro: Visualizar componente, seleccione Copiar. c) En la ventana de diálogo Copiar componente Web Dynpro, introduzca ZNET310_CONR1_## en el campo Nombre de la copia. d) Seleccione Continuar. e) Grabe las entradas. 2. Cree una aplicación Web Dynpro para acceder al nuevo componente. a) Realice este paso como en los ejercicios anteriores.
Tarea 2 Coloque AA como valor predeterminado del campo que visualiza el ID de transportista en INPUT_VIEW. 1. Implemente el método WDDOINIT del controlador de vistas; utilice el asistente de codificación Web Dynpro para establecer el valor predeterminado del atributo de contexto FLIGHTINFO.CARRID. a) En la pantalla Explorador Web Dynpro: Modificar aplicación Web Dynpro, para el componente ZNET310_CONR1_##, seleccione la vista INPUT_VIEW y seleccione la etiqueta Métodos. b) En la columna Método, haga doble clic en WDDOINIT y seleccione el pulsador asistente de codificación Web Dynpro.
390
© Copyright . Reservados todos los derechos.
Lección: Utilización de métodos de controlador para acceder al contexto en tiempo de ejecución
c) En la ventana de diálogo Estructura de la sentencia Web Dynpro, seleccione el botón de selección Establecer y seleccione el pulsador Contexto. d) En la ventana de diálogo CONTEXT_VIEWER, seleccione el atributo CARRID. e) Seleccione Continuar. f) Antes del método SET_ATTRIBUTE, que el asistente de codificación debería haber insertado, establezca el valor de la variable LV_CARRID en AA. g) Consulte el código fuente que se proporciona al final de esta tarea. 2. Active sus cambios y pruebe su aplicación. a) Realice este paso como en los ejercicios anteriores. El campo de formulario que visualiza el transportista debe mostrar el valor AA. El código fuente es el siguiente: View INPUT_VIEW, Method WDDOINIT, Task 1 METHOD DATA DATA DATA DATA
wddoinit . lo_nd_flightinfo lo_el_flightinfo ls_flightinfo lv_carrid
TYPE TYPE TYPE TYPE
REF TO if_wd_context_node. REF TO if_wd_context_element. wd_this->element_flightinfo. wd_this->element_flightinfo-carrid.
* navigate from CONTEXT to FLIGHTINFO via lead selection lo_nd_flightinfo = wd_context->get_child_node( name = wd_this->wdctx_flightinfo ). * get element via lead selection lo_el_flightinfo = lo_nd_flightinfo->get_element( ). * set single attribute lo_el_flightinfo->set_attribute( name = `CARRID` value = `AA` ). ENDMETHOD.
Tarea 3 Ahora establezca valores por defecto para todos los campos de entrada antes de que se visualice la vista. Coloque LH como el valor predeterminado del campo que visualiza el ID de transportista y coloque 0400 como el valor predeterminado del campo que visualiza el número de conexión. 1. Convierta en comentario el código que agregó en la última tarea. a) Consulte el código fuente que se proporciona al final de esta tarea. 2. Utilice el asistente de codificación Web Dynpro para establecer los valores predefinidos de los atributos de contexto FLIGHTINFO.CARRID y FLIGHTINFO.CONNID en un paso. a) En la vista INPUT_VIEW del componente ZNET310_CONR1_##, seleccione la etiqueta Métodos y haga doble clic en el método WDDOINIT. b) Seleccione el pulsador Asistente de codificación Web Dynpro.
© Copyright . Reservados todos los derechos.
391
Capítulo 12: Programación de contextos y controladores
c) En la ventana de diálogo Estructura de la sentencia Web Dynpro, seleccione el botón de selección Establecer y seleccione el pulsador Contexto. d) En la ventana de diálogo CONTEXT_VIEWER, seleccione el nodo FLIGHTINFO. e) Seleccione Continuar. f) Antes del método SET_STATIC_ATTRIBUTES, el cual el asistente de codificación debería haber insertado, rellene la estructura LS_FLIGHTINFO de la siguiente manera: ls_flightinfo-carrid = 'LH'. ls_flightinfo-connid = '0400'. g) El código fuente es el siguiente: View INPUT_VIEW, Method WDDOINIT, Task 2 METHOD wddoinit . DATA DATA DATA DATA
lo_nd_flightinfo lo_el_flightinfo ls_flightinfo lv_carrid
TYPE TYPE TYPE TYPE
REF TO if_wd_context_node. REF TO if_wd_context_element. wd_this->element_flightinfo. wd_this->element_flightinfo-carrid.
* navigate from CONTEXT to FLIGHTINFO via lead selection lo_nd_flightinfo = wd_context->get_child_node( name = wd_this->wdctx_flightinfo ). * get element via lead selection lo_el_flightinfo = lo_nd_flightinfo->get_element( ). ** set single attribute * lo_el_flightinfo->set_attribute( * name = `CARRID` * value = `AA` ). ls_flightinfo-carrid = 'LH'. ls_flightinfo-connid = '0400'. * set all declared attributes lo_el_flightinfo->set_static_attributes( static_attributes = ls_flightinfo ). ENDMETHOD. 3. Active sus cambios y pruebe su aplicación. a) Realice este paso como en los ejercicios anteriores. El campo de formulario que visualiza el transportista debe mostrar el valor AA.
392
© Copyright . Reservados todos los derechos.
Lección: Utilización de métodos de controlador para acceder al contexto en tiempo de ejecución
RESUMEN DE LA LECCIÓN Ahora podrá: ●
Acceder al contexto de un controlador
●
Acceder a los elementos de nodo de contexto
© Copyright . Reservados todos los derechos.
393
Capítulo 12 Lección 3 Adición de elementos nuevos a un nodo de contexto
RESUMEN DE LA LECCIÓN Esta lección explica cómo agregar elementos nuevos a un nodo de contexto. Ejemplo empresarial Ya sabe cómo leer y modificar la información almacenada en el contexto de controlador. Sabe cómo leer y modificar los datos ya almacenados en el contexto de controlador, pero necesita entender cómo agregar nuevos elementos al contexto para proporcionar los datos para un elemento de UI Table. Por este motivo, se requieren los siguientes conocimientos: ●
Cómo agregar elementos nuevos a un nodo de contexto
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Agregar elementos nuevos a un nodo de contexto
Adición de elementos nuevos a un nodo de contexto El proceso de agregar un nuevo elemento a un nodo es como el proceso de agregar una nueva fila a una tabla interna en el que primero define los valores de celda de un área de trabajo que tiene el tipo de fila correcto y luego inserta el área de trabajo en la tabla interna. Usted agrega un nuevo elemento a un nodo con los siguientes pasos: 1. Crear un elemento que se pueda agregar a un nodo de contexto específico. 2. Definir los valores de atributo correspondientes. 3. Agregar el elemento nuevo al nodo de contexto.
394
© Copyright . Reservados todos los derechos.
Lección: Adición de elementos nuevos a un nodo de contexto
Obtener la referencia a un nodo de contexto.
Figura 205: Obtener la referencia a un nodo de contexto.
Para crear un elemento que pueda añadirse a un nodo de contexto específico, primero debe determinarse la referencia a este nodo. Puede hacer esto mediante el método get_child_node( ) del atributo estándar WD_CONTEXT, señalando al nodo raíz de contexto. Una vez obtenida esta referencia, se utiliza el método create_element( ) para crear el elemento nuevo. Los valores de atributo se pueden proporcionar mediante el parámetro static_attribute_values del método create_element( ) o llamando por separado a los métodos set_attribute( ) o set_static_attributes( ).
Atención: El elemento nuevo todavía no forma parte del nodo de contexto.
© Copyright . Reservados todos los derechos.
395
Capítulo 12: Programación de contextos y controladores
Creación de un elemento de nodo nuevo
Figura 206: Creación de un elemento de nodo nuevo
La figura muestra el llamado del método create_element( ) para crear y devolver la referencia de un nuevo elemento. Establecimiento de los valores de atributo del elemento nuevo
Figura 207: Establecimiento de los valores de atributo del elemento nuevo
396
© Copyright . Reservados todos los derechos.
Lección: Adición de elementos nuevos a un nodo de contexto
La figura muestra el uso del método set_attribute( ) para proporcionar los valores de los atributos del elemento recientemente creado. Vinculación de un elemento a un nodo de contexto
Figura 208: Vinculación de un elemento a un nodo de contexto
El elemento recientemente creado ahora debe añadirse al nodo del contexto. Esto se hace llamando el método bind_element( ) para el nodo en cuestión. El método bind_element( ) tiene los siguientes parámetros de importación: El parámetro new_item
●
La referencia del elemento se entrega a través de este parámetro ●
El parámetro set_initial_elements Este parámetro define si el elemento nuevo se añade simplemente a la serie de elementos (valor = abap_false) o si sustituye a todos los elementos existentes de la serie (valor = abap_true).
© Copyright . Reservados todos los derechos.
397
Capítulo 12: Programación de contextos y controladores
Asociación de una estructura a un nodo de contexto
Figura 209: Asociación de una estructura a un nodo de contexto
En los programas ABAP, los sets de datos se gestionan como estructuras. Para visualizar el contenido de la estructura en la UI, el contenido de la estructura debe copiarse en un elemento de contexto. Esto significa que debe definirse un elemento nuevo, deben establecerse los valores de atributo y debe asociarse el elemento al nodo de contexto apropiado. Existe una manera más fácil de copiar el contenido de la estructura como elemento nuevo en el nodo de contexto. En lugar de utilizar el método bind_element( ) y de enviar la referencia del elemento, puede utilizar el método bind_structure( ) con el parámetro new_item para enviar la estructura. La serie existente se puede ampliar o sustituir mediante el parámetro set_initial_elements.
398
© Copyright . Reservados todos los derechos.
Lección: Adición de elementos nuevos a un nodo de contexto
Asociación de una tabla interna a un nodo de contexto
Figura 210: Asociación de una tabla interna a un nodo de contexto
Varios sets de datos con estructuras idénticas se gestionan como tablas internas en programas ABAP. No obstante, para poder visualizar los sets de datos en la UI, copie el contenido de la tabla interna en tantos elementos de contexto como filas haya en la tabla interna. La mejor forma de añadir muchos elementos nuevos a un nodo de contexto es utilizar el método bind_table( ). La tabla interna se envía mediante el parámetro new_items. La serie existente se puede ampliar o sustituir (parámetro set_initial_elements). Eliminación de elementos de un nodo de contexto Para eliminar un elemento de una serie, llame el método remove_element( ). Envíe la referencia al elemento mediante el parámetro element. Para añadir o eliminar elementos del contexto, utilice los siguientes métodos: Medida
Método
Cree un nuevo elemento.
lo_el_ = lo_nd_->create_element( ).
Añadir el elemento a la serie
lo_nd_->bind_element( new_item = lo_el_ set_initial_elements = abap_false ).
© Copyright . Reservados todos los derechos.
399
Capítulo 12: Programación de contextos y controladores
Medida Asociar la estructura ls_ a la serie
Método DATA: ls_ TYPE wd_this->element_. ... lo_nd_->bind_structure( new_item = ls_ set_initial_elements = abap_false ).
Asociar la tabla interna lt_ a la serie
DATA: lt_ TYPE wd_this->elements_. ... lo_nd_->bind_table( new_items = lt_ set_initial_elements = abap_false ).
Eliminar el elemento de la serie
400
lo_nd_->remove_element( element = lo_el_ ).
© Copyright . Reservados todos los derechos.
Capítulo 12 Ejercicio 21 Visualizar datos en masa mediante tablas
Ejemplo empresarial Desea desarrollar una aplicación Web Dynpro en la que el usuario pueda introducir criterios de selección en la primera vista. Cuando el usuario selecciona un pulsador, la aplicación lee los vuelos relacionados de la base de datos y navega a la segunda vista en la que se visualizan como tabla los vuelos seleccionados. Modelo: NET310_CONR_S1 Solución: NET310_CONR_S2 Tarea 1 Copie su componente Web Dynpro ZNET310_CONR1_## o el modelo NET310_CONR_S1 en el componente Web Dynpro ZNET310_CONR2_##. Cree una nueva aplicación para acceder a este componente. 1. Copie el modelo. 2. Cree una nueva aplicación para acceder a su componente.
Tarea 2 En el contexto del controlador de componentes, cree un nuevo nodo de contexto para almacenar sets de datos para los vuelos leídos desde la tabla de base de datos SFLIGHT. Copie este nodo de contexto en el contexto de la vista OUTPUT_VIEW y asigne los nodos de contexto. 1. En el contexto de controlador de componentes, cree un nuevo nodo de contexto (nombre propuesto: FLIGHTTAB) con referencia a la estructura de Dictionary ABAP SFLIGHT y cardinalidad 0...n. El nodo deberá contener los siguientes atributos: ●
CARRID
●
CONNID
●
FLDATE
●
PLANETYPE
●
SEATSMAX
●
SEATSOCC
2. Copie y asigne el nodo de contexto nuevo en el contexto de la vista OUTPUT_VIEW.
Tarea 3
© Copyright . Reservados todos los derechos.
401
Capítulo 12: Programación de contextos y controladores
Amplíe el layout de la vista OUTPUT_VIEW para visualizar los datos sobre lo vuelos en una tabla. 1. Utilice el asistente de codificación Web Dynpro para crear una tabla con vinculación al nodo de contexto FLIGHTTAB.
Tarea 4 Cree un método en el controlador de componentes en el que pueda seleccionar vuelos desde la tabla de base de datos SFLIGHT y almacenarlos en una tabla interna. Utilice el método estático CL_NET310_FLIGHTMODEL=>READ_FLIGHTS( ) para recopilar los datos. Almacene el resultado en el nodo de contexto FLIGHTTAB. 1. Cree un método nuevo en el controlador de componentes (nombre: FLIGHTTAB_FILL). 2. Utilice el asistente de codificación Web Dynpro para leer la entrada de usuario desde el elemento en la selección de leads del nodo FLIGHTINFO. 3. Cree una tabla interna (nombre: LT_FLIGHTTAB) del tipo de tabla NET310_T_SFLIGHT. Utilice el método estático CL_NET310_FLIGHTMODEL=>READ_FLIGHTS( ) para rellenar la tabla interna (parámetro de exportación ET_FLIGHTS). Utilice CARRID y CONNID ingresados por el usuario para limitar la selección de datos. 4. Utilice el asistente de codificación para insertar el código necesario para almacenar el contenido de la tabla interna en el nodo de contexto FLIGHTTAB.
Tarea 5 Asegúrese de que su nuevo método de controlador de componentes se ejecuta después de la navegación, inmediatamente antes de que se visualice la vista OUTPUT_VIEW. 1. Trate el método HANDLEIN_DEFAULT( ) de la vista OUTPUT_VIEW y utilice el asistente de codificación Web Dynpro para implementar una llamada del método de controlador de componentes FLIGHTTAB_FILL( ).
402
© Copyright . Reservados todos los derechos.
Capítulo 12 Solución 21 Visualizar datos en masa mediante tablas
Ejemplo empresarial Desea desarrollar una aplicación Web Dynpro en la que el usuario pueda introducir criterios de selección en la primera vista. Cuando el usuario selecciona un pulsador, la aplicación lee los vuelos relacionados de la base de datos y navega a la segunda vista en la que se visualizan como tabla los vuelos seleccionados. Modelo: NET310_CONR_S1 Solución: NET310_CONR_S2 Tarea 1 Copie su componente Web Dynpro ZNET310_CONR1_## o el modelo NET310_CONR_S1 en el componente Web Dynpro ZNET310_CONR2_##. Cree una nueva aplicación para acceder a este componente. 1. Copie el modelo. a) Realice este paso como en los ejercicios anteriores. 2. Cree una nueva aplicación para acceder a su componente. a) Realice este paso como en los ejercicios anteriores.
Tarea 2 En el contexto del controlador de componentes, cree un nuevo nodo de contexto para almacenar sets de datos para los vuelos leídos desde la tabla de base de datos SFLIGHT. Copie este nodo de contexto en el contexto de la vista OUTPUT_VIEW y asigne los nodos de contexto. 1. En el contexto de controlador de componentes, cree un nuevo nodo de contexto (nombre propuesto: FLIGHTTAB) con referencia a la estructura de Dictionary ABAP SFLIGHT y cardinalidad 0...n. El nodo deberá contener los siguientes atributos: ●
CARRID
●
CONNID
●
FLDATE
●
PLANETYPE
●
SEATSMAX
●
SEATSOCC
a) Realice este paso como en los ejercicios anteriores.
© Copyright . Reservados todos los derechos.
403
Capítulo 12: Programación de contextos y controladores
2. Copie y asigne el nodo de contexto nuevo en el contexto de la vista OUTPUT_VIEW. a) Realice este paso como en los ejercicios anteriores.
Tarea 3 Amplíe el layout de la vista OUTPUT_VIEW para visualizar los datos sobre lo vuelos en una tabla. 1. Utilice el asistente de codificación Web Dynpro para crear una tabla con vinculación al nodo de contexto FLIGHTTAB. a) En la pantalla Explorador Web Dynpro: Modificar vista de ZNET310_CONR2_##, para la vista OUTPUT_VIEW, seleccione la etiqueta Layout y luego ROOTUIELEMENTCONTAINER. b) Seleccione el pulsador Asistente de codificación Web Dynpro. c) En la ventana de diálogo galería de modelos, seleccione el modelo Tabla. d) En la ventana de diálogo Crear vinculación de contexto para la tabla "TABLE", seleccione el pulsador Contexto y haga doble clic en el nodo de contexto FLIGHTTAB. Seleccione Continuar. e) En la pantalla de resumen OUTPUT_VIEW, en Propiedades para el elemento de UI Table, introduzca los siguientes datos: Nombre del campo
Valor
Datos de Layout
RowHeadData
ancho
100%
f) Grabe las entradas.
Tarea 4 Cree un método en el controlador de componentes en el que pueda seleccionar vuelos desde la tabla de base de datos SFLIGHT y almacenarlos en una tabla interna. Utilice el método estático CL_NET310_FLIGHTMODEL=>READ_FLIGHTS( ) para recopilar los datos. Almacene el resultado en el nodo de contexto FLIGHTTAB. 1. Cree un método nuevo en el controlador de componentes (nombre: FLIGHTTAB_FILL). a) En la pantalla Explorador Web Dynpro: Modificar controlador de ZNET310_CONR2_##, seleccione la etiqueta Métodos en el controlador de componentes. b) En la columna Método, introduzca FLIGHTTAB_FILL. 2. Utilice el asistente de codificación Web Dynpro para leer la entrada de usuario desde el elemento en la selección de leads del nodo FLIGHTINFO. a) Haga doble clic en el método FLIGHTTAB_FILL para navegar a la implementación y seleccione el pulsador asistente de codificación Web Dynpro. b) En la etiqueta Contexto de la ventana de diálogo Estructura de la sentencia Web Dynpro, seleccione el botón de selección Leer.
404
© Copyright . Reservados todos los derechos.
Lección: Adición de elementos nuevos a un nodo de contexto
c) Seleccione el pulsador Contexto y haga doble clic en el nodo FLIGHTINFO. d) Seleccione Continuar. e) Grabe las entradas. 3. Cree una tabla interna (nombre: LT_FLIGHTTAB) del tipo de tabla NET310_T_SFLIGHT. Utilice el método estático CL_NET310_FLIGHTMODEL=>READ_FLIGHTS( ) para rellenar la tabla interna (parámetro de exportación ET_FLIGHTS). Utilice CARRID y CONNID ingresados por el usuario para limitar la selección de datos. a) En el método FLIGHTTAB_FILL, trate el código fuente generado para crear la tabla. b) Consulte el código fuente que se proporciona al final del ejercicio. 4. Utilice el asistente de codificación para insertar el código necesario para almacenar el contenido de la tabla interna en el nodo de contexto FLIGHTTAB. a) En la pantalla Explorador Web Dynpro: Modificar el controlador para ZNET310_CONR2_##, coloque el cursor después del código que ya agregó y seleccione el pulsador asistente de codificación Web Dynpro. b) En la ventana de diálogo Estructura de la sentencia Web Dynpro, seleccione el botón de selección Establecer y la casilla de selección Operación como tabla. c) Seleccione el pulsador Contexto y haga doble clic en el nodo FLIGHTTAB. d) Seleccione Continuar. e) En el método FLIGHTTAB_FILL, corrija el código fuente generado. Envíe la tabla interna LT_FLIGHTTAB al método BIND_TABLE( ). f) Grabe las entradas. g) Consulte el código fuente que se proporciona al final del ejercicio.
Tarea 5 Asegúrese de que su nuevo método de controlador de componentes se ejecuta después de la navegación, inmediatamente antes de que se visualice la vista OUTPUT_VIEW. 1. Trate el método HANDLEIN_DEFAULT( ) de la vista OUTPUT_VIEW y utilice el asistente de codificación Web Dynpro para implementar una llamada del método de controlador de componentes FLIGHTTAB_FILL( ). a) En la pantalla Explorador Web Dynpro: Modificar vista de ZNET310_CONR2_##, para la vista OUTPUT_VIEW, seleccione la etiqueta Métodos. b) Haga doble clic en el método HANDLEIN_DEFAULT. c) Seleccione el pulsador Asistente de codificación Web Dynpro. d) En la ventana de diálogo Estructura de la sentencia Web Dynpro, seleccione la etiqueta General. e) Seleccione el botón de selección Llamada de método en controlador utilizado e introduzca los siguientes datos:
© Copyright . Reservados todos los derechos.
405
Capítulo 12: Programación de contextos y controladores
Nombre del campo
Valor
Nombre de componente
ZNET310_CONR2_##
Nombre de controlador
COMPONENTCONTROLLER
Nombre de método
FLIGHTTAB_FILL
f) Seleccione Continuar. g) Grabe las entradas. h) Consulte el código fuente que se proporciona al final del ejercicio. El código fuente es el siguiente: Comp. Controller, Method FLIGTHTAB_FILL METHOD flighttab_fill . DATA DATA DATA DATA DATA
lo_nd_flightinfo lo_el_flightinfo ls_flightinfo lt_flighttab lo_nd_flighttab
TYPE REF TO if_wd_context_node. TYPE REF TO if_wd_context_element. TYPE wd_this->element_flightinfo. TYPE net310_t_sflight. TYPE REF TO if_wd_context_node.
* navigate from CONTEXT to FLIGHTINFO via lead selection lo_nd_flightinfo = wd_context->get_child_node( name = wd_this->wdctx_flightinfo ). * get element via lead selection lo_el_flightinfo = lo_nd_flightinfo->get_element( ). * get all declared attributes lo_el_flightinfo->get_static_attributes( IMPORTING static_attributes = ls_flightinfo ). * read all flights related to CARRID and CONNID entered by user cl_net310_flightmodel=>read_flights( EXPORTING iv_carrid = ls_flightinfo-carrid iv_connid = ls_flightinfo-connid IMPORTING et_flights = lt_flighttab ). * navigate from CONTEXT to FLIGHTTAB via lead selection lo_nd_flighttab = wd_context->get_child_node( name = wd_this->wdctx_flighttab ). * bind table to context node FLIGHTTAB lo_nd_flighttab->bind_table( new_items = lt_flighttab set_initial_elements = abap_true ). ENDMETHOD.
406
© Copyright . Reservados todos los derechos.
Lección: Adición de elementos nuevos a un nodo de contexto
View OUTPUT_VIEW, Method HANDLEIN_DEFAULT METHOD handlein_default . DATA lo_componentcontroller TYPE REF TO ig_componentcontroller . lo_componentcontroller = wd_this->get_componentcontroller_ctr( ). lo_componentcontroller->flighttab_fill( ). ENDMETHOD.
© Copyright . Reservados todos los derechos.
407
Capítulo 12: Programación de contextos y controladores
RESUMEN DE LA LECCIÓN Ahora podrá: ●
408
Agregar elementos nuevos a un nodo de contexto
© Copyright . Reservados todos los derechos.
Capítulo 12 Lección 4 Implementación de las funciones de suministro
RESUMEN DE LA LECCIÓN En este módulo se explica cómo se implementan funciones de suministro. Ejemplo empresarial Quiere visualizar una tabla de reservas debajo de la tabla de vuelos existente en su componente Web Dynpro. Las reservas que se visualizarán en esta tabla deberían ser reservas relacionadas con el vuelo seleccionado por el usuario en la primera tabla, y las reservas deberían cambiar si el usuario elige un vuelo diferente. Para lograr esto, necesita asignar una función de suministro en el nodo de contexto BOOKINGS. Por este motivo, se requieren los siguientes conocimientos: ●
Cómo utilizar funciones de suministro
OBJETIVOS DE LA LECCIÓN Después de completar esta lección, podrá: ●
Utilizar funciones de suministro
© Copyright . Reservados todos los derechos.
409
Capítulo 12: Programación de contextos y controladores
410
© Copyright . Reservados todos los derechos.
Capítulo 12 Ejercicio 22 Implementar las funciones de suministro
Ejemplo empresarial Usted desea desarrollar una aplicación Web Dynpro con una vista que muestre dos tablas, una lista de vuelos y una lista de reservas. Los datos visualizados en la segunda tabla deberán depender de la fila seleccionada en la primera tabla. Desea utilizar una función de suministro para asegurarse de que los datos de la segunda tabla se modifiquen cuando el usuario seleccione una fila diferente en la primera tabla. Modelo: NET310_CONR_S2 Solución: NET310_CONR_S3 Utilice funciones de suministro llenar los nodos de contexto. Tarea 1 Copie su componente Web Dynpro ZNET310_CONR2_## o el modelo NET310_CONR_S2 en el componente Web Dynpro ZNET310_CONR3_##. Cree una nueva aplicación para acceder a su componente. 1. Copie el modelo. 2. Cree una nueva aplicación para acceder a su componente.
Tarea 2 En el contexto de controlador de componentes, cree un nuevo nodo de contexto como un subnodo del nodo FLIGHTTAB. Este nuevo nodo de contexto debe almacenar reservaciones leídas desde la tabla de base de datos SBOOK. Actualice la asignación de nodo de contexto FLIGHTTAB en la vista OUTPUT_VIEW. 1. En el contexto de controlador de componentes, cree un nuevo nodo de contexto (BOOKINGTAB) como un subnodo del nodo FLIGHTTAB. Establezca Estructura de diccionario = SBOOK y Cardinalidad = 0..n. El nodo debe incluir los atributos BOOKID, CUSTOMID, CUSTTYPE, LUGGWEIGHT, WUNIT, CLASS y PASSNAME. 2. Actualice la asignación para el nodo de contexto FLIGHTTAB en el contexto de vista OUTPUT_VIEW. Tarea 3 Visualice las reservas en una segunda tabla ubicada debajo de la tabla de vuelos. 1. Utilice el asistente de codificación Web Dynpro para crear una tabla con vinculación al nodo de contexto BOOKINGTAB. Tarea 4
© Copyright . Reservados todos los derechos.
411
Capítulo 12: Programación de contextos y controladores
Cree e implemente una función de suministro para llenar el subnodo BOOKINGTAB de acuerdo con el elemento en selección de leads del nodo FLIGHTTAB. 1. En el contexto de controlador de componente, asigne una función de suministro (BOOKINGS_READ) al nodo BOOKINGTAB. 2. El método de suministro incluye código fuente con comentarios. Elimine los comentarios de las siguientes sentencias: ●
La declaración de la estructura LS_PARENT_ATTRIBUTES
●
La llamada del método GET_STATIC_ATTRIBUTES() para el elemento superior
●
La declaración de tabla interna LT_BOOKINGTAB
●
La llamada de método BIND_TABLE() utilizada para asociar la tabla LT_BOOKINGTAB al nodo de contexto
El resto de las líneas con comentarios se pueden eliminar. 3. Llame al método estático CL_NET310_FLIGHTMODEL=>READ_BOOKINGS() para leer todas las reservas para el vuelo seleccionado. Utilice los atributos CARRID, CONNID y FLDATE del elemento superior para limitar la selección de datos Modifique el tipo de la tabla interna LT_BOOKINGTAB por el tipo del parámetro RT_BOOKINGS que retornó el método READ_BOOKINGS( ).
412
© Copyright . Reservados todos los derechos.
Capítulo 12 Solución 22 Implementar las funciones de suministro
Ejemplo empresarial Usted desea desarrollar una aplicación Web Dynpro con una vista que muestre dos tablas, una lista de vuelos y una lista de reservas. Los datos visualizados en la segunda tabla deberán depender de la fila seleccionada en la primera tabla. Desea utilizar una función de suministro para asegurarse de que los datos de la segunda tabla se modifiquen cuando el usuario seleccione una fila diferente en la primera tabla. Modelo: NET310_CONR_S2 Solución: NET310_CONR_S3 Utilice funciones de suministro llenar los nodos de contexto. Tarea 1 Copie su componente Web Dynpro ZNET310_CONR2_## o el modelo NET310_CONR_S2 en el componente Web Dynpro ZNET310_CONR3_##. Cree una nueva aplicación para acceder a su componente. 1. Copie el modelo. a) Realice este paso como en los ejercicios anteriores. 2. Cree una nueva aplicación para acceder a su componente. a) Realice este paso como en los ejercicios anteriores.
Tarea 2 En el contexto de controlador de componentes, cree un nuevo nodo de contexto como un subnodo del nodo FLIGHTTAB. Este nuevo nodo de contexto debe almacenar reservaciones leídas desde la tabla de base de datos SBOOK. Actualice la asignación de nodo de contexto FLIGHTTAB en la vista OUTPUT_VIEW. 1. En el contexto de controlador de componentes, cree un nuevo nodo de contexto (BOOKINGTAB) como un subnodo del nodo FLIGHTTAB. Establezca Estructura de diccionario = SBOOK y Cardinalidad = 0..n. El nodo debe incluir los atributos BOOKID, CUSTOMID, CUSTTYPE, LUGGWEIGHT, WUNIT, CLASS y PASSNAME. a) Realice este paso como en los ejercicios anteriores. 2. Actualice la asignación para el nodo de contexto FLIGHTTAB en el contexto de vista OUTPUT_VIEW. a) En la pantalla Explorador Web Dynpro: Modificar controlador de ZNET310_CONR3_##, seleccione OUTPUT_VIEW paraZNET310_CONR3_## y seleccione la etiqueta Contexto. b) En el menú contextual del nodo raíz FLIGHTTAB seleccione Actualizar asignación.
© Copyright . Reservados todos los derechos.
413
Capítulo 12: Programación de contextos y controladores
c) En la ventana de diálogo Copiar nodos subordinados, seleccione Sí. d) Grabe las entradas. Tarea 3 Visualice las reservas en una segunda tabla ubicada debajo de la tabla de vuelos. 1. Utilice el asistente de codificación Web Dynpro para crear una tabla con vinculación al nodo de contexto BOOKINGTAB. a) En la pantalla Explorador Web Dynpro: Modificar vista de ZNET310_CONR3_##, para la vista OUTPUT_VIEW, en la etiqueta Layout y luego seleccione ROOTUIELEMENTCONTAINER. b) Seleccione el pulsador Asistente de codificación Web Dynpro. c) En la ventana de diálogo galería de modelos, seleccione el modelo Tabla. d) En la ventana de diálogo Crear vinculación de contexto para la tabla "TABLE", seleccione el pulsador Contexto y haga doble clic en el nodo BOOKINGTAB. e) Seleccione Continuar. f) En OUTPUT_VIEW, en la pantalla Propiedades para el nuevo elemento de UI TABLE_1, introduzca los siguientes datos: Nombre del campo
Valor
Datos de Layout
RowHeadData
ancho
100%
g) Grabe las entradas. Tarea 4 Cree e implemente una función de suministro para llenar el subnodo BOOKINGTAB de acuerdo con el elemento en selección de leads del nodo FLIGHTTAB. 1. En el contexto de controlador de componente, asigne una función de suministro (BOOKINGS_READ) al nodo BOOKINGTAB. a) En la pantalla Explorador Web Dynpro: Modificar controlador de ZNET310_CONR3_##, en la etiqueta Contexto de COMPONENTCONTROLLER, seleccione BOOKINGTAB. b) En la tabla del área de pantalla Propiedades de BOOKINGTAB, indique BOOKINGS_READ para la propiedad Función de suministro. c) Grabe las entradas. 2. El método de suministro incluye código fuente con comentarios. Elimine los comentarios de las siguientes sentencias:
414
●
La declaración de la estructura LS_PARENT_ATTRIBUTES
●
La llamada del método GET_STATIC_ATTRIBUTES() para el elemento superior
●
La declaración de tabla interna LT_BOOKINGTAB
© Copyright . Reservados todos los derechos.
Lección: Implementación de las funciones de suministro
●
La llamada de método BIND_TABLE() utilizada para asociar la tabla LT_BOOKINGTAB al nodo de contexto
El resto de las líneas con comentarios se pueden eliminar. a) Consulte el código fuente que se proporciona al final del ejercicio. 3. Llame al método estático CL_NET310_FLIGHTMODEL=>READ_BOOKINGS() para leer todas las reservas para el vuelo seleccionado. Utilice los atributos CARRID, CONNID y FLDATE del elemento superior para limitar la selección de datos Modifique el tipo de la tabla interna LT_BOOKINGTAB por el tipo del parámetro RT_BOOKINGS que retornó el método READ_BOOKINGS( ). a) Consulte el código fuente que se proporciona al final del ejercicio. El código fuente es el siguiente: Comp. Controller, Method BOOKINGS_READ METHOD bookings_read . DATA ls_parent_attributes TYPE wd_this->element_flighttab. DATA lt_bookingtab TYPE net310_t_sbook. * get all static attributes of parent element parent_element->get_static_attributes( IMPORTING static_attributes = ls_parent_attributes ). * read related bookings lt_bookingtab = cl_net310_flightmodel=>read_bookings( iv_carrid = ls_parent_attributes-carrid iv_connid = ls_parent_attributes-connid iv_fldate = ls_parent_attributes-fldate ). * bind all the elements node->bind_table( new_items = lt_bookingtab set_initial_elements = abap_true ). ENDMETHOD.
© Copyright . Reservados todos los derechos.
415
Capítulo 12: Programación de contextos y controladores
RESUMEN DE LA LECCIÓN Ahora podrá: ●
416
Utilizar funciones de suministro
© Copyright . Reservados todos los derechos.
Capítulo 12 Evaluación de la formación
1. ¿Cuáles de los siguientes son métodos en los controladores Web Dynpro? Seleccione las respuestas correctas. X
A WDDOINIT
X
B WDDOCONSTRUCTOR
X
C WDDOEXIT
X
D WDDODESTRUCTOR
2. ¿Cuáles de los siguientes tipos de métodos se pueden definir en el controlador Web Dynpro? Seleccione las respuestas correctas. X
A Funciones de suministro
X
B Programas de control de eventos
X
C Métodos estáticos
3. En la etiqueta Atributos, pueden definirse los atributos adicionales para el controlador relacionado. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
4. ¿Qué necesita para acceder a un elemento de contexto o a un atributo de contexto? Seleccione la respuesta correcta. X
A Una declaración de una relación de asociación
X
B Una referencia al nodo de contexto relacionado
X
C Una definición de variables que puedan asociarse a elementos de UI y que puedan intercambiarse fácilmente entre varios controladores
X
D Una referencia al nodo que la función de suministro modificará
© Copyright . Reservados todos los derechos.
417
Capítulo 12: Evaluación de la formación
5. ¿Qué método del nodo debe llamar para acceder a los sets de datos relacionados con varias filas de tabla que selecciona el usuario? Seleccione la respuesta correcta. X
A get_selected_elements( )
X
B get_value_attribute( )
X
C get_static_attributes( )
X
D get_child_node( )
6. Para crear un elemento que pueda añadirse a un nodo de contexto específico, primero debe determinar la referencia a este nodo. ¿Cómo podría hacerlo? Seleccione la respuesta correcta.
418
X
A Llamando al método get_child_node( ) mediante el atributo estándar WD_CONTEXT.
X
B Llamando al método wd_cpuse_( )
X
C Mediante el parámetro de la interfaz PARENT_ELEMENT
X
D Mediante el parámetro static_attribute_values
© Copyright . Reservados todos los derechos.
Capítulo 12 Respuestas a la Evaluación de la formación
1. ¿Cuáles de los siguientes son métodos en los controladores Web Dynpro? Seleccione las respuestas correctas. X
A WDDOINIT
X
B WDDOCONSTRUCTOR
X
C WDDOEXIT
X
D WDDODESTRUCTOR
2. ¿Cuáles de los siguientes tipos de métodos se pueden definir en el controlador Web Dynpro? Seleccione las respuestas correctas. X
A Funciones de suministro
X
B Programas de control de eventos
X
C Métodos estáticos
3. En la etiqueta Atributos, pueden definirse los atributos adicionales para el controlador relacionado. Indique si esta afirmación es verdadera o falsa. X
Verdadero
X
Falso
© Copyright . Reservados todos los derechos.
419
Capítulo 12: Respuestas a la Evaluación de la formación
4. ¿Qué necesita para acceder a un elemento de contexto o a un atributo de contexto? Seleccione la respuesta correcta. X
A Una declaración de una relación de asociación
X
B Una referencia al nodo de contexto relacionado
X
C Una definición de variables que puedan asociarse a elementos de UI y que puedan intercambiarse fácilmente entre varios controladores
X
D Una referencia al nodo que la función de suministro modificará
5. ¿Qué método del nodo debe llamar para acceder a los sets de datos relacionados con varias filas de tabla que selecciona el usuario? Seleccione la respuesta correcta. X
A get_selected_elements( )
X
B get_value_attribute( )
X
C get_static_attributes( )
X
D get_child_node( )
6. Para crear un elemento que pueda añadirse a un nodo de contexto específico, primero debe determinar la referencia a este nodo. ¿Cómo podría hacerlo? Seleccione la respuesta correcta.
420
X
A Llamando al método get_child_node( ) mediante el atributo estándar WD_CONTEXT.
X
B Llamando al método wd_cpuse_( )
X
C Mediante el parámetro de la interfaz PARENT_ELEMENT
X
D Mediante el parámetro static_attribute_values
© Copyright . Reservados todos los derechos.