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