Cree un paquete de Java, creando una nueva carpeta llamada handlers
sobre srv/src/main/java/com/sap/cap/productsservice
.
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(…)
.