yujiroのプログラミング

勉強内容をアウトプットし、サボらないようにする為のブログ

<DAY208>DMLを使用したDML操作

\ Follow me!! /

●9/17(火)
●学習日数 208日
●学習時間(本日)8時間
●累計学習時間 879.0時間
●一日あたりの平均学習時間 4.21時間

f:id:yujiro0320:20190904163314p:plain


DML を使用したレコードの操作について

データ操作言語 (DML) を使用して Salesforce のレコードを作成および変更します。DML では、シンプルなステートメントを使用してレコードの挿入、更新、マージ、削除、および復元を行うことで、簡単にレコードを管理できます。
Apex はデータ指向の言語であり、Lightning Platform に保存されるため、Salesforce のデータに直接アクセスできます。データソースに接続するために追加の設定が必要な他のプログラミング言語とは異なり、Apex DML ではレコードの管理が容易です。DML ステートメントをコールすることで、Salesforce レコードに対する操作をすばやく実行できます。

引数として insert ステートメントに渡されます。これにより、レコードが Salesforce 内に保持されます。

// Create the account sObject 
Account acct = new Account(Name='Acme', Phone='(415)555-1212', NumberOfEmployees=100);
// Insert the account by using DML
insert acct;

DML ステートメント

insert
update
upsert
delete
undelete
merge

mergeとupsertはSalesforce固有だけど便利なやつ

upsert DML 操作では、既存のオブジェクトが存在するかどうかを判別するために、指定された項目を使用するか、項目が指定されていない場合は ID 項目を使用して、1 つのステートメント内で新規レコードの作成や sObject レコードの更新を行います。

merge ステートメントは、同じ sObject データ型の最大 3 つのレコードを 1 つのレコードにマージし、他のレコードを削除してから、関連レコードを再ペアレント化します。





新規レコードへの ID 項目の自動割り当て


レコードの挿入時、システムによって各レコードに ID が割り当てられます。データベースに ID 値が保持されるだけでなく、DML コールの引数として使用した sObject 変数にも ID 値が自動入力されます。

次の例は、挿入された取引先に対応する sObject の ID を取得する方法を示します。

// 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(こっちで理解する)

次の例では、1 回のコールで取引先責任者のリストを挿入することにより、取引先責任者を一括挿入します。次に、その取引先責任者を一括更新します。

// 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;