9. Grammer1: Conditions
(if/else if/else, switch)
다솜님 과일바구니에
서 사과가 있을 때, 사
과의 개수를 어떻게 셀
까?
고객 유형 중 VIP 고객
에게 특별한 혜택을 주
고 싶을 때 어떻게 하
지?
재원님 과일바구니에
는 사과가 있을까?
10. Conditions(if, if-else, if-else if-else)
● 조건에 따른 제어
○ if(조건1){
처리1;
}else if(조건2){
처리2;
}else{
처리3;
}
시작
조건1
조건2
처리1
처리2
종료
거짓
참
참
거짓
처리3
11. Conditions(if, if-else, if-else if-else)
● 조건에 따른 제어
○ switch on 대상(변수){
when 조건값1{
처리1;
}
when 조건값2{
처리2;
}
when else{//나머지
처리2;
}
}
시작
조건1 조건2
처리1 처리2
종료
처리3
else
12. Grammer2: Loop
(for, for-each, while, do-while)
과일바구니에는 어떤
과일이 있는지 모두 확
인해보고 싶어!
1부터 10까지 로그를
남기려면 어떻게 할 까?
과일바구니에 있는 과일을
특정한 기준에 따라 재원
님과 다솜님에게 나눠주고,
실제로 뭘 가지고 있는지
확인하고 싶어!
13. Loop(for, for-each, while)
• for: 일정 횟수에 기반한 반복
• for (Integer i = 1; i <=5; i++) {
처리;
……
}
시작
조건
종료
참
거짓
증감식
처리반복
• for-each: 컬랙션에 있는 데이터를 기반한 반복
• for (데이터 : 컬랙션) {
처리;
……
}
• while: 조건에 기반한 반복
• while (조건식) {
처리;
……
}
15. Loop(continue, break)
• break: 반복문에서 벗어나기
• continue: 반복문 내에서 continue; 뒤에 있는
처리는 진행하지 않고, 다음 반복문으로 이동
• for( Integer i = 1; i<=5; i++ ){
System.debug( i + '번째 반복’ );
}
• for( Integer i = 1; i<=5; i++ ){
System.debug( i + '번째 반복’ );
if( i < 3 ){
continue;
}
System.debug( 'continue 뒤 ' + i + '번째 반복’ );
}
• for( Integer i = 1; i<=5; i++ ){
System.debug( i + '번째 반복’ );
if( I == 3 ){
break;
}
System.debug('break 뒤 ' + I + '번째 반복');
}
시작
조건
종료
참
거짓
증감식
처리반복
16. Exercise
Map
재원님
배
다솜님
사과
● 과일바구니에 곶감 2개, 사과 2개, 배 1개가
담겨있습니다. 이 때, 재원님에게 곶감 2개와
배 1개를 주고, 나머지는 다솜님에게 주었습니다.
다솜님은 어떤 과일을 가지고 있을까요?
○ 참고: Map의 keySet()을 활용할 수 있습니다.
keySet()은 Map이 가지고 있는 Key 값들을
Set에 담는 것입니다.
Ex. Map<String, String> sample = new Map<String, String>();
sample.put(‘다솜님’, ‘사과’);
sample.put(‘재원님’, ’배’);
Set<String> keys = sample.keyset();
System.debug(‘keys: ‘ + keys);
재원님
곶감1
재원님
곶감2
다솜님
사과2
18. Trigger Context
데이터 이벤트
발생
Before Trigger
Validation Rule,
Duplicate Rule
After Trigger
Assignment Rule
System
Validation
Event: Insert, Update, Delete, Undelete
Trigger.isBefore Trigger.isAfter
레이아웃에 정의된 값인지
사용자 프로필 권한에 맞는 필드인지
유효한 필드 형식인지
필드에 정의된 범위(길이)가 맞는지
Auto-response Rule Workflow Rule . . .
19. Trigger Context
이벤트 시점 이벤트 유형 이벤트 대상 레코드
isBefore isInsert new
isAfter isUpdate newMap
isDelete old
isUndelete oldMap
size
• trigger.new와 trigger.old를 데이터베이스 명령어를 쓸 수 없습니다. (insert, update, delete)
• 무한 반복을 발생할 수 있으며, 이때 Runtime Exception이라는 오류가 발생합니다.
• before trigger에서 trigger.new를 활용해서 필드 값을 변경할 수 있습니다.
• Before trigger → event → after trigger
• after trigger에서 trigger.new는 저장되지 않으며, trigger.old는 읽기만 가능합니다.
• trigger.new는 삭제할 수 없습니다.