Saltar al contenido

Agregar un controlador de eventos personalizado

En los siguientes tutoriales, aprenderá que el tiempo de ejecución de Java Java puede manejar todos los eventos CRUD (crear, leer, actualizar y eliminar) que desencadenan aplicaciones OData listas para usar. Hasta ahora, le mostraremos cómo hacer esto manualmente, para que pueda ver cómo escribir fácilmente un controlador de eventos personalizado para extender el proceso de manejo de eventos.


Paso 1: cree una clase Java para un controlador de eventos personalizado

  1. Cree un paquete de Java, creando una nueva carpeta llamada handlers sobre srv/src/main/java/com/sap/cap/productsservice.

  2. Crea un archivo de clase Java AdminService.java en el probado handlers carpeta, con el siguiente contenido y asegúrese de tener Salvar el archivo:

 package com.sap.cap.productsservice.handlers;

 import java.util.HashMap;
 import java.util.Map;

 import org.springframework.stereotype.Component;

 import com.sap.cds.services.cds.CdsCreateEventContext;
 import com.sap.cds.services.cds.CdsReadEventContext;
 import com.sap.cds.services.cds.CdsService;
 import com.sap.cds.services.handler.EventHandler;
 import com.sap.cds.services.handler.annotations.On;
 import com.sap.cds.services.handler.annotations.ServiceName;

 @Component
 @ServiceName("AdminService")
 public class AdminService implements EventHandler {

     private Map<Object, Map<String, Object>> products = new HashMap<>();

     @On(event = CdsService.EVENT_CREATE, entity = "AdminService.Products")
     public void onCreate(CdsCreateEventContext context) {
         context.getCqn().entries().forEach(e -> products.put(e.get("ID"), e));
         context.setResult(context.getCqn().entries());
     }

     @On(event = CdsService.EVENT_READ, entity = "AdminService.Products")
     public void onRead(CdsReadEventContext context) {
         context.setResult(products.values());
     }

 }

Esta clase maneja el READ y CREATE eventos centrados en el Products la entidad AdminService.

Nota de consulta de CDS (CQN) es el lenguaje común en el CAP para ejecutar preguntas sobre los servicios. Puede usarse para hablar con los servicios definidos por su modelo, pero también con servicios remotos, como la base de datos.

El controlador de eventos utiliza las siguientes API, que están disponibles para los proveedores de servicios en CAP Java:

  • Clases de manejadores de salida tienes que aplicar la interfaz del marcador EventHandler y registrarse como Spring Beans (@Component). La interfaz del marcador es importante, porque permite que un tiempo de ejecución de CAP de Java identifique estas clases entre todos los Spring Beans.
  • Métodos de manejo de salidas registrado con @On, @Before, o @After anotaciones. Cada evento, como la creación de una entidad, pasa por estos tres grados. Cada paso tiene una semántica ligeramente diferente. Aprenderá más sobre esta semántica en el tutorial más adelante.
  • La nota @ServiceName especifica el nombre del servicio predeterminado al que se aplican todos los métodos de manejo de eventos. Aquí lo tienes AdminService, ya que este también fue el nombre al definir el servicio en el modelo CDS.
  • Los métodos del controlador de eventos reciben un parámetro de contexto de evento específico del evento, que proporciona acceso a los parámetros de entrada del evento y la capacidad de establecer el resultado. Por ejemplo, veamos el CdsCreateEventContext context parámetro. El evento que estamos expandiendo es el CREATE salida. El tipo de variable de contexto es específico de esta extensión. CREATE salida. El es onCreate devuelve el método void, ya que el resultado se determina ejecutando: context.setResult(…).

Paso 2: detener la aplicación

Detenga su aplicación si todavía se está ejecutando usando CTRL+C en la terminal.

Hecho

Inicie sesión para responder la pregunta

Paso 3: reinicia la aplicación

  1. Reinicie la aplicación ejecutando el siguiente comando en la terminal:

    cd ~/projects/products-service && mvn clean spring-boot:run
    
  2. Escoger Abrir en una pestaña nueva cuando se estimula.

    abrir la aplicación en el mensaje de una nueva pestaña

    Debería abrirse una nueva pestaña del navegador con su aplicación.

    la aplicación fue abierta

Hecho

Inicie sesión para responder la pregunta

Paso 4: ingrese los datos a través de cURL

Intente ingresar algunos datos en la aplicación actual. Por ejemplo, use cURL desde una nueva terminal para ejecutar la siguiente solicitud.

  1. Puede abrir terminales seleccionando Terminal > Nueva terminal en el menú principal.

  2. Ejecute el siguiente comando en la terminal para ingresar algunos datos en la aplicación actual (mientras el proceso de la aplicación aún se está ejecutando en la otra ventana de la terminal):

    curl -X POST http://localhost:8080/odata/v4/AdminService/Products 
    -H "Content-Type: application/json" 
    -d '{"ID": 42, "title": "My Tutorial Product", "descr": "You are doing an awesome job!"}'
    

El motivo es la solicitud POST Insertar OData en la entidad Productos de servicio AdminService. Las propiedades del registro que se creará se capturan en el cuerpo de la solicitud (-d argumento en el orden curl) JSON (argumento -H Content-Type: application/json en el orden de rizo).

La respuesta al registro creado será y debería parecer similar a esta salida:

`{"@context":"$metadata#Products/$entity","ID":42,"title":"My Tutorial Product","descr":"You are doing an awesome job!"}`.

Hecho

Inicie sesión para responder la pregunta

Paso 5: lea los detalles utilizando la página de la entidad Productos

Para volver a leer los detalles, vuelva a abrir la página de bienvenida de la aplicación.

  1. Desde el menú principal, vaya a Mirar > Obtener orden para abrir la paleta de comandos.

    conseguir un pedido

  2. Mas o menos Puertos: expuestos y seleccione o ingrese 8080. Proveer app-port como descripción única. Si no ve un puerto 8080 enumerados en el Puertos: expuestos ver, usar Mirar > Obtener orden de nuevo y escribe Puertos: vista previa en lugar de. Luego haga clic en el puerto 8080 para abrir la aplicación.

    divulgación del puerto o vista previa

  3. Escoger Productos desde la página de bienvenida de la aplicación o agregue /odata/v4/AdminService/Products a la URL de la aplicación.

enlace en la página de bienvenida

Debería ver algo como esto:

Registros de entidades de productos

Este es el registro que ingresó en el paso anterior mediante el comando curl.

Si los datos no tienen el formato que se muestra en la imagen, utilice el Extensión JSON Formatter para Google Chrome u otro formateador JSON para su navegador favorito. Los datos en sí deberían ser los mismos de todos modos.

Hecho

Inicie sesión para responder la pregunta

¡Gran trabajo! Ha agregado correctamente la lógica personalizada para manejar solicitudes específicas. El siguiente tutorial le mostrará cómo ampliar la aplicación y crear el servicio del producto desde cero.

Además, utilizará una base de datos real como persistencia y verá algunas de las características que CAP Java SDK proporciona de fábrica, sin una sola línea de codificación personalizada.