Newer Version Available
sObjects のリスト
リストを使用して、sObject を保存できます。リストは、SOQL クエリを使用するときに便利です。SOQL クエリは sObject データを返し、このデータを sObject のリストに保存できます。また、1 回のコールでの sObject のリストの挿入など、一括処理の実行にリストを使用することもできます。
sObject のリストを宣言するには、<> 文字で囲まれた sObject 型の前に List キーワードを使用します。次に例を示します。
1// Create an empty list of Accounts
2List<Account> myList = new List<Account>();SOQL クエリによるリストの自動入力
List 変数を SOQL クエリの結果に直接割り当てることができます。SOQL クエリは、返されたレコードが入力された新しいリストを返します。宣言された List 変数に、クエリされるものと同じ sObject が含まれていることを確認してください。または、汎用 sObject データ型を使用することもできます。
この例では、取引先のリストを宣言して SOQL クエリの戻り値に割り当てる方法を示します。このクエリは、Id 項目と Name 項目を含む最大 1,000 個の取引先レコードを返します。
1// Create a list of account records from a SOQL query
2List<Account> accts = [SELECT Id, Name FROM Account LIMIT 1000];リスト要素の追加と取得
プリミティブデータ型のリスト同様、Apex で提供される List メソッドを使用して、sObject リストの要素にアクセスして設定できます。次に例を示します。
1List<Account> myList = new List<Account>(); // Define a new list
2Account a = new Account(Name='Acme'); // Create the account first
3myList.add(a); // Add the account sObject
4Account a2 = myList.get(0); // Retrieve the element at index 0一括処理
1// Define the list
2List<Account> acctList = new List<Account>();
3// Create account sObjects
4Account a1 = new Acount(Name='Account1');
5Account a2 = new Acount(Name='Account2');
6// Add accounts to the list
7acctList.add(a1);
8acctList.add(a2);
9// Bulk insert the list
10insert acctList;レコード ID の生成
Apex は、リストがデータ操作言語 (DML) ステートメントによってデータベースに正常に挿入または更新されると、sObject リストの各オブジェクトに ID を自動的に生成します。従って、sObjects のリストに同じ sObject が複数含まれる場合は、それが null ID を持つ場合であっても、sObject のリストの挿入や更新は行えません。この場合、2 つの ID がメモリ内の同じ構造に書き込まれなければならないことになり、これは不正処理となります。
たとえば、次のコードブロックの insert ステートメントは、同じ sObject (a) への 2 つの参照が含まれるリストを挿入しようとするため、ListException を生成します。
1try {
2
3 // Create a list with two references to the same sObject element
4 Account a = new Account();
5 List<Account> accs = new List<Account>{a, a};
6
7 // Attempt to insert it...
8 insert accs;
9
10 // Will not get here
11 System.assert(false);
12} catch (ListException e) {
13 // But will get here
14}sObject の一次元リストの配列表記の使用
または、配列表記 (角括弧) を使用して、sObject のリストを宣言して参照することもできます。
1Account[] accts = new Account[1];1accts[0] = new Account(Name='Acme2');sObject リストの配列表記を使用したその他いくつかの例を次に示します。
| 例 | 説明 |
|---|---|
|
要素のない取引先リストを定義します。 |
|
3 つの取引先にメモリが割り当てられた取引先リストを定義します。最初の位置に新しい取引先オブジェクト、2 番目の位置に null、3 番目の位置に別の新しい取引先オブジェクトが割り当てられます。 |
|
新しいリストで取引先責任者リストを定義します。 |