Newer Version Available
レコードの挿入と更新
DML を使用すると、新規レコードを挿入して、データベースにコミットできます。同様に、既存のレコードの項目値を更新することもできます。
この例では、3 つの取引先レコードを挿入して既存の取引先レコードを更新する方法を示します。まず、3 つの Account sObject を作成してリストに追加します。次に、1 つの insert ステートメントで取引先のリストを挿入して一括挿入を実行します。その後、2 つ目の取引先レコードをクエリして請求先市区郡を更新し、update ステートメントをコールしてデータベースに変更を保持します。
1swfobject.registerObject("clippy.codeblock-0", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17Account[] accts = new List<Account>();
18for(Integer i=0;i<3;i++) {
19 Account a = new Account(Name='Acme' + i,
20 BillingCity='San Francisco');
21 accts.add(a);
22}
23Account accountToUpdate;
24try {
25 insert accts;
26
27 // Update account Acme2.
28 accountToUpdate =
29 [SELECT BillingCity FROM Account
30 WHERE Name='Acme2' AND BillingCity='San Francisco'
31 LIMIT 1];
32 // Update the billing city.
33 accountToUpdate.BillingCity = 'New York';
34 // Make the update call.
35 update accountToUpdate;
36} catch(DmlException e) {
37 System.debug('An unexpected error has occurred: ' + e.getMessage());
38}
39
40// Verify that the billing city was updated to New York.
41Account afterUpdate =
42 [SELECT BillingCity FROM Account WHERE Id=:accountToUpdate.Id];
43System.assertEquals('New York', afterUpdate.BillingCity);関連レコードの挿入
2 つのオブジェクト間のリレーション (参照関係や主従関係など) がすでに定義されている場合、既存のレコードに関連するレコードを挿入できます。レコードは、外部キー ID を使用して関連レコードに関連付けられます。この外部キー ID はマスタレコードにのみ設定できます。たとえば、新規取引先責任者を挿入する場合、AccountId 項目の値を設定することで、取引先責任者の関連取引先レコードを指定できます。
この例では、取引先責任者の AccountId 項目を設定して、取引先責任者を取引先 (関連レコード) に追加する方法を示します。取引先責任者と取引先は参照関係でリンクされています。
1swfobject.registerObject("clippy.codeblock-1", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17try {
18 Account acct = new Account(Name='SFDC Account');
19 insert acct;
20
21 // Once the account is inserted, the sObject will be
22 // populated with an ID.
23 // Get this ID.
24 ID acctID = acct.ID;
25
26 // Add a contact to this account.
27 Contact con = new Contact(
28 FirstName='Joe',
29 LastName='Smith',
30 Phone='415.555.1212',
31 AccountId=acctID);
32 insert con;
33} catch(DmlException e) {
34 System.debug('An unexpected error has occurred: ' + e.getMessage());
35}
36関連レコードの更新
関連レコードの項目は、同じ DML 操作のコールでは更新できないため、別の DML コールが必要になります。たとえば、新規取引先責任者を挿入する場合、AccountId 項目の値を設定することで、取引先責任者の��連取引先レコードを指定できます。ただし、別の DML コールを使用して取引先自体を更新しない場合、取引先の名前を変更することはできません。同様に、取引先責任者を更新するときに、取引先責任者の関連取引先も更新する場合は、2 つの DML コールを作成する必要があります。次の例では、2 つの update ステートメントを使用して取引先責任者とその関連取引先を更新しています。
1swfobject.registerObject("clippy.codeblock-2", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17try {
18 // Query for the contact, which has been associated with an account.
19 Contact queriedContact = [SELECT Account.Name
20 FROM Contact
21 WHERE FirstName = 'Joe' AND LastName='Smith'
22 LIMIT 1];
23
24 // Update the contact's phone number
25 queriedContact.Phone = '415.555.1213';
26
27 // Update the related account industry
28 queriedContact.Account.Industry = 'Technology';
29
30 // Make two separate calls
31 // 1. This call is to update the contact's phone.
32 update queriedContact;
33 // 2. This call is to update the related account's Industry field.
34 update queriedContact.Account;
35} catch(Exception e) {
36 System.debug('An unexpected error has occurred: ' + e.getMessage());
37}
38