
Esta es la segunda publicación de esta serie. Aquí está la publicación anterior del blog: [Get to Know RAP: Introduction]
Esta entrada de blog también sigue con una video que lo guía a través del tutorial que repasaré.
Como se mencionó en la publicación de blog anterior, nuestro objetivo es desarrollar una aplicación Fiori utilizando el modelo de programación de aplicaciones ABAP RESTful. Usaremos pasos que abarcan las 3 capas (Modelado de datos y comportamiento, servicio empresarial, Consumo de servicios).
Partiremos desde el Modelado de datos y comportamiento y trabajar nuestro camino hacia arriba. Dado que nuestro objetivo general es crear una aplicación transaccional completamente nueva para una interfaz de usuario de Fiori Elements siguiendo el enfoque de campo nuevo, crearemos todo desde cero. Con la mayoría de los nuevos desarrollos, siempre confiará en el enfoque administrado, ya que RAP Framework se hace cargo de toda la administración del objeto.
Para comenzar, seguiré los tutoriales grupales Desarrollar una aplicación Fiori utilizando el modelo de programación de aplicaciones ABAP RESTful (escenario administrado) para desarrollar una aplicación SAP Fiori de reserva de viajes. Para esta publicación de blog, le proporcionaré mi comida para llevar sobre creando persistencia de tablas y generando datos para ello.
Como mencionamos anteriormente, el modelo de datos consiste en las entidades involucradas en un escenario comercial, como VIAJES y RESERVAS, y cómo se relacionan entre sí. El modelo de programación ABAP RESTful utiliza CDS para organizar y definir el modelo de datos. Las entidades CDS son los bloques de construcción fundamentales para su aplicación.
El objeto comercial de viajes consta de tres entidades que están estructuradas en un árbol jerárquico. Cada entidad en el árbol de composición BO se modela con una entidad de vista CDS. Las entidades de negocio sobre las que vamos a trabajar en nuestros escenarios actuales son:
Entidades Editables del Objeto de Negocio
A continuación se muestra una descripción general del flujo de trabajo de desarrollo típico en RAP. El desarrollo de nuestra aplicación también se verá así.
En este ejercicio, primero crearemos una tabla de base de datos para almacenar la viajar datos. También reutilizaremos el contenido de demostración ya existente del escenario de referencia de vuelo ABAP (Agencia, Cliente y Vuelo), así como algunos más.
📝 Nota: En el escenario de referencia de vuelo ABAP para las tablas de base de datos persistentes, usamos el prefijo A_ para indicar la persistencia activa. Para obtener información detallada, consulte Convenciones de nomenclatura para objetos de desarrollo. |
Antes de comenzar, es importante conocer los requisitos previos:
Lo primero que había que hacer era crear un paquete ABAP, esto es bastante sencillo. Simplemente inicie sesión en el sistema SAP. Desde allí, selecciono la opción para crear un nuevo paquete. El sistema me solicita que proporcione un nombre y una descripción para el paquete. No olvides revisar Agregar a paquetes favoritos para que puedas acceder a él fácilmente. No tiene que ir a buscarlo en ZLOCAL, donde podría correr el riesgo de elegir accidentalmente el paquete de otra persona.
Paquete ABAP
Es importante asegurarse de que el paquete que está creando no exista ya en ZLOCAL. Esto se debe a que se comparte la versión de prueba del entorno ABAP y hay muchos paquetes disponibles. Por lo tanto, asegúrese de tener un nombre único y asegúrese de agregar un número que actualmente sea gratuito. Tuve este problema al principio cuando estaba creando mi paquete por primera vez, luego descubrí que ya lo había tomado otra persona.
Para este tutorial, decidí usar el sufijo 234 para los diversos objetos que voy a crear. Después de proporcionar el nombre y la descripción del paquete, guardo el paquete y está listo para usar. En general, este paso es sencillo y fácil de seguir.
Pasando de crear el paquete, fui y creé una tabla de base de datos para almacenar el viajar datos que se nos proporcionaron en el tutorial. El tutorial le proporcionará los pasos para crear la tabla. Al crear la tabla de la base de datos, es importante agregar su sufijo al ejemplo de código. Me tomó un tiempo darme cuenta de por qué mi código no se activaba, solo para descubrir que era porque el sufijo no se agregó al código. Me gustaría proporcionarle una explicación del código, para que esté familiarizado con los pasos.
La tabla que creé se abrirá en el editor y el campo de cliente se agregará automáticamente porque es un tabla específica del cliente.
@EndUserText.label : 'Database table for travel data 000'
@AbapCatalog.enhancementCategory : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
@AbapCatalog.dataMaintenance : #RESTRICTED
define table ztravel_000 {
key client : abap.clnt not null;
key mykey : sysuuid_x16 not null;
travel_id : /dmo/travel_id;
agency_id : /dmo/agency_id;
customer_id : /dmo/customer_id;
begin_date : /dmo/begin_date;
end_date : /dmo/end_date;
@Semantics.amount.currencyCode : 'ztravel_000.currency_code'
booking_fee : /dmo/booking_fee;
@Semantics.amount.currencyCode : 'ztravel_000.currency_code'
total_price : /dmo/total_price;
currency_code : /dmo/currency_code;
description : /dmo/description;
overall_status : /dmo/overall_status;
created_by : syuname;
created_at : timestampl;
last_changed_by : syuname;
last_changed_at : timestampl;
}
Explicación del código:
El informe de la lista de viajes actualmente no tiene datos, por lo que crearemos una clase ABAP para llenar la tabla de la base de datos con algunos datos de demostración.
Reemplazaremos el código y pegaremos el fragmento de código que se nos proporcionó. Me gustaría proporcionarle una explicación del código, para que esté familiarizado con los pasos.
CLASS zcl_generate_travel_data_000 DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_generate_travel_data_000 IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
DATA itab TYPE TABLE OF ztravel_000.
* fill internal travel table (itab)
itab = VALUE #(
( mykey = '02D5290E594C1EDA93815057FD946624' travel_id = '00000022' agency_id = '070001' customer_id = '000077' begin_date="20190624" end_date="20190628" booking_fee="60.00" total_price="750.00" currency_code="USD"
description = 'mv' overall_status="A" created_by = 'MUSTERMANN' created_at="20190612133945.5960060" last_changed_by = 'MUSTERFRAU' last_changed_at="20190702105400.3647680" )
( mykey = '02D5290E594C1EDA93815C50CD7AE62A' travel_id = '00000106' agency_id = '070005' customer_id = '000005' begin_date="20190613" end_date="20190716" booking_fee="17.00" total_price="650.00" currency_code="AFN"
description = 'Enter your comments here' overall_status="A" created_by = 'MUSTERMANN' created_at="20190613111129.2391370" last_changed_by = 'MUSTERMANN' last_changed_at="20190711140753.1472620" )
( mykey = '02D5290E594C1EDA93858EED2DA2EB0B' travel_id = '00000103' agency_id = '070010' customer_id = '000011' begin_date="20190610" end_date="20190714" booking_fee="17.00" total_price="800.00" currency_code="AFN"
description = 'Enter your comments here' overall_status="X" created_by = 'MUSTERFRAU' created_at="20190613105654.4296640" last_changed_by = 'MUSTERFRAU' last_changed_at="20190613111041.2251330" )
).
* delete existing entries in the database table
DELETE FROM ztravel_000.
* insert the new table entries
INSERT ztravel_000 FROM TABLE @itab.
* output the result as a console message
out->write( |{ sy-dbcnt } travel entries inserted successfully!| ).
ENDMETHOD.
ENDCLASS.
Código Explicación
Ahora podemos revisar los datos. Además, puede ver que se escribe un mensaje de éxito en la consola.
En esta publicación de blog, creé un paquete y luego, dentro del paquete, creé algo de persistencia. Creé una tabla de base de datos y también escribí una clase que nos permitía manipular esa tabla. En la próxima publicación del blog, definiré y expondré un modelo de datos de viaje basado en CDS y proporcionaré algunos puntos clave del tutorial.
Publicación de blog anterior:
Conozca RAP: yoIntroducción
Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010
Paseo de la Reforma 26
Colonia Juárez, Cuauhtémoc
Ciudad de México 06600
Real Cariari
Autopista General Cañas,
San José, SJ 40104
Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073