외부 API 서버에서 데이터를 조회하거나, 데이터 조회 및 결합 시 복잡한 로직이 요구되는 경우에 사용됩니다. 데이터소스 고급을 설정하려면 Apex 클래스를 작성해야 합니다. Apex 클래스를 사용해 구현하므로, 데이터소스 기본보다 데이터를 더 자유롭게 가져올 수 있다는 장점이 있습니다.
설정 과정
1
Apex 클래스 작성
Apex 클래스를 작성할 때, SmallBuilder에서 제공하는 인터페이스를 구현해야 합니다.
2
데이터소스 고급 설정
Apex 클래스 구현이 완료되면, 빌더에서 데이터소스 고급 설정을 진행합니다.
STEP 1: 데이터소스에 사용할 Apex 클래스를 작성하기 위한 인터페이스 구현
데이터소스 고급 설정에서 사용할 Apex 클래스를 작성하려면 반드시 SBLI.DataSourceService.Fetchable인터페이스를 구현해야 합니다.
이 인터페이스에는 execute 메서드가 포함되어 있으며, 해당 메서드에 데이터 처리를 위한 로직 구현 후 처리된 데이터와 조회 또는 라인 아이템 간의 매핑 정보를 담은 SBLI.DataSourceService.Result 객체를 반환해야 합니다.
예시 코드
해당 예시 코드는 외부 API를 호출하여 제품 코드별 재고 수량을 가져온 후, 조회 또는 라인 아이템의 재고 필드(Inventory__c)에 매핑한다고 가정하였습니다.
SBLI.DataSourceService.Fetchable 인터페이스는 패키지에서 제공되는 인터페이스이므로, 패키지 외부에서 접근하려면 Apex 클래스와 제공되는 메서드 모두 global로 선언해야 합니다.
global classDataSourceInventoryimplementsSBLI.DataSourceService.Fetchable { global SBLI.DataSourceService.Resultexecute(SBLI.DataSourceService.Parameter params) {// 부모 레코드 가져오기SObject parentRecord =params.getParentRecord();// 조회 개체 레코드 가져오기List<SObject> lookupRecords =params.getLookupRecords();// 외부 API를 호출하여 데이터소스 값 가져오기 (예: 재고 정보)// 키: 제품 코드, 값: 재고 수량Map<String,Integer> inventoryData =newMap<String,Integer>(); inventoryData.put('Product001',10);inventoryData.put('Product002',20);// 결과 객체 생성SBLI.DataSourceService.Result result =new SBLI.DataSourceService.Result();// 조회/라인 아이템 개체와 데이터소스 매핑for (String productCode :inventoryData.keySet()) {SBLI.DataSourceService.Action action =new SBLI.DataSourceService.Action();action.setKeyValue(productCode); // 조회/라인 아이템 레코드와 매핑할 Key 값 설정action.putSourceToTargetField(inventoryData.get(productCode),// 데이터소스 값: 재고 정보'Inventory__c'// 조회/라인 아이템 필드 API명 );result.addAction(action); // Action 추가 }return result; // 결과 반환 }}
1
부모 레코드 및 조회 레코드 가져오기
params.getParentRecord(): 부모 개체의 레코드를 가져옵니다.
params.getLookupRecords(): 조회 개체의 레코드 목록을 가져옵니다.
// 부모 레코드 가져오기SObject parentRecord =params.getParentRecord();// 조회 개체 레코드 가져오기List<SObject> lookupRecords =params.getLookupRecords();