Apex: SOQLで検索したオブジェクトのレコードを更新する
SOQL文でデータを取得する方法はわかったけど、そのデータを更新するにはどうすれば良いかねぇ。
DML操作でできますよ。以下に説明します。
サンプルコード1:取引先(Account)オブジェクトのレコードをクエリし結果をデバッグ出力
取引先(Account)オブジェクトのレコードをSOQLステートメントでクエリし、その結果をデバッグ出力します。
//Account sObject型の acct を宣言し、SOQLステートメントで取引先名が"Acme1"の取引先をクエリする
Account acct = [SELECT Name FROM Account WHERE Name='Acme1'];
//取得結果をデバッグ出力する
System.debug(acct);
//Account sObject型の acct を宣言し、SOQLステートメントで取引先名が"Acme1"の取引先をクエリする
Account acct = [SELECT Name FROM Account WHERE Name='Acme1'];
Account(取引先)オブジェクト型の変数を宣言し、その変数にSOQLのクエリ結果を格納します。
//取得結果をデバッグ出力する
System.debug(acct);
System.debug()メソッドでその変数をデバッグ出力します。
サンプル2:SOQLでクエリした取引先(Account)オブジェクトの単一レコードを更新
//Account sObject型の acct を宣言し、SOQLステートメントで取引先名が"Acme1"の取引先をクエリする
Account acct = [SELECT Name FROM Account WHERE Name='Acme1'];
//BillingCityに値を設定する
acct.BillingCity='Los Angels';
//update文で、acctのレコードを更新する
update acct;
//BillingCityに値を設定する
acct.BillingCity='Los Angels';
SOQLのクエリ結果を格納したacct変数(=取引先レコードが格納されている)の「請求先住所-市区群(BillingCity)」に “Los Angels” を代入します。
//update文で、acctのレコードを更新する
update acct;
updateステートメントでオブジェクトのレコードを更新します。updateステートメントはDML操作のひとつです。
サンプル3:SOQLでクエリした取引先(Account)オブジェクトの複数レコードを更新
サンプル2では、単一のレコードを更新しましたが、このサンプルでは、複数のレコードを一括更新します。SOQLで返ってきたクエリ結果をsObject型のリストに格納し、そのリストを使い各レコードを更新します。
//Account sObject型の accountList を宣言し、SOQLステートメントで取引先名が"Acme"で始まる取引先をクエリする
List<Account> accountList = [SELECT Name FROM Account WHERE Name LIKE 'Acme%'];
//取得結果をデバッグ出力する
System.debug('レコード数:' + accountList.size());
for (Account acct : accountList) {
acct.BillingCity='Los Angels';
System.debug('レコード:' + acct);
}
//update文で、accountListのレコードを更新する
update accountList;
//Account sObject型の accountList を宣言し、SOQLステートメントで取引先名が"Acme"で始まる取引先をクエリする
List<Account> accountList = [SELECT Name FROM Account WHERE Name LIKE 'Acme%'];
Account(取引先)オブジェクト型のリスト accountList を宣言し、そのリストにSOQLのクエリ結果を格納します。
//取得結果をデバッグ出力する
System.debug('レコード数:' + accountList.size());
for (Account acct : accountList) {
acct.BillingCity='Los Angels';
System.debug('レコード:' + acct);
}
accountList リストを for ループで回し、リストのそれぞれの要素、つまりSOQLで返ってきたそれぞれの取引先レコードの「請求先住所-市区群(BillingCity)」に “Los Angels” を代入します。
//update文で、accountListのレコードを更新する
update accountList;
accountList リストを引数としてUpdate ステートメントで一括更新します。
例えば、取引先名が「Acme1」「Acme2」「 Acme3」 という3レコードがあるとして、それら3レコードの請求先住所-市区群(BillingCity)が “Los Angels” に更新されます。System.debugへの出力結果は以下のとおりです。
うまく行きましたか?
以上になります!
コメント