Apex DML 操作
Apex DML ステートメント
Salesforce のデータを挿入、更新、マージ、削除、および復元するには、データ操作言語 (DML) ステートメントを使用します。
次の Apex DML ステートメントを使用できます。
Update ステートメント
update DML 操作は、組織のデータ内の個別の取引先、取引先責任者など、1 つ以上の既存の sObject レコードを変更します。update は、SQL の UPDATE ステートメントに類似しています。
構文
update sObject[]
例
1Account a = new Account(Name='Acme2');
2insert(a);
3
4Account myAcct = [SELECT Id, Name, BillingCity FROM Account WHERE Id = :a.Id];
5myAcct.BillingCity = 'San Francisco';
6
7try {
8 update myAcct;
9} catch (DmlException e) {
10 // Process exception here
11}Upsert ステートメント
upsert DML 操作では、既存のオブジェクトが存在するかどうかを判別するために、指定された項目を使用するか、項目が指定されていない場合は ID 項目を使用して、1 つのステートメント内で新規レコードの作成や sObject レコードの更新を行います。
構文
upsert sObject[] [opt_field]
upsert ステートメントは、1 つの項目の値を比較して sObject と既存のレコードを照合します。このステートメントをコールするときに項目を指定しないと、upsert ステートメントは sObject の ID を使用して sObject と Salesforce の既存のレコードを照合します。または、照合に使用する項目を指定できます。カスタムオブジェクトの場合、外部 ID とマークされたカスタム項目を指定します。標準オブジェクトの場合、idLookup 属性が true に設定されている項目であれば指定できます。たとえば、取引先責任者またはユーザーのメール項目の idLookup 属性は設定されています。項目の属性をチェックするには、『Salesforce のオブジェクトリファレンス』を参照してください。
また、sObject レコードが参照項目として設定されている場合、sObject レコードを更新/挿入するために外部キーを使用できます。詳細は、『Salesforce のオブジェクトリファレンス』の「データ型」を参照してください。
1upsert sObjectList Account.Fields.MyExternalId__c;照合に使用する項目に Unique 属性が設定されていない場合、upsert によって誤って重複レコードが挿入されないように、コンテキストユーザーは対象オブジェクトに対するオブジェクトレベルの「すべて表示」権限、または「すべてのデータの参照」権限が必要です。
例
この例は、取引先のリストの更新/挿入を実行します。
1List<Account> acctList = new List<Account>();
2// Fill the accounts list with some accounts
3
4try {
5 upsert acctList;
6} catch (DmlException e) {
7
8}次の例では、既存の一致するレコード (ある場合) の外部キーを使用して取引先のリストの更新/挿入を実行します。
1List<Account> acctList = new List<Account>();
2// Fill the accounts list with some accounts
3
4try {
5 // Upsert using an external ID field
6 upsert acctList myExtIDField__c;
7} catch (DmlException e) {
8
9}Delete ステートメント
delete DML 操作は、個別の取引先や取引先責任者など、1 つ以上の既存の sObject レコードを組織のデータから削除します。delete は、SOAP API の delete() ステートメントに類似しています。
構文
delete sObject[]
例
次の例では、「DotCom」という名前のすべての取引先を削除しています。
1Account[] doomedAccts = [SELECT Id, Name FROM Account
2 WHERE Name = 'DotCom'];
3try {
4 delete doomedAccts;
5} catch (DmlException e) {
6 // Process exception here
7}Undelete ステートメント
undelete DML 操作は、個別の取引先や取引先責任者など、1 つ以上の既存の sObject レコードを組織のごみ箱から復元します。undelete は、SQL の UNDELETE ステートメントに類似しています。
構文
undelete sObject[] | ID[]
例
1Account[] savedAccts = [SELECT Id, Name FROM Account WHERE Name = 'Universal Containers' ALL ROWS];
2try {
3 undelete savedAccts;
4} catch (DmlException e) {
5 // Process exception here
6}Merge ステートメント
merge ステートメントは、同じ sObject データ型の最大 3 つのレコードを 1 つのレコードにマージし、他のレコードを削除してから、関連レコードを再ペアレント化します。
構文
merge sObject sObject[]
mergesObject ID
merge sObject ID[]
最初のパラメーターは、他のレコードがマージされる主レコードを表します。2 番目のパラメーターは、マージされてから削除される 1 つ以上の他のレコードを表します。これらのその他のレコードは、1 つの sObject レコードまたは ID、または 2 つの sObject レコードまたは ID のリストとして、merge ステートメントに渡すことができます。
例
次の例では、「Acme Inc.」と「Acme」という名前の 2 つの取引先を 1 つのレコードにマージしています。
1List<Account> ls = new List<Account>{new Account(name='Acme Inc.'),new Account(name='Acme')};
2insert ls;
3Account masterAcct = [SELECT Id, Name FROM Account WHERE Name = 'Acme Inc.' LIMIT 1];
4Account mergeAcct = [SELECT Id, Name FROM Account WHERE Name = 'Acme' LIMIT 1];
5try {
6 merge masterAcct mergeAcct;
7} catch (DmlException e) {
8 // Process exception here
9}