Taw12 2 Es Col10 Ilt Fv Part a4

TAW12 Programación ABAP - Avanzado Parte 2 . . MANUAL DEL PARTICIPANTE FORMACIÓN CON INSTRUCTOR . Versión del curso:

Views 468 Downloads 17 File size 15MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

  • Author / Uploaded
  • LUIS
Citation preview

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 , >, =, 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.