세일즈포스(Salesforce) Database.rollback()의 간단한 해설(초보자용)
초보자의 방향에 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 조작만 에러로 연주된다」라고 하는 사건 발생을 방지할 수 있습니다.