Obtenga datos agregados para su uso en una llamada externa.

Obtener los datos agregados para su uso en una función de dominio externo se puede realizar con la ayuda de la domain functions como se mencionó en Operaciones de Dominio.

Todas las operaciones de dominio son asíncronas y devuelven un CompletionStage. Por lo tanto, si desea utilizar el resultado de getAggregate, debe encadenar llamadas con thenCompose/thenApply para asegurarse de que no está bloqueando en ningún lugar.

A continuación se presenta un ejemplo de enviar algunos datos a un SendConnector después de que hayamos recuperado los datos agregados, ya que se requiere para completar algunos datos en el mensaje de solicitud del SendConnector.

public class SampleFraudActionAdapter implements FraudActionPort {

    private final SendConnector<FraudRequest, OlafRequest> fraudSendConnector;

    @Override
    public CompletionStage<Void> execute(CheckFraudAction action) {
        FraudRequest fraudRequest = new FraudRequest();
        fraudRequest.fiToFICustomerCreditTransfer = action.getCustomerCreditTransfer();
        return CredittransferDomain.getAggregate(action.getId())
                .thenCompose(
                        aggregate -> {
                            fraudRequest.customFields.put("mykey", aggregate.getStatus().getStatus());
                            return fraudSendConnector.send(action.getProcessingContext(), fraudRequest)
                                    .thenAccept(deliveryOutcome -> log.debug("FraudAdapter completed with {}", deliveryOutcome.getDeliveryReport().getOutcome()));
                        }
                );
    }


    private class FraudRequest {
        public FIToFICustomerCreditTransfer fiToFICustomerCreditTransfer;
        public Map<String, String> customFields;
    }
}