この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

Newer Version Available

This content describes an older version of this product. View Latest

Apex DML 操作

Apex DML ステートメントまたは Database クラスのメソッドを使用して DML 操作を実行できます。リー��取引開始の場合、Database クラスの convertLead メソッドを使用します。これに相当する DML はありません。

Apex DML ステートメント

Salesforce のデータを挿入、更新、マージ、削除、および復元するには、データ操作言語 (DML) ステートメントを使用します。

次の Apex DML ステートメントを使用できます。

Insert ステートメント

insert DML 操作は、個別の取引先、取引先責任者など、1 つ以上の sObject を組織のデータに追加します。insert は SQL の INSERT ステートメントに類似しています。

構文

insertsObject

insert sObject[]

次の例では、「Acme」という名前の取引先を挿入しています。
1Account newAcct = new Account(name = 'Acme');
2try {
3   insert newAcct;
4} catch (DmlException e) {
5// Process exception here
6}

DmlExceptions の処理についての詳細は、「一括 DML 例外処理」を参照してください。

メモ

Update ステートメント

update DML 操作は、個別の取引先や、取引先責任者など、組織のデータ内にある 1 つ以上の既存の sObject レコードを更新します。update は SQL の UPDATE ステートメントに類似しています。

構文

updatesObject

update sObject[]

次の例では、「Acme」という名前の 1 つの取引先の BillingCity 項目を更新しています。
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}

DmlExceptions の処理についての詳細は、「一括 DML 例外処理」を参照してください。

メモ

Upsert ステートメント

upsert DML 操作では、既存のオブジェクトが存在するかどうかを判別するために、指定された項目を使用するか、項目が指定されていない場合は ID 項目を使用して、1 つのステートメント内で新規レコードの作成や sObject レコードの更新を行います。

構文

upsert sObject​​ [opt_field]

upsert sObject[]​​ [opt_field]

upsert ステートメントは、1 つの項目の値を比較して sObject と既存のレコードを照合します。このステートメントをコールするときに項目を指定しないと、upsert ステートメントは sObject の ID を使用して sObject と Salesforce の既存のレコードを照合します。または、照合に使用する項目を指定できます。カスタムオブジェクトの場合、外部 ID とマークされたカスタム項目を指定します。標準オブジェクトの場合、idLookup 属性が true に設定されている項目であれば指定できます。たとえば、取引先責任者またはユーザのメール項目の idLookup 属性は設定されています。項目の属性をチェックするには、『Salesforce のオブジェクトリファレンス』を参照してください。

また、sObject レコードが参照項目として設定されている場合、sObject レコードを更新/挿入するために外部キーを使用できます。詳細は、『Salesforce のオブジェクトリファレンス』の「データ型」を参照してください。

省略可能な項目パラメータ opt_field は、(Schema.SObjectField 型の) 項目トークンです。たとえば、MyExternalID カスタム項目を指定する場合のステートメントは次のようになります。
1upsert sObjectList Account.Fields.MyExternalId__c;

照合に使用する項目に Unique 属性が設定されていない場合、upsert によって誤って重複レコードが挿入されないように、コンテキストユーザは対象オブジェクトに対するオブジェクトレベルの「すべて表示」権限、または「すべてのデータの参照」権限が必要です。

カスタム項目に、項目定義の一部として [ユニーク][「ABC」と「abc」を値の重複として扱う (大文字と小文字を区別しない)] 属性が選択されている場合のみ、カスタム項目による照合では大文字と小文字を区別しません。この場合、「ABC123」は「abc123」と一致します。詳細は、Salesforce オンラインヘルプの「カスタム項目の作成」を参照してください。

メモ

Upsert が Insert と Update を判別する方法

upsert では、レコードを作成するか既存のレコードを更新するかを判別するために、sObject レコードの主キー (ID)、idLookup 項目、または外部 ID 項目を使用します。
  • キーが一致しない場合、新規オブジェクトレコードが作成されます。
  • キーが一度だけ一致したら、既存のオブジェクトレコードが更新されます。
  • キーが複数回一致する場合は、エラーが生成され、オブジェクトレコードは挿入も更新もされません。

この例は、取引先のリストの更新/挿入を実行します。

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

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}

DmlExceptions の処理についての詳細は、「一括 DML 例外処理」を参照してください。

メモ

Undelete ステートメント

undelete DML 操作は、個別の取引先や取引先責任者など、1 つ以上の既存の sObject レコードを組織のごみ箱から復元します。undelete は SQL の UNDELETE ステートメントに類似しています。

構文

undelete sObject | ID

undelete sObject[] | ID[]

次の例では、「Universal Containers」という名前の取引先を復元しています。ALL ROWS キーワードは、削除されたレコードやアーカイブ済みの活動を含め、最上位リレーションと集計リレーションの両方にあるすべての行を照会します。
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}

DmlExceptions の処理についての詳細は、「一括 DML 例外処理」を参照してください。

メモ

Merge ステートメント

merge ステートメントは、同じ sObject データ型の最大 3 つのレコードを 1 つのレコードにマージし、他のレコードを削除してから、関連レコードを再ペアレント化します。

この DML 操作には、一致するデータベースシステムメソッドはありません。

メモ

構文

mergesObject sObject

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}

DmlExceptions の処理についての詳細は、「一括 DML 例外処理」を参照してください。

メモ