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

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 例外処理」を参照してください。

メモ