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

Apex DML 操作

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

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

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

Apex DML ステートメント

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

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

Insert ステートメント

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

構文

insertsObject

insertsObject[]

次の例では、「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 ステートメントに類似しています。

構文

updatesObject

updatesObject[]

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

構文

upsertsObject[opt_field]

upsertsObject[][opt_field]

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

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

省略可能な項目パラメータ 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 は、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 操作には、一致するデータベースシステムメソッドはありません。

メモ

構文

mergesObject sObject

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}

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

メモ