차슈의 개발 자국
Apex Trigger 2 (자주 보는 오류) 본문
※ 본 게시물은 초보 개발자가 작성하는 글이므로 다소 잘못된 부분이 있을 수 있습니다. 수정이 필요한 부분은 댓글 부탁드립니다. ^^
1. NullPointerException
Apex 트리거에서 NullPointerException의 null 개체 역참조
트리거가 실행되면 "execution of [EventName] caused by: System.NullPointerException: Attempt to de-reference a null object: Trigger.[TriggerName]: line [XX], column [XX]" 라는 오류 메세지가 생성되는 경우가 있습니다.
이 오류는 인스턴스화되지 않은 개체를 사용하려고 하는 코드 한 줄이나 초기화되지 않은 개체 속성 때문에 발생합니다.
참고: 사이트 필드를 비워 둔 경우에도 이 오류 메시지가 생성됩니다.
솔루션
1. 사용할 개체 및/또는 속성이 null이 아닌지 확인하여 해결
Account newAccount = accountMap.get(oldAccount.Name);
if (newAccount != null)
if (newAccount.Site != null)
i = newAccount.Site.length();
2. 예외 처리 루틴
Account newAccount = accountMap.get(oldAccount.Name);
try {
i = newAccount.Site.length();
}
catch (System.NullPointerException e) {
e1 = e; // can be assigned to a variable to display a user-friendly error message
}
2. CalloutException
트리거의 콜아웃은 지원되지 않음
특정 시나리오에서는 외부 웹 서비스를 호출하기 위해 트리거에서 콜아웃을 만들어야 하지만 아래에 언급된 오류가 발생하므로 그렇게 할 수 없습니다.
솔루션
@future 메소드에 콜아웃을 캡슐화하여 트리거에서 콜아웃을 호출
global class MyClass {
@future (callout=true)
Public static void myMethod(String a)
{
//long-running Apex code
}
}
그러나 이 솔루션은 @future 메소드가 비동기식으로 작동하므로 필요한 작업을 비동기식 호출로 수행할 수 있는 경우 작동합니다.
또한 @future 메소드는 관련된 Governor Limit 이 있으므로 유의하여 사용하여야 합니다.
'APEX' 카테고리의 다른 글
SObject의 모든 필드 값 가져오기2 (0) | 2022.01.03 |
---|---|
SObject의 모든 필드 값 가져오기 (0) | 2022.01.03 |
Salesforce안에서 외부 사이트 연결 (0) | 2021.12.16 |
JSON Parsing (0) | 2021.12.16 |
Apex REST Callouts (0) | 2021.12.16 |
Comments