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

Apex DML 操作

Apex DML ステートメントまたは Database クラスのメソッドを使用して DML 操作を実行できます。

リード取引開始の場合、Database クラスの convertLead メソッドを使用します。これに相当する DML はありません。

Apex のデータについての詳細は、Apex でのデータの操作を参照してください。

Apex DML ステートメント

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

次の Apex DML 操作を使用できます。

Insert ステートメント

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

構文

insert sObject

insert sObject[]

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

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

メモ

Update ステートメント

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

構文

update sObject

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}

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

メモ

Upsert ステートメント

upsert DML 操作は、既存オブジェクトの有無を確認するために任意のカスタム項目を使用して、1 つのステートメント内で新規 sObject レコードを作成したり、既存の sObject レコードを更新したりします。

構文

upsert sObject​​ opt_external_id

upsert sObject[]​​ opt_external_id

opt_external_id​​ は、組織のデータにすでに存在するレコードを照合するために使用されるカスタム項目を指定する、任意の変数です。カスタム項目は、External Id 属性が選択された状態で作成する必要があります。また、項目に Unique 属性が選択されていない場合、upsert によって誤って重複レコードが挿入されないように、コンテキストユーザは対象オブジェクトに対するオブジェクトレベルの「すべての参照」権限、または「すべてのデータの参照」権限が必要です。

opt_external_id が指定されていない場合、デフォルトで sObject レコードの ID 項目が使用されます。

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

メモ

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

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

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

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

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

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}

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

メモ

Undelete ステートメント

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

構文

undeletesObject | ID

undeletesObject[] | ID[]

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

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

メモ

Merge ステートメント

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

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

メモ

構文

merge sObject sObject

merge sObject sObject[]

merge sObject 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}

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

メモ