외부 (External)

주로 외부 서버에서 데이터를 조회하여 같이 표현해주고 싶을 때 사용됩니다. 사용자가 작성한 Apex Class를 이용해 데이터소스를 가져오기 때문에 내부 데이터소스에 비해 자유롭게 데이테를 가져올 수 있는 장점이 있습니다.

예를 들어 외부 서버에서 실시간 재고를 가져와 화면에 같이 표시하고 싶은 경우 Apex Class에서 Rest API 코드를 작성하여 외부 데이터소스에 지정하면 Line-Item Configurator에서 해당 데이터를 보실 수 있습니다.

  • 속성

    External 데이터소스를 사용하기 위한 각 속성입니다.

  • Apex Class 작성

    External 데이터소스를 사용하기 전 Apex Class를 먼저 작성해야 합니다. Package에서 제공하는 SBLD.DataSourceService.Fetchable 인터페이스를 작성하려는 Apex Class에 implements 하여 구현합니다.

  • 예시

    준비중입니다.


속성

External 데이터소스를 사용하기 위한 각 속성입니다.

번호필드명 및 영역설명필수

1

External 유형 선택

External 데이터소스 가져오는 방식은 두 가지 제공됩니다.

  • Apex - SBLD.DataSourceService.Fetchable 인터페이스를 구현한 Apex Class를 이용합니다.

  • Flow - 자동실행 플로를 이용합니다.

✔️

2

활성화

데이터소스를 활성화합니다. 활성화가 되어 있지 않으면 리스트 구성 시 작동되지 않습니다.

3

Description

데이터소스에 대한 설명을 기입합니다.

4

Key Field

데이터소스에서 가져온 데이터를 리스트 지정 개체의 어떠한 필드값으로 결합할지 지정합니다.

✔️

5

Parameters

데이터소스에 리스트 지정 개체의 필드 값이 필요한 경우 필드를 선택합니다.

6

Input Variable

7

Output Variable

✔️

Apex Class 작성

External 데이터소스를 사용하기 전 Apex Class를 먼저 작성해야 합니다. Package에서 제공하는 SBLD.DataSourceService.Fetchable 인터페이스를 작성하려는 Apex Class에 implements 하여 구현합니다.

SBLD.DataSourceService.Fetchable 클래스를 implements 하여 execute() 메서드를 구현합니다.

DataSourceServiceMock.cls
global with sharing class DataSourceServiceMock implements SBLD.DataSourceService.Fetchable {
    /***
     * @description SBLD.DataSourceService.Fetchable execute() 정의
     * @param param SBLD.DataSourceService.Parameter형 파라미터
     *              DataSource에서 설정한 
     * @return Map<Object, SObject>
     ****/
    global SBLD.DataSourceService.Result execute(SBLD.DataSourceService.Parameter param) {
        SBLD.DataSourceService.Result results = new SBLD.DataSourceService.Result();
        /**
         *  @method DataSourceService.Parameter gets()
         *  @param  String 형 Parent, Lookup 중 선택 (대소문자 구분 없음)
         *  @return List<SObject>
         **/
        SObject parentRecord = null;
        List<SObject> lookupRecords = new List<SObject>();
        // Parent 관련 파라미터를 가져옵니다.
        if(param.gets('parent')<>null && !param.gets('parent').isEmpty()) {
            parentRecord = param.gets('parent')[0];
        }
        // Lookup 관련 파라미터를 가져옵니다.
        if(param.gets('lookup')<>null && !param.gets('lookup').isEmpty()) {
            listLookupParameters = param.gets('lookup');
        }
        /**
         * 성공 시, External 결과값을 설정합니다.
         **/
        for(SObject sobj : lookupRecords) {
            /**
             * Internal의 Action과 동일하게 DataSource의 값을 
             * Lookup 또는 Line-Item 필드에 매핑하는 작업을 
             **/
            SBLD.DataSourceServiceAction action = new SBLD.DataSourceServiceAction();
            // 1. External에 설정한 External Key 값
            action.setKeyValue(sobj.get('Id')); // Product Code
            // 2. External에서 가져온 값을 Lookup 또는 Junction 필드에 매핑합니다.
            Map<String, Object> mapPopulatedField = sobj.getPopulatedFieldsAsMap();
            for(String fieldName : mapPopulatedField.keySet()) {
                action.putSourceToTargetField(mapPopulatedField.get(fieldName), fieldName);
            }
            // 3. DataSourceService.Result에 Action을 추가합니다.
            results.addAction(action);
        }
        return results;
    }
}

SBLD.DataSourceService.Parameter에서 gets() 메서드를 통해 Line-Item Configurator의 Parent 또는 Lookup 정보를 가져올 수 있습니다.

global SBLD.DataSourceService.Result execute(SBLD.DataSourceService.Parameter param) {
    SObject parentRecord = null;
    List<SObject> lookupRecords = new List<SObject>();
    // Parent 관련 파라미터를 가져옵니다.
    if(param.gets('parent')<>null && !param.gets('parent').isEmpty()) {
        parentRecord = param.gets('parent')[0];
    }
    // Lookup 관련 파라미터를 가져옵니다.
    if(param.gets('lookup')<>null && !param.gets('lookup').isEmpty()) {
        listLookupParameters = param.gets('lookup');
    }
    ...
}

Line-Item Configurator로 결과값을 전달하기 위해 아래 클래스를 이용합니다.

SBLD.DataSourceServiceAction Class

대상(Lookup 또는 Line-Item)의 행마다 Action을 지정합니다. Action은 데이터소스 값을 Lookup 또는 Line-Item 필드에 매핑하는 작업입니다.

  • setKeyValue(Object keyValue) Lookup 또는 Line-Item의 대상 레코드를 찾기 위한 Key값을 설정합니다.

  • putSourceToTargetField(Object sourceValue, String targetField) 데이터소스 값을 Lookup 또는 Line-Item 필드에 할당합니다.

SBLD.DataSourceService.Result Class

매핑이 완료된 Action을 리턴 값에 추가하는 작업입니다.

  • addAction(SBLD.DataSourceServiceAction action) SBLD.DataSourceService.Result 인스턴스에 Action을 추가합니다.

...
SBLD.DataSourceService.Result result = new SBLD.DataSourceService.Result();
for(Object objResponse : listResponses) {
    Map<String, Object> mapResponse = (Map<String, Object>)objResponse;

    SBLD.DataSourceServiceAction action = new SBLD.DataSourceServiceAction();
    // 데이터소스에서 설정한 Key 필드에 알맞는 값
    action.setKeyValue(mapResponse.get('Id')); // Product Code
    // 데이터소스에서 가져온 값을 Lookup 또는 Line-Item 필드에 넣기
    action.putSourceToTargetField(mapResponse.get('inventory'), 'Inventory__c');
    // SBLD.DataSourceService.Result에 Action을 추가한다.
    result.addAction(action);
}
return result;

예시

준비중입니다.

Last updated