카테고리 없음

세일즈포스(Salesforce) Database.rollback()의 간단한 해설(초보자용)

오아름 샘 2022. 1. 17. 02:43
반응형

초보자의 방향에 Database.rollback()의 사양과 사용법에 대해 간단 해설합니다 노

Database.rollback()이란?

Database.rollback() 메소드를 이용하는 것으로, Database.setSavepoint()에 의해 사전 등록되어 있던 savepoint까지 처리를 롤백하는 것이 가능합니다.

예를 들면 ↓의 예에서는, 4행의 Database.rollback(sp)에 의해 2행의 Savepoint까지 롤백 되어 「다양한 처리 B」가 없었던 것이 됩니다.

(色々な処理A)
Savepoint sp = Database.setSavepoint();
(色々な処理B) 
Database.rollback(sp);
(色々な処理C)

실무에서 가장 많은 유스 케이스

실무에서 가장 많은 이용 방법은 「Apex Code의 제일 먼저 Savepoint를 넣어 두고, 예외 발생시에 전체 롤백 되도록(듯이) 한다」라고 하는 것입니다.

기본적으로 초보자는 이 1 패턴만으로도 이해하고 사용할 수 있게 되면 충분하다고 생각합니다.

구체적인 실장 방법은 이하와 같다.

· 일반 코드

public Class CreateAccount {
  public Account createAccount(String name) {
    Account acc = new Account();
    acc.Name = name;
    return acc;
  }
}

· 롤백 처리가있는 레코드

public Class CreateAccount {
  Savepoint sp = Database.setSavepoint();
  try{
    public Account createAccount(String name) {
      Account acc = new Account();
      acc.Name = name;
      return acc;
    }
  }catch(Exception ex){
    Database.rollback(sp); 
  }
}

Apex Code의 전체 처리를 try로 둘러싸고, 처음에 Savepoint를 설치하고 catch에 rollback 메서드를 작성하여 해당 트랜잭션에서 오류가 발생하면 모든 Apex 처리를 롤백합니다. 할 수 있습니다.

이 구현의 포인트는 「에러가 발생했을 경우, 모든 것을 없었을 수 있기 때문에, 데이터의 불일치의 발생을 반드시 방지할 수 있다」라고 하는 점입니다.

 

catch에 rollback을 넣기 때문에 Apex 처리 종료 후 워크 플로우 또는 플로우에서 오류가 발생하더라도 (동일한 트랜잭션의 오류 인 한) 롤백이 작동합니다.

그 때문에, 「Apex의 DML 조작만 반영되어, 플로우의 DML 조작만 에러로 연주된다」라고 하는 사건 발생을 방지할 수 있습니다.

반응형