Apex 클래스를 활용해 다양한 방식으로 데이터 가져오기
버전 1.37부터 ‘데이터소스(Data Source)’가 ‘비즈니스 규칙(Business Rule)’으로 명칭이 변경되었습니다.
외부 API 서버에서 데이터를 조회하거나, 데이터 조회 및 결합 시 복잡한 로직이 요구되는 경우에 사용됩니다. 해당 비즈니스 규칙을 설정하려면 Apex 클래스를 작성해야 합니다. Apex 클래스를 사용해 구현하므로 데이터를 더 자유롭게 가져올 수 있다는 장점이 있습니다.

설정 과정
Apex 클래스 작성
Apex 클래스를 작성할 때, SmallBuilder에서 제공하는 인터페이스를 구현해야 합니다.
비즈니스 규칙 설정
Apex 클래스 구현이 완료되면, 빌더에서 비즈니스 규칙 설정을 진행합니다.
STEP 1: 비즈니스 규칙에 사용할 Apex 클래스를 작성하기 위한 인터페이스 구현
비즈니스 규칙 설정에서 사용할 Apex 클래스를 작성하려면 반드시 SBLI.DataSourceService.Fetchable
인터페이스를 구현해야 합니다.
이 인터페이스에는 execute
메서드가 포함되어 있으며, 해당 메서드에 데이터 처리를 위한 로직 구현 후 처리된 데이터와 조회 또는 라인 아이템 간의 매핑 정보를 담은 SBLI.DataSourceService.Result
객체를 반환해야 합니다.
예시 코드
해당 예시 코드는 외부 API를 호출하여 제품 코드별 재고 수량을 가져온 후, 조회 또는 라인 아이템의 재고 필드(Inventory__c
)에 매핑한다고 가정하였습니다.
SBLI.DataSourceService.Fetchable
인터페이스는 패키지에서 제공되는 인터페이스이므로, 패키지 외부에서 접근하려면 Apex 클래스와 제공되는 메서드 모두 global
로 선언해야 합니다.
global class DataSourceInventory implements SBLI.DataSourceService.Fetchable {
global SBLI.DataSourceService.Result execute(SBLI.DataSourceService.Parameter params) {
// 부모 레코드 가져오기
SObject parentRecord = params.getParentRecord();
// 조회 개체 레코드 가져오기
List<SObject> lookupRecords = params.getLookupRecords();
// 외부 API를 호출하여 재고 정보 가져오기
// 키: 제품 코드, 값: 재고 수량
Map<String, Integer> inventoryData = new Map<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; // 결과 반환
}
}

부모 레코드 및 조회 레코드 가져오기
params.getParentRecord()
: 부모 개체의 레코드를 가져옵니다.params.getLookupRecords()
: 조회 개체의 레코드 목록을 가져옵니다.
// 부모 레코드 가져오기
SObject parentRecord = params.getParentRecord();
// 조회 개체 레코드 가져오기
List<SObject> lookupRecords = params.getLookupRecords();
결과 생성
SBLI.DataSourceService.Action
객체를 생성하여 비즈니스 규칙 값(재고 정보)과 조회 필드(Inventory__c
)를 매핑합니다.생성된 Action 객체를
SBLI.DataSourceService.Result
에 추가합니다.
// 결과 객체 생성
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 추가
}
SBLI.DataSourceService.Parameter
빌더에서 설정한 부모와 조회 파라미터 정보를 가진 객체입니다.
예시 코드
global SBLI.DataSourceService.Result execute(SBLI.DataSourceService.Parameter params) {
SObject parentRecord = params.getParentRecord();
List<SObject> lookupRecords = params.getLookupRecords();
...
}
Methods
SObject getParentRecord()
부모 레코드를 반환합니다. 빌더에서 추가한 부모 파라미터가 없는 경우, 값은 비어 있습니다.
List<SObject> getLookupRecords()
조회 레코드를 반환합니다. 빌더에서 추가한 조회 파라미터가 없는 경우, 값은 비어 있습니다.
SBLI.DataSourceService.Result
조회 또는 라인 아이템과 비즈니스 규칙 간의 모든 매핑 정보를 담아 편집기로 반환하는 객체입니다. 매핑 정보는 SBLI.DataSourceService.Action
객체에 저장한 뒤, SBLI.DataSourceService.Result
객체에 추가하여 반환합니다.
예시 코드
SBLI.DataSourceService.Result result = new SBLI.DataSourceService.Result();
for(String productCode : inventoryData.keySet()) {
// SBLI.DataSourceService.Action 객체에 매핑 정보 저장
SBLI.DataSourceService.Action action = new SBLI.DataSourceService.Action();
action.setKeyValue(productCode);
action.putSourceToTargetField(
inventoryData.get(productCode),
'Inventory__c'
);
result.addAction(action); // 매핑 정보가 담긴 Action을 Result에 추가
}
return result;
Methods
addAction(SBLI.DataSourceService.Action action)
매핑 정보가 담긴 Action 객체를 Result 객체에 추가합니다.
SBLI.DataSourceService.Action
조회 또는 라인 아이템과 비즈니스 규칙 값을 매핑한 정보를 담은 객체입니다.
예시 코드
SBLI.DataSourceService.Result result = new SBLI.DataSourceService.Result();
// 비즈니스 규칙에서 각 제품코드와 재고 정보를 반복 처리
for(String productCode : inventoryData.keySet()) {
SBLI.DataSourceService.Action action = new SBLI.DataSourceService.Action();
// 제품코드를 Key 값으로 설정하여 조회/라인 아이템과 매핑
action.setKeyValue(productCode);
// 재고 정보를 조회/라인 아이템의 Inventory__c 필드에 매핑
action.putSourceToTargetField(
inventoryData.get(productCode), // 데이터소스 값: 재고
'Inventory__c' // 필드 API명
);
result.addAction(action); // 매핑 정보 추가
}
return result; // 최종 결과 반환
Methods
setKeyValue(Object keyValue)
조회 또는 라인 아이템의 Key와 일치하는 비즈니스 규칙의 Key 값을 설정합니다.
keyValue
Object
비즈니스 규칙의 Key 값입니다.
putSourceToTargetField(Object sourceValue, String targetFieldApiName)
비즈니스 규칙 값을 원하는 조회 또는 라인 아이템 필드에 할당합니다.
sourceValue
Object
비즈니스 규칙 값입니다.
targetFieldApiName
String
조회 또는 라인 아이템의 필드 API명입니다.
STEP 2: 비즈니스 규칙 설정
라인 아이템 편집기 설정 단계에서 비즈니스 규칙의 ‘Apex 클래스를 사용하여 데이터 가져오기’ 레이아웃에서 ‘비즈니스 규칙 추가’를 클릭합니다.
Apex 클래스를 선택한 후, 클래스에서 부모와 조회 정보가 필요한 경우 파라미터로 전달할 필드들을 선택합니다.
데이터소스를 설정하기 전에 Apex 클래스를 먼저 작성하세요.

1
Apex Class
비즈니스 규칙에 사용할 Apex 클래스를 선택합니다.
✔
3
파라미터
비즈니스 규칙을 구현한 Apex 클래스에서 부모 또는 조회 개체의 필드 값이 필요한 경우, 해당 필드를 파라미터로 전달하기 위해 추가합니다.
4
평가 이벤트
비즈니스 규칙의 실행 시점을 설정합니다.
초기화 시(On Initialization): 라인 아이템 레코드가 새로 추가될 때 실행됩니다.
로딩 시(On Loading): 라인 아이템 화면이 로드될 때마다 실행됩니다.
변경 시(On Change): 라인 아이템의 특정 필드가 변경될 때마다 실행됩니다.
저장 전(Before Save): 라인 아이템 레코드가 저장되기 전에 실행됩니다.
❗ 라인 아이템에서만 제공되는 설정입니다.
✔
5
작업 키
비즈니스 규칙을 통해 가져온 데이터를 조회 또는 라인 아이템 레코드에 매핑하기 위해 Key 필드를 설정합니다.
Key 필드는 조회 개체의 필드를 사용합니다. 💁 라인 아이템에서 조회 개체의 필드를 Key로 사용하는 이유는, 라인 아이템이 저장되지 않은 레코드일 수도 있어 유일한 Key 값을 판단하기 어렵기 때문입니다.
✔
STEP 3: 비즈니스 규칙 활성화
비즈니스 규칙을 사용하려면 활성화가 필요합니다. 비즈니스 규칙이 비활성화되어 있는 경우, 설정된 규칙은 적용되지 않습니다.

Last updated
Was this helpful?