DML を使用したレコードの変更

学習の目的

この単元を完了すると、次のことができるようになります。

  • 開発者コンソールのクエリグリッドを使用してデータレコードを直接操作する方法を理解する。
  • DML を使用してデータをデータベースに保持する方法を理解する。
  • DML コマンドを記述する 2 つの方法を特定する。

開発者コンソールでデータを管理する

ここまでで、開発者コンソールで SOQL と SOSL を使用してデータを照会する方法を学習しました。おそらく気づいていなかったと思いますが、開発者コンソールの [Query Results (クエリ結果)] ペインは結果を表示するだけではなく、クエリグリッドとしても機能します。結果グリッドをクリックし、グリッドの下のボタンを使用してデータを挿入、更新、または削除できます。

それでは、試してみましょう。

  1. [設定] で、[<あなたの名前>] > [開発者コンソール] をクリックして開発者コンソールを開きます。
  2. 開発者コンソールで、下部ペインの [Query Editor (クエリエディタ)] タブをクリックします。
  3. 既存のコードを削除して、次のスニペットを挿入します。

    SELECT Id, Name, Industry FROM Account
    
  4. [Execute (実行)] をクリックします。 クエリ結果に、組織内のすべての取引先と合計行数が表示されます。この値に注目してください。

  5. [Insert Row (行を挿入)] をクリックします。 新しい行がグリッドの最上部に追加されます。

  6. 新しい行をダブルクリックして名前と業種を入力しますが、ID 値は空白のままにします。

  7. [Save Rows (行を保存)] をクリックします。 ID 列に値が自動的に表示されたことに注目してください。ID は主キーであり、値はシステムによって生成されます。また、表示されている合計行数が元の値のままであることにも注目してください。

  8. [Refresh Grid (グリッドを更新)] をクリックします。 合計行数が 1 つ増えたことに気づきましたか? 悪くないツールでしょう?

開発者はときにはその場でデータを管理する必要があるため、Salesforce では、その作業をできるだけ簡単にしたいと考えました。INSERT、UPDATE、DELETE ステートメントを入力するよりも便利でしょう。

クエリ結果の右下にあるボタンを使用して Salesforce 内のレコードに直接アクセスすることもできます。では、実際にやってみましょう。

DML とは

最初の単元で学習したように、Salesforce では SOQL を使用してデータを照会しますが、データを管理する場合には DML が使用されます。

.NET 開発者は主に SQL を使用してデータのクエリと管理を行うため、別の言語を使用するのは違和感があるかもしれません。けれども、Salesforce での DML コマンドの操作は 同等の SQL よりもずっと簡単だと気づくでしょう。

Force.com は緊密に統合されているため、データソースの管理について心配することなく、すぐにデータの操作を行うことができます。それが DML の操作が非常に簡単である 1 つの理由です。

DML ステートメント

次の表で、使用できる DML ステートメントを確認してください。いくつかは見覚えがあるものでしょう。これらはほぼ思ったとおりに動作します。詳細は、『開発者ガイド』を参照してください。

ステートメント 説明
insert 新規レコードを挿入します。
update 既存のレコードを更新します。
upsert これは特別な操作で、1 つのステートメントの中で新規レコードを作成し、レコードを更新します。指定された項目を使用して既存のオブジェクトの存在を判定します。または、項目が指定されていない場合は ID 項目を使用します。
delete 既存のレコードを削除します。
undelete 1 つ以上の既存のレコードをごみ箱から復元します。
merge これも特別な操作で、同じオブジェクト種別の 3 つまでのレコードを 1 つのレコードにマージできます。その後、他のレコードは削除し、関連レコードがあれば、その親を変更します。

DML を実行する 2 つの方法

Apex では 2 つの方法で DML ステートメントを実行できます。

  • ステートメント自体を使用: この方法は、SOSL についての単元で取引先と取引先責任者のデータを挿入したときに使用しました。この方法が最も簡単です。覚えていない場合のために、SOSL の単元からのコードの一部を次に示します。DML の insert ステートメントを使用して、1 つの取引先が挿入されています。

    // Add Account
    Account acct = new Account(
        Name='Test Account',
        Phone='(225)555-8989',
        NumberOfEmployees=10,
        BillingCity='Baton Rouge');
    insert acct;
    
  • Database クラスメソッドを使用: Database クラスメソッドを使用する利点は、省略可能な allOrNone パラメータを使用して、操作が部分的に成功することが可能かどうかを指定できることです。このパラメータが false に設定されていると、一部のレコードでエラーが発生した場合、成功したレコードはコミットされます。失敗したレコードについてはエラーが返されます。また、部分的な完了オプションでは、例外を発生させません。

    たとえば、allOrNone パラメータを false に設定して取引先を作成し、成功または失敗の情報を配列で返す場合、次のようになります。

    // Add Account
    Account acct = new Account(
        Name='Test Account',
        Phone='(225)555-8989',
        NumberOfEmployees=10,
        BillingCity='Baton Rouge');
    Database.SaveResult[] results = Database.insert(acct, false);
    

もうひとこと...

デフォルトでは、allOrNone パラメータは true に設定されているため、データベースメソッドは対応する DML ステートメントと同様に動作し、エラーの場合は例外を発生させます。詳細は、公式ドキュメントを参照してください。

DML の達人を目指すなら、「Apex の基礎とデータベース」モジュールを完了してください。部分的な成功を指定してレコードを挿入する方法や関連レコードを挿入する方法についての詳細が含まれています。

リソース

無料で学習を続けましょう!
続けるにはアカウントにサインアップしてください。
サインアップすると次のような機能が利用できるようになります。
  • 各自のキャリア目標に合わせてパーソナライズされたおすすめが表示される
  • ハンズオン Challenge やテストでスキルを練習できる
  • 進捗状況を追跡して上司と共有できる
  • メンターやキャリアチャンスと繋がることができる