Índice

Search

  1. Prólogo
  2. Introducción a los servicios de entidad de negocio
  3. Llamadas del servicio de entidad de negocio de EJB
  4. Llamadas del servicio de entidad de negocio de REST
  5. API REST para Data Director
  6. Llamadas del servicio de entidad de negocio de SOAP
  7. Servicios de cálculos de BVT y registros de referencias cruzadas
  8. Compatibilidad del servicio de vinculación empresarial
  9. Llamadas externas para limpiar, analizar y transformar datos
  10. Apéndice A: Uso de las API de REST para añadir registros
  11. Apéndice B: Uso de las API de REST para cargar archivos
  12. Apéndice C: Uso de las API de REST para administrar informes

Guía de servicios de entidad de negocio

Guía de servicios de entidad de negocio

Ejemplo de llamada externa

Ejemplo de llamada externa

Para aprender a crear una llamada externa, revise el ejemplo de BESExternalCall que está disponible en el Kit de recursos. Las siguientes secciones incluyen información sobre los pasos necesarios para crear y probar el ejemplo de BESExternalCall.
El ejemplo de BESExternalCall implementa la base más simple para una configuración exitosa de una llamada externa.
El ejemplo de BESExternalCall tiene la siguiente estructura de código:
  • Implementaciones de CustomLogic en los archivos ValidatePerson.java y MergePerson.java
  • Implementación de CustomLogicFactory en el archivo CustomLogicFactorImpl.java
  • Implementación de WebService en el archivo CustomLogicService.java

Implementaciones de CustomLogic en los archivos ValidatePerson.java y MergePerson.java

Las implementaciones de CustomLogic para una llamada externa incluyen la lógica empresarial personalizada, como la validación y manipulación de datos adicionales.
Las implementaciones de CustomLogic deben incluir una interfaz com.informatica.mdm.spi.externalcall.CustomLogic, que está disponible en el archivo mdm-spi.jar. Esta interfaz expone el método de proceso donde puede definir la lógica empresarial personalizada. El siguiente código de clase ValidatePerson.java es un ejemplo:
public class ValidatePerson implements CustomLogic { private CompositeServiceClient besClient; private CallContext callContext; public ValidatePerson(CompositeServiceClient besClient, CallContext callContext) { this.besClient = besClient; this.callContext = callContext; } @Override public DataObject process(HelperContext helperContext, DataObject inputSdo, Map < String, Object > inParams, Map < String, Object > outParams) throws StepException { try { List < ValidationError > errorList = new ArrayList < > (); DataFactory dataFactory = helperContext.getDataFactory(); // Ensure that the Person SDO has at least one Address item List<?> list = inputSdo.getList("Person/Addresses/item"); if ((list == null) || list.isEmpty()) { String personId = inputSdo.getString("Person/rowidObject"); if(personId != null) { // Verify if an address already exists DataObject readEntity = dataFactory.create(ReadEntity.class); DataObject personFilter = readEntity.createDataObject("parameters").createDataObject("coFilter").createDataObject("object"); personFilter.setString("name", "Person"); personFilter.createDataObject("key").setString("rowid", personId); DataObject addressFilter = personFilter.createDataObject("object"); addressFilter.setString("name", "Addresses"); addressFilter.createDataObject("pager").setInt("recordsToReturn", 1); DataObject readEntityReturn = besClient.process(callContext, readEntity); List existingList = readEntityReturn.getList("object/Person/Addresses/item"); if (existingList == null || existingList.isEmpty()) { errorList.add(createValidationError(dataFactory, "CUSTOM-00001", "You must enter at least one Address.", "Person.Addresses")); }

Implementación de CustomLogicFactory en el archivo CustomLogicFactorImpl.java

Una implementación de CustomLogicFactory proporciona las instancias de CustomLogic para que se ejecuten en la fase esperada, se ejecuten para la entidad de negocio de destino o ambas.
Una implementación de CustomLogicFactory debe incluir una interfaz com.informatica.mdm.spi.externalcall CustomLogicFactory, que está disponible en el archivo mdm-spi.jar. Esta interfaz expone el método de creación, que la solicitud de llamada externa invoca en las primeras etapas. La lógica esperada en este método filtra y dirige la solicitud de llamada externa a la implementación lógica personalizada esperada. El siguiente código CustomLogicFactoryImpl.java es un ejemplo:
public class CustomLogicFactoryImpl implements CustomLogicFactory { public static final String PERSON = "Person"; private static final CustomLogic EMPTY_LOGIC = new EmptyLogic(); private CompositeServiceClient besClient; public CustomLogicFactoryImpl(CompositeServiceClient besClient) { this.besClient = besClient; } @Override public CustomLogic create(ExternalCallRequest externalCallRequest, CallContext callContext) throws StepException { // Interest is in the Person business entity. The logic can handle a few service phases. Trigger trigger = externalCallRequest.getTrigger(); String businessEntity = trigger.getBusinessEntity(); ServicePhase phase = trigger.getServicePhase(); switch (phase) { case WRITE_CO_BEFORE_VALIDATE: if (PERSON.equals(businessEntity)) { return new ValidatePerson(besClient, callContext); } break; case PREVIEW_MERGE_CO_BEFORE_EVERYTHING: case MERGE_CO_BEFORE_EVERYTHING: if (PERSON.equals(businessEntity)) { return new MergePerson(); } break; default: // } return EMPTY_LOGIC; // This one does nothing }
Una implementación de CustomLogicFactory puede incluir los siguientes parámetros de método de creación:
externalCallRequest
Una instancia de la solicitud que representa la llamada externa como se define en el archivo bes-external-call.xsd.
callContext
Una instancia del contexto de servicio compuesto que las solicitudes de CompositeServiceClient usan en implementaciones lógicas personalizadas.

Implementación de WebService en el archivo CustomLogicService.java

Una implementación de WebService expone el servicio completo que invoca una llamada externa y es el punto de entrada del flujo de llamadas externas.
El siguiente código de ejemplo CustomLogicService.java implementa el servicio web que define el archivo bes-external-call.xsd en función de la API de WebService nativa de Java:
/** * Web service implementation. * It must accept a {urn:bes-external-call.informatica.mdm}ExternalCallRequest as an operation input * and return a {urn:bes-external-call.informatica.mdm}ExternalCallResponse as output. */ @WebServiceProvider( targetNamespace = "http://cs.sample.mdm.informatica.com/", serviceName = "CustomLogicService", portName = "CustomLogicServicePort", wsdlLocation = "WEB-INF/wsdl/custom-logic-service.wsdl" ) @ServiceMode(Mode.PAYLOAD) public class CustomLogicService implements Provider<Source> { @Override public Source invoke(Source request) { CompositeServiceClient compositeServiceClient = createCompositeServiceClient(); CustomLogicFactory customLogicFactory = new CustomLogicFactoryImpl(compositeServiceClient); String appName = "<trusted_user>"; // replace with proper application user name // Create a processor instance and let the instance perform the job. // Provide a custom logic factory implementation. ExternalCallProcessor externalCallProcessor = new ExternalCallProcessor(compositeServiceClient, appName, customLogicFactory); return externalCallProcessor.invoke(request); }
El método de invocación de la instancia ExternalCallProcessor maneja la solicitud entrante.
La instancia de ExternalCallProcessor se basa en un usuario de la aplicación de confianza. Para obtener más información sobre los usuarios de aplicaciones de confianza, consulte
Guía de seguridad de Multidomain MDM
.

Ejemplo de BESExternalCall

La llamada externa BESExternalCall al servicio web puede realizar las siguientes acciones:
  • Al crear o actualizar una persona, la llamada valida si la persona tiene al menos una dirección. Si la validación falla, la llamada devuelve un mensaje de error personalizado.
  • Al generar una vista previa de los registros fusionados, la llamada no fusiona los números de teléfono.
  • Al fusionar registros, la llamada no fusiona números de teléfono.
La siguiente tabla describe los archivos y las ubicaciones de los archivos que admiten el ejemplo de BESExternalCall:
Nombre de archivo
Descripción
Ubicación
bes-external-call.xsd
Define los tipos de solicitud y respuesta para todas las llamadas externas. Una operación de servicio web externo debe usar los tipos de solicitud y respuesta para los elementos de entrada y salida.
<MDM installation directory>/hub/server/lib/mdm-spi.jar
custom-logic-service.wsdl
Archivo WSDL para el servicio web de ejemplo. Define los servicios, operaciones, métodos y tipos de datos externos que intercambian los métodos de servicio.
<Directorio de instalación de MDM>/hub/resourcekit/samples/BESExternalCall/source/resources/webapp/WEB-INF/wsdl/
ValidatePerson.java
y
MergePerson.java
Ejemplos de operaciones personalizadas de validación y fusión que se ejecutan con el servicio web de ejemplo.
Este ejemplo usa archivos .java, pero su servicio web externo puede requerir un estándar de codificación diferente.
<Directorio de instalación de MDM>/hub/resourcekit/samples/BESExternalCall/source/java/
build.xml
Construye el archivo
bes-external-call.ear
.
<Directorio de instalación de MDM>/hub/resourcekit/samples/BESExternalCall/
bes-external-call.ear
El archivo
.ear
que implementa en el servidor de aplicaciones para ejecutar este ejemplo.
<Directorio de instalación de MDM>/hub/resourcekit/samples/BESExternalCall/build/