목차

Search

  1. 서문
  2. 비즈니스 항목 서비스 소개
  3. EJB 비즈니스 항목 서비스 호출
  4. REST 비즈니스 항목 서비스 호출
  5. Data Director용 REST API
  6. SOAP 비즈니스 항목 서비스 호출
  7. 교차 참조 레코드 및 BVT 계산 서비스
  8. 기업 연결 서비스 지원
  9. 데이터 정리, 분석 및 변환을 위한 외부 호출
  10. 부록 A: REST API를 사용하여 레코드 추가
  11. 부록 B: REST API를 사용하여 파일 업로드
  12. 부록 C: REST API를 사용하여 보고서 관리

비즈니스 항목 서비스 가이드

비즈니스 항목 서비스 가이드

샘플 외부 호출

샘플 외부 호출

외부 호출을 생성하는 방법을 알아보려면 리소스 키트에서 사용할 수 있는 BESExternalCall 샘플을 검토하십시오. 다음 섹션에는 BESExternalCall 샘플을 생성하고 테스트하는 데 필요한 단계에 대한 정보가 포함되어 있습니다.
BESExternalCall 샘플은 성공적인 외부 호출 설정을 위한 가장 간단한 기반을 구현합니다.
BESExternalCall 샘플의 코드 구조는 다음과 같습니다.
  • ValidatePerson.java 및 MergePerson.java 파일의 CustomLogic 구현
  • CustomLogicFactorImpl.java 파일의 CustomLogicFactory 구현
  • CustomLogicService.java 파일의 WebService 구현

ValidatePerson.java 및 MergePerson.java 파일의 CustomLogic 구현

외부 호출을 위한 CustomLogic 구현에는 추가 데이터 유효성 검사 및 조작과 같은 사용자 지정 비즈니스 논리가 포함됩니다.
CustomLogic 구현에는 mdm-spi.jar 파일에서 사용할 수 있는 com.informatica.mdm.spi.externalcall.CustomLogic 인터페이스가 포함되어야 합니다. 이 인터페이스는 사용자 지정 비즈니스 논리를 정의할 수 있는 프로세스 메서드를 제공합니다. 다음 ValidatePerson.java 클래스 코드는 샘플입니다.
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")); }

CustomLogicFactorImpl.java 파일의 CustomLogicFactory 구현

CustomLogicFactory 구현은 예상된 단계에서 실행하거나 대상 비즈니스 항목에 대해 실행하거나 둘 다 수행할 수 있는 CustomLogic 인스턴스를 제공합니다.
CustomLogicFactory 구현에는 mdm-spi.jar 파일에서 사용할 수 있는 com.informatica.mdm.spi.externalcall CustomLogicFactory 인터페이스가 포함되어야 합니다. 이 인터페이스는 외부 호출 요청의 초기 단계에서 호출되는 생성 메서드를 노출합니다. 이 메서드에서 예상되는 논리는 외부 호출 요청을 필터링하고 예상되는 사용자 지정 논리 구현으로 보냅니다. 다음 CustomLogicFactoryImpl.java 클래스 코드는 샘플입니다.
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 }
CustomLogicFactory 구현에는 다음과 같은 생성 메서드 매개 변수가 포함될 수 있습니다.
externalCallRequest
bes-external-call.xsd 파일에 정의된 외부 호출을 나타내는 요청의 인스턴스입니다.
callContext
CompositeServiceClient 요청에서 사용자 지정 논리 구현에 사용되는 복합 서비스 컨텍스트의 인스턴스입니다.

CustomLogicService.java 파일의 WebService 구현

WebService 구현은 외부 호출에 의해 호출되고 외부 호출 흐름의 진입점인 전체 서비스를 노출합니다.
다음 CustomLogicService.java 샘플 코드는 bes-external-call.xsd 파일이 Java의 기본 WebService API를 기반으로 정의하는 웹 서비스를 구현합니다.
/** * 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); }
ExternalCallProcessor 인스턴스의 호출 메서드는 들어오는 요청을 처리합니다.
ExternalCallProcessor 인스턴스는 신뢰할 수 있는 응용 프로그램 사용자를 사용합니다. 신뢰할 수 있는 응용 프로그램 사용자에 대한 자세한 내용은
Multidomain MDM 보안 가이드
를 참조하십시오.

BESExternalCall 예제

웹 서비스에 대한 BESExternalCall 외부 호출은 다음 작업을 수행할 수 있습니다.
  • 한 개인을 생성하거나 업데이트할 때 이 호출은 해당하는 개인에게 적어도 하나의 주소가 있는지 확인합니다. 유효성 검사가 실패하면 호출에서 사용자 지정 오류 메시지가 반환됩니다.
  • 병합된 레코드의 미리 보기를 생성하는 경우 이 호출에서 전화 번호는 병합되지 않습니다.
  • 레코드를 병합하는 경우 이 호출에서 전화 번호는 병합되지 않습니다.
다음 테이블에는 BESExternalCall 예제를 지원하는 파일 및 파일 위치가 설명되어 있습니다.
파일 이름
설명
위치
bes-external-call.xsd
모든 외부 호출에 대한 요청 및 응답 유형을 정의합니다. 외부 웹 서비스 작업은 입력 및 출력 요소에 요청 및 응답 유형을 사용해야 합니다.
<MDM 설치 디렉터리>/hub/server/lib/mdm-spi.jar
custom-logic-service.wsdl
예제 웹 서비스에 대한 WSDL 파일입니다. 서비스 메서드가 교환하는 외부 서비스, 작업, 메서드 및 데이터 유형을 정의합니다.
<MDM 설치 디렉터리>/hub/resourcekit/samples/BESExternalCall/source/resources/webapp/WEB-INF/wsdl/
ValidatePerson.java
MergePerson.java
예제 웹 서비스와 함께 실행되는 사용자 지정 유효성 검사 및 병합 작업의 예제입니다.
이 예에서는 .java 파일을 사용하지만 외부 웹 서비스에는 다른 코딩 표준이 요구될 수 있습니다.
<MDM 설치 디렉터리>/hub/resourcekit/samples/BESExternalCall/source/java/
build.xml
bes-external-call.ear
파일을 빌드합니다.
<MDM 설치 디렉터리>/hub/resourcekit/samples/BESExternalCall/
bes-external-call.ear
이 예제를 실행하기 위해 응용 프로그램 서버에 배포하는
.ear
파일입니다.
<MDM 설치 디렉터리>/hub/resourcekit/samples/BESExternalCall/build/