Apex DML 操作
Apex DML ステートメントまたは Database クラスのメソッドを使用して DML 操作を実行できます。
リード取引開始の場合、Database クラスの convertLead メソッドを使用します。これに相当する DML はありません。
Apex のデータについての詳細は、「Apex でのデータの操作」を参照してください。
Apex DML ステートメント
Salesforce のデータを挿入、更新、マージ、削除、および復元するには、データ操作言語 (DML) ステートメントを使用します。
次の Apex DML ステートメントを使用できます。
Update ステートメント
update DML 操作は、個別の取引先、取引先責任者、請求書の明細などの、組織のデータ内にある 1 つ以上の既存の sObject レコードを更新します。update は SQL の UPDATE ステートメントに類似しています。
構文
updatesObject[]
例
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 レコードの更新を行います。
構文
upsertsObject[][opt_field]
upsert ステートメントは、1 つの項目の値を比較して sObject と既存のレコードを照合します。このステートメントをコールするときに項目を指定しないと、upsert ステートメントは sObject の ID を使用して sObject と Salesforce の既存のレコードを照合します。または、照合に使用する項目を指定できます。カスタムオブジェクトの場合、外部 ID とマークされたカスタム項目を指定します。標準オブジェクトの場合、idLookup 属性が true に設定されている項目であれば指定できます。たとえば、取引先責任者またはユーザのメール項目の idLookup 属性は設定されています。項目の属性をチェックするには、『Salesforce および Force.com のオブジェクトリファレンス』を参照してください。
また、sObject レコードが参照項目として設定されている場合、sObject レコードを更新/挿入するために外部キーを使用できます。詳細は、『Salesforce および Force.com のオブジェクトリファレンス』の「データ型」を参照してください。
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 は、delete() の SOAP API ステートメントに類似しています。
構文
deletesObject[] | ID[]
例
次の例では、「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 ステートメントに類似しています。
構文
undeletesObject[] | ID[]
例
1Account[] savedAccts = [SELECT Id, Name FROM Account WHERE Name = 'Trump' ALL ROWS];
2try {
3 undelete savedAccts;
4} catch (DmlException e) {
5 // Process exception here
6}Merge ステートメント
merge ステートメントは、同じ sObject データ型の最大 3 つのレコードを 1 つのレコードにマージし、他のレコードを削除してから、関連レコードを再ペアレント化します。
構文
mergesObject sObject[]
mergesObject ID
mergesObject 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}