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;