Apex Class 작성 (수정 중)


🔸 Apex Class 작성

Apex Class 고급 데이터 소스를 설정하려면 Apex Class를 먼저 작성해야 합니다. SmallBuilder Lists 패키지에서 제공하는 SBLD.DataSourceService.Fetchable 인터페이스를 작성하려는 Apex Class에 implements 하여 구현합니다. SBLD.DataSourceService.Fetchable 클래스의 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