Documentation for a newer release is available. View Latest

Defining a Custom Multiple Duplicate Check Key Mapping

Esta página explica cómo definir un mapping para un multiple duplicate check; por ejemplo, cuando quieres realizar duplicate checks sobre un mensaje que contiene múltiples transacciones.

1. Add a mapping function

Dentro de tu proyecto MPS, agrega una Mapping Library a tu modelo. Haz clic derecho en tu modelo y elige newv2FloMapping Library.

Los datos de salida deben ser Duplicate Check Multiple Request. Este debe especificar el transactionCacheEntryType y un mapa de entradas para las que deseas realizar duplicate checks.

Imagen de una custom mapping function con todos los detalles completados

2. Use the mapping function within your flow

Dentro de tu MPS flow, haz clic izquierdo en la llamada a la acción checkMultipleDuplicate en la que quieres usar el custom mapping.

Imagen de la domain function de duplicate check seleccionada

Pulsa Ctrl+Alt+I para abrir el Inspector. Cambia el Mapping en el inspector por tu mapping function.

Imagen del custom mapping aplicado en el inspector

3. Implement your mapping adapter

Debes proporcionar una implementación Java de tu mapping function y aportarla en tu domain declaration como un adapter.

Por ejemplo:

public class CustomDuplicateCheckMappingAdapterMultiple implements CustomDuplicateCheckMappingMappingPort {

    @Override
    public CustomMultipleDuplicateMapFromPain001MappingOutput performCustomMultipleDuplicateMapFromPain001(CustomMultipleDuplicateMapFromPain001MappingParameters inputParameters) {
        // Logic to build a map of Duplicate Check Keys here
        var txnCounter = new AtomicInteger(0);
        Map<String, DuplicateCheckKey> duplicateCheckKeyMap = Optional.ofNullable(inputParameters.getPaymentInitiation())
                .map(CustomerCreditTransferInitiationV09::getPmtInf)
                .map(instruction -> instruction.stream()
                        .flatMap(CustomDuplicateCheckMappingAdapter::createCustomDuplicateCheckKeyForPain001Transaction)
                        // Using a linked hashmap to preserve order
                        .collect(Collectors.toMap(__ -> createIdForMultipleDuplicateCheck(inputParameters.getId(), txnCounter), Function.identity(), (x, y) -> y, LinkedHashMap::new))))
                .orElseThrow(() -> new IconRuntimeException("No payment initiation found"));
        return new CustomMultipleDuplicateMapFromPain001MappingOutput(DuplicateCheckMultipleRequest.builder()
                .transactionCacheEntryType("PAIN_001_MULTIPLE_CUSTOM")
                .duplicateCheckKeyMap(duplicateCheckKeyMap)
                .build());
    }
}

Lo anterior itera a través de las transacciones del mensaje pain.001 proporcionado y construye un mapa de entradas DuplicateCheckKey.

Este mapa se envuelve en un Duplicate Check Key Multiple Request que sirve como entrada para la función checkMultipleDuplicate, la cual procesará cada entrada y realizará un duplicate check, recopilando los resultados en un Duplicate Check Key Multiple Response. Además del mapa de Duplicate Check Keys, también puedes especificar el transactionCacheEntryType en la request (establecido en CheckMultipleDuplicatePain001 arriba); si no se especifica, se usará el nombre de la action como predeterminado.

    @Bean
    public DuplicatecheckexampleDomain duplicatecheckexampleDomain(ActorSystem actorSystem,
                                                                   CustomDuplicateCheckMappingMappingPort customDuplicateCheckMappingAdapter,
                                                                   Dispatcher floDispatcher) {
        return new DuplicatecheckexampleDomain.Builder(actorSystem)
                .withCustomDuplicateCheckMappingMappingAdapter(customDuplicateCheckMappingAdapter)
                .withDispatcher(floDispatcher)
                .build();
    }

Puedes encontrar más detalles sobre el uso de mapping functions en DSL 6 - Mapping Functions.

4. Handling multiple duplicate check responses

Al manejar el código de respuesta CONTAINS_DUPLICATES en tu flow, debes agregar el elemento de business data Duplicate Check Multiple Response al evento asociado como se muestra a continuación:

Imagen de la configuración del domain event de duplicate check fallido

Esto pondrá los resultados a disposición del procesamiento posterior en tu flow.

Se muestra a continuación un ejemplo de Duplicate Check Failed con el mapa de resultados. Se preserva el orden de las entradas desde el mensaje de origen. En el ejemplo, el orden en el mapa de respuesta es el mismo que el orden de las transacciones en el mensaje de origen. La clave se puede usar en el mapa de Duplicate Check Multiple Request para recuperar la duplicate key original utilizada para realizar el duplicate check.

Imagen del domain event de duplicate check fallido