Objectives
After completing this lesson, you will be able to:
- Cree una tabla de base de datos.
- Genere los objetos de desarrollo para un servicio IU OData.
Creación del modelo de datos
Modelo de datos de ejemplo
El modelo de datos en este ejemplo es muy simple: hay una única tabla de base de datos que contiene detalles de las conexiones de vuelo: una aerolínea, número de vuelo, detalles del aeropuerto de salida y el destino.
Nota
No se incluyen en la figura campos adicionales que el tiempo de ejecución necesita para gestionar el control de concurrencia. Los analizaremos un poco más adelante.
Creación de una tabla de base de datos
Primero, veamos cómo crear una tabla de base de datos.
Definición de atributos de tabla básicos
Ahora veremos cómo definir atributos de tabla básicos.
Añadir definición de tabla
El siguiente vídeo muestra cómo añadir una definición de tabla.
Si no utiliza un tipo de Dictionary ABAP integrado para especificar el tipo de una columna de tabla, utilice un elemento de datos en su lugar. Los elementos de datos son objetos de Dictionary ABAP que definen el tipo de un campo individual, como UUID o código de compañía aérea. Los elementos de datos no solo contienen una descripción de tipo técnico, sino también información semántica como etiquetas de campo. Si utiliza elementos de datos para definir los tipos de columnas de tabla, el sistema puede utilizar los denominadores de campo automáticamente en la interfaz de usuario generada.
El elemento de datos de la figura Elemento de datos describe el campo de la compañía aérea. Es un campo de caracteres de longitud 3; el sistema utilizará los denominadores de campo automáticamente en la IU generada.
Para crear un nuevo elemento de datos, seleccione Fichero→Nuevo→Otro y, a continuación, escriba el elemento de datos en el campo Texto de filtro. Introduzca un nombre de paquete y el nombre del elemento de datos y, a continuación, seleccione Siguiente. Marque una orden de transporte y seleccione Finalizar.
A continuación, debe especificar un tipo de datos para el elemento de datos. Debería ser un dominio: el ejemplo reutiliza el dominio existente /DMO/CITY. Tenga en cuenta que ambos elementos de datos utilizan el mismo dominio. Esto significa que si alguien modifica posteriormente la longitud del dominio, la modificación se aplicará a todos los elementos de datos que lo utilicen.
Por último, introduzca etiquetas de campo cortas, medias y largas, y una etiqueta que se utilice para las cabeceras de columna. Más adelante, cuando genere la aplicación Elementos Fiori, el sistema utilizará estos textos automáticamente.
Cada tabla que defina debe tener una clave primaria. Se trata de una secuencia de campos al principio de la descripción de tabla que identifica cada entrada de la tabla de forma unívoca.
El primer campo de la tabla (y, por lo tanto, también el primer campo de la definición de clave) debe ser el campo de mandante y debe tener el tipo de datos abap.clnt. Además, para nuestro ejemplo es conveniente utilizar un UUID para la clave unívoca. Si utiliza el elemento de datos sysuuid_x16 para especificar el tipo de este campo, puede permitir que el tiempo de ejecución asigne automáticamente el UUID al crear un registro nuevo.
Por motivos de rastreabilidad, se recomienda almacenar información administrativa con los datos, como, por ejemplo, el usuario que ha creado o modificado los datos y los cronomarcadores para la creación y la última modificación. La tabla de base de datos que cree debe contener los campos que se muestran en la figura.
Nota
Estos campos son obligatorios para el generador que vamos a utilizar más adelante. Para que ese generador funcione correctamente, los campos también se han definido con los tipos de datos enumerados aquí.
Especialmente fieldslocal_last_changed_at y last_changed_at no son solo campos administrativos. En el modelo de programación de aplicaciones ABAP RESTful también se utilizan para el control de concurrencia.
Dado que las aplicaciones RESTful no tienen estado, no se puede garantizar la consistencia de los datos solo mediante bloqueos exclusivos. El modelo de programación de aplicaciones ABAP RESTful utiliza una mezcla de bloqueos exclusivos y ETags para evitar inconsistencias de datos. Un ETag es un campo que modifica su valor cada vez que se actualiza un conjunto de datos. Al comparar el valor del campo ETag, el framework puede garantizar que un conjunto de datos no se haya modificado desde que se leyó la última vez. Los cronomarcadores de la última modificación hacen que los campos ETag sean perfectos.
Cuando activa una tabla de base de datos en ADT, el sistema crea la tabla física correspondiente en la base de datos. Una vez hecho esto, podrá generar automáticamente los objetos adicionales que necesite para su aplicación.
Cómo crear elementos de datos
Cómo crear una tabla de base de datos
Copiar una tabla de base de datos
En los ejercicios de esta unidad, creará un servicio de IU de OData. Este servicio de IU constituirá la base de una aplicación que le permite cambiar el precio de los vuelos. En primer lugar, cree un paquete dedicado para los objetos de desarrollo necesarios. A continuación, copie una tabla de base de datos y rellénela con datos.
Tarea 1: Crear subpaquete
Cree un nuevo subpaquete bajo su propio paquete ZS4D400_## (donde ## representa su número de grupo).
El subpaquete debe tener los siguientes atributos:
| Atributo | Valor |
|---|
| Nombre | ZS4D400_##_RAP, donde ## representa su número de grupo |
| Descripción | Objetos para servicio IU OData |
| Añadir a los paquetes favoritos | Verificado |
| Paquete superior | ZS4D400_##, donde ## representa su número de grupo |
Pasos
Cree un subpaquete bajo su propio paquete ZS4D400_## (donde ## representa su número de grupo).
En el Explorador de proyectos, haga clic con el botón derecho en su paquete ABAP ZS4D400_## y seleccione Nuevo→paquete ABAP.
Introduzca el nombre del paquete ZS4D400_##_RAP, donde ## representa su número de grupo.
Introduzca la descripción Objetos para el servicio IU OData.
Marque la casilla de selección Añadir a paquetes favoritos.
Asegúrese de que el campo Paquete superior contenga el nombre de su paquete ya existente.
Seleccione Siguiente.
Asegúrese de que el componente de software está fijado en ZSTUDENTS.
Seleccione Siguiente.
Confirme la orden de transporte y seleccione Finalizar.
Tarea 2: Copiar tabla de base de datos
En el nuevo paquete, cree una copia de la tabla de base de datos /LRN/S4D400_APT. Nombre la nueva tabla de base de datos Z##FLIGHT, donde ## representa su número de grupo.
Pasos
Copie la tabla de base de datos /LRN/S4D400_APT en su propio paquete ZS4D400_##_RAP, donde ## representa su número de grupo.
Abra la definición de la tabla de base de datos /LRN/S4D400_APT.
Vincule la vista Explorador de proyectos con el editor.
En la vista Explorador de proyectos, haga clic con el botón derecho en la tabla de base de datos /LRN/S4D400_APT para abrir el menú contextual.
En el menú contextual, seleccione Duplicar....
Introduzca el nombre del paquete ZS4D400_##_RAP en el campo Paquete. En el campo Nombre, introduzca Z##FLIGHT, donde ## representa su número de grupo.
Seleccione Siguiente.
Confirme la orden de transporte y seleccione Finalizar.
Active la definición de la tabla de base de datos.
Pulse Ctrl + F3 para activar el objeto de desarrollo.
Tarea 3: Rellenar tabla de base de datos
En su paquete ZS4D400_##, cree una copia de la clase global /LRN/CL_S4D400_APT_COPY (nombre sugerido: ZCL_##_COPY). En esta copia, cambie el valor de la constante table_name por el nombre de su propia tabla de base de datos. A continuación, ejecute la clase como una aplicación de consola. Esto rellenará su tabla de base de datos con datos.
Pasos
Copie la clase /LRN/CL_S4D400_APT_COPY en una clase de su propio paquete ZS4D400_##.
Abra el código fuente de la clase global /LRN/CL_S4D400_APT_COPY.
Si es necesario, vincule la vista Explorador de proyectos con el editor.
En la vista Explorador de proyectos, haga clic con el botón derecho en la clase /LRN/CL_S4D400_APT_COPY para abrir el menú contextual.
En el menú contextual, seleccione Duplicar....
Introduzca ZS4D400_## en el campo Paquete. En el campo Nombre, introduzca ZCL_##_COPY, donde ## representa su número de grupo.
Seleccione Siguiente.
Confirme la orden de transporte y seleccione Finalizar.
En la copia, ajuste el código fuente del método IF_OO_ADT_CLASSRUN~MAIN. Modifique el valor de la constante table_name por el nombre de su propia tabla de base de datos.
Asegúrese de que el valor de la constante sea igual al nombre de su tabla de base de datos.
Active y ejecute la clase como una aplicación de consola.
Pulse Ctrl + F3 para activar la clase.
Pulse F9 para ejecutar la clase.
Verifique la vista Consola. La última salida debería ser: <...> se ha rellenado con datos. Si la salida lee <...> no es una tabla del tipo correcto. Asegúrese de que existe una tabla de base de datos con ese nombre, está activa y es una copia exacta de la tabla modelo.
El generador de objetos
Generación de objetos adicionales
Acabamos de definir una tabla de base de datos para contener nuestros datos, pero la aplicación que vamos a crear necesita más objetos que solo esta tabla. Podemos generar estos objetos utilizando un asistente en ADT.
Los objetos generados contienen toda la información necesaria para proporcionar una aplicación de trabajo con la capacidad de crear, leer, actualizar y borrar. Más adelante, también ajustaremos y ampliaremos algunos de estos objetos para cambiar la apariencia de la interfaz de usuario e implementar algunas verificaciones y cálculos.
Vea este vídeo para aprender a generar objetos adicionales.
Cómo generar los objetos adicionales
Vista previa del servicio de IU de OData
Publicar y previsualizar el servicio
Con su tabla de base de datos y el generador de objetos, puede generar todos los objetos que necesita para obtener una aplicación de elementos Fiori en funcionamiento. El único paso manual es publicar el servicio.
Debe publicar el servicio antes de poder probar la aplicación. Para ello, abra la vinculación de servicio y seleccione Publicar. Una vez hecho esto, la entidad que ha creado (en este caso, Conexión) aparece en la lista de entidades. Márquelo y seleccione Vista previa para probar la aplicación.
Probar la aplicación
Cuando selecciona Vista previa, se abre una ventana del navegador y puede crear una nueva conexión de vuelo. Sin embargo, la aplicación no implementa ninguna verificación que no sea de tipo verificaciones (por ejemplo, solo se permiten dígitos en el campo Número de vuelo).
Generar y previsualizar un servicio IU OData
En este ejercicio, genere los objetos de repository para un servicio de IU de OData y obtenga una vista previa del servicio como una aplicación SAP Fiori.
Prerrequisitos
Ha completado el ejercicio anterior. Ha creado la tabla de base de datos Z##FLIGHT (donde ## es su número de grupo) y la tabla de base de datos contiene datos.
Tarea 1: Utilizar el generador
Utilice el generador ABAP RESTful Application Programming Model→OData UI Service para generar los objetos de desarrollo necesarios en su subpaquete ZS4D400_##_RAP. Para ello, especifique los siguientes valores en el asistente:
| Campo | Valor |
|---|
| Objeto referenciado→general | Z##VUELO |
| Nombre→general del proyecto | <vacío> |
| Prefijo de artefactos→generales | <vacío> |
| Sufijo→general de artefactos | <vacío> |
| | |
| Nombre de entidad CDS→de modelo de datos de→business object | ZR_##Vuelo |
| Alias de entidad CDS→de modelo de datos de→business object | Vuelo |
| Clase de implementación→de comportamiento de→business object | ZBP_R_##FLIGHT |
| Nombre de tabla de borrador→de comportamiento de→business object | Z##FLIGHT_D |
| | |
| Nombre de entidad CDS→de entidad de proyección de servicio de→previsión de servicio | ZC_##Vuelo |
| Clase de implementación de→comportamiento de previsión de servicio→de previsión de servicio | ZBP_C_##FLIGHT |
| | |
| Nombre de definición de servicio de definición→de servicio de→servicio empresarial | ZUI_##FLIGHT_O4 |
| Servicio empresarial→Servicio Vinculación→Servicio Nombre de vinculación | ZUI_##FLIGHT_O4 |
| Tipo de vinculación→de vinculación de servicio→empresarial | OData V4: IU |
Pasos
Inicie el generador de objetos para su tabla de base de datos Z##FLIGHT (donde ## es su número de grupo).
En el Explorador de proyectos, despliegue la siguiente vía de acceso: Paquetes favoritos→ZS4D400_##→ZS4D400_##_RAP→Tablas de base de datos de→diccionario (donde ## es su número de grupo). Como alternativa, abra la definición de la tabla de base de datos Z##FLIGHT y, si es necesario, vincule la vista Explorador de proyectos con el editor.
En la vista Explorador de proyectos, haga clic con el botón derecho en la tabla de base de datos Z##FLIGHT para abrir el menú contextual.
En el menú contextual, seleccione Generar objetos de ABAP Repository....
En la ventana de diálogo, seleccione el generador.
En la parte izquierda de la ventana de diálogo, seleccione ABAP RESTful Application Programming Model→OData UI Service.
Seleccione Siguiente para navegar al siguiente paso.
Asegúrese de que los objetos de desarrollo se crean en su subpaquete ZS4D400_##_RAP.
Cuando la ventana lea Introducir paquete en la parte superior, asegúrese de que el campo Paquete contenga ZS4D400_##_RAP.
Seleccione Siguiente para navegar al siguiente paso.
Configure el generador con los datos de la tabla.
Atención
No seleccione Siguiente antes de introducir todos los datos.
Seleccione los elementos de la izquierda de la ventana de diálogo uno por uno y rellene los campos correspondientes en el panel derecho. Los valuesvalores necesarios se enumeran en la tabla anterior.
Después de introducir todos los datos, seleccione Siguiente.
Verifique los objetos de repository que se van a generar y genere los objetos.
Nota
Ten paciencia. La generación de los objetos lleva algún tiempo. Al final del proceso de generación, aparece una ventana de diálogo que le pregunta si desea abrir la vinculación de servicio generada en el editor. Confirme este diálogo haciendo clic en Abrir.
Verifique la lista de objetos de repository que se visualizan.
Cuando esté seguro de que ha introducido todos los nombres correctamente, seleccione Siguiente.
Confirme la orden de transporte y seleccione Finalizar.
Confirme la ventana de diálogo al final del proceso de generación seleccionando Abrir.
Analice la salida del generador en el Explorador de proyectos.
En el Explorador de proyectos, sitúe el cursor en el subpaquete ZS4D400_##_RAP y pulse F5 para volver a cargar el contenido del paquete.
Expanda todos los subnodos del paquete para ver los nombres de los objetos de desarrollo generados.
Tarea 2: Vista previa de la aplicación
Publique el servicio IU OData y obtenga una vista previa del resultado como una aplicación SAP Fiori.
Pasos
Publique el punto de acceso de servicio local.
Nota
La publicación del servicio puede tardar un poco.
Si aún no lo ha hecho, abra la vinculación de servicio ZUI_##FLIGHT_O4 generada.
Si la vinculación de servicio está inactiva, pulse Ctrl + F3 para activarla.
Para publicar el servicio, seleccione Publicar en el centro del editor.
Obtenga una vista previa del servicio de IU de OData como una aplicación SAP Fiori.
En la sección Detalles de versión de servicio de la derecha, seleccione Vuelo y, a continuación, Vista previa....
Resultado
Se abre una ventana del navegador con una aplicación SAP Fiori. Si se le solicita, inicie sesión en la aplicación con su usuario de sistema ABAP.
Visualice la lista de vuelos.
Seleccione Ir para visualizar la lista de vuelos almacenados en su tabla de base de datos Z##FLIGHT.
Para uno de los vuelos, vaya a la vista de detalles.
Seleccione una de las entradas de la lista para navegar a la página de objeto con detalles de ese vuelo.
Para este vuelo, cambie al modo de modificación.
Seleccione Tratar.
Introduzca algún texto en el campo Precio de vuelo, por ejemplo, a.
Introduzca un valor negativo para el precio del vuelo.