Apex Class 고급 데이터 소스를 설정하려면 Apex Class를 먼저 작성해야 합니다. SmallBuilder Lists 패키지에서 제공하는 SBLD.DataSourceService.Fetchable 인터페이스를 작성하려는 Apex Class에 implements 하여 구현합니다. SBLD.DataSourceService.Fetchable 클래스의 execute() 메서드를 구현합니다.
DataSourceServiceMock.cls
global with sharing classDataSourceServiceMockimplementsSBLD.DataSourceService.Fetchable { /*** * @description SBLD.DataSourceService.Fetchable execute() 정의 * @param param SBLD.DataSourceService.Parameter형 파라미터 * DataSource에서 설정한 * @return Map<Object, SObject> ****/ global SBLD.DataSourceService.Resultexecute(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 =newList<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 정보를 가져올 수 있습니다.