Salesforce/trailhead

초보 개발자) 7. sObject 사용하기 / DML로 레코드 조작하기

이동탁 2025. 1. 14. 15:36

 

 

- sObject와 Salesforce 레코드 간의 관계를 설명할 수 있다.

- 특정 sObject 변수를 만들고 사용할 수 있다.

- 일반 sObject를 특정 sObject로 캐스트할 수 있다.

 

Apex는 데이터베이스와 긴밀하게 통합되어 있으므로 Apex에서 직접 Salesforce 레코드 및 해당 필드에 엑세스할 수 있다. Salesforce의 모든 레코드는 기본적으로 Apex에서 sObject로 표시된다.

 

sObject 변수 생성

Account acct = new Account(Name='Acme');

 

DML을 사용하여 Salesforce에서 레코드를 만들고 수정이 가능하다.

DML은 레코드를 삽입, 업데이트, 병합, 삭제 및 복원하는 간단한 명령문을 제공하여 레코드를 관리하는 간단한 방법을 제공한다.

 

DML 문의 종류

 

- insert

- update

- upsert

- delete

- undelete

- merge

 

예시)

 

// Create the account sObject
Account acct = new Account(Name='Acme', Phone='(415)555-1212', NumberOfEmployees=100);
// Insert the account by using DML
insert acct;
// Get the new ID on the inserted sObject argument
ID acctID = acct.Id;
// Display this ID in the debug log
System.debug('ID = ' + acctID);
// Debug log result (the ID will be different in your case)
// DEBUG|ID = 001D000000JmKkeIAF

 

대량 DML

 

단일 sObject 또는 sObject 목록에서 대량으로 DML 작업을 수행할 수 있다.

대량 DML 작업을 수행하는 것은 Apex 트랜잭션당 150개의 문으로 된 DML 제한과 같은 거버너 제한에 도달하는 것을 방지한다.

 

예시)

 

// Create a list of contacts
List<Contact> conList = new List<Contact> {
    new Contact(FirstName='Joe',LastName='Smith',Department='Finance'),
        new Contact(FirstName='Kathy',LastName='Smith',Department='Technology'),
        new Contact(FirstName='Caroline',LastName='Roth',Department='Finance'),
        new Contact(FirstName='Kim',LastName='Shain',Department='Education')};
// Bulk insert all contacts with one DML call
insert conList;
// List to hold the new contacts to update
List<Contact> listToUpdate = new List<Contact>();
// Iterate through the list and add a title only
//   if the department is Finance
for(Contact con : conList) {
    if (con.Department == 'Finance') {
        con.Title = 'Financial analyst';
        // Add updated contact sObject to the list.
        listToUpdate.add(con);
    }
}
// Bulk update all contacts with one DML call
update listToUpdate;

 

Database 메서드

 

Apex에는 DML 작업을 수행하고 DML 문 대응 항목을 미러링하는 메서드를 제공하는 기본 제공 Database 클래스가 포함되어있다.

 

- Database.insert()

- Database.update()

- Database.upsert()

- Database.delete()

- Database.undelete()

- Database.merge()

 

예시)

 

// Create a list of contacts
List<Contact> conList = new List<Contact> {
        new Contact(FirstName='Joe',LastName='Smith',Department='Finance'),
        new Contact(FirstName='Kathy',LastName='Smith',Department='Technology'),
        new Contact(FirstName='Caroline',LastName='Roth',Department='Finance'),
        new Contact()};
// Bulk insert all contacts with one DML call
Database.SaveResult[] srList = Database.insert(conList, false);
// Iterate through each returned result
for (Database.SaveResult sr : srList) {
    if (sr.isSuccess()) {
        // Operation was successful, so get the ID of the record that was processed
        System.debug('Successfully inserted contact. Contact ID: ' + sr.getId());
    } else {
        // Operation failed, so get all errors
        for(Database.Error err : sr.getErrors()) {
            System.debug('The following error has occurred.');
            System.debug(err.getStatusCode() + ': ' + err.getMessage());
            System.debug('Contact fields that affected this error: ' + err.getFields());
 }
    }
}