차슈의 개발 자국

Apex Trigger 2 (자주 보는 오류) 본문

APEX

Apex Trigger 2 (자주 보는 오류)

차슈 2021. 12. 16. 17:15

※ 본 게시물은 초보 개발자가 작성하는 글이므로 다소 잘못된 부분이 있을 수 있습니다. 수정이 필요한 부분은 댓글 부탁드립니다. ^^

 

 

 

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