2

レコードが存在する場合はレコードを更新し、存在しない場合は新しいレコードを挿入します。

最善のアプローチは何ですか?

レコードをクエリし、変更して更新するかSelect Count()、レコードをクエリして system.queryexception をキャッチする必要がありますか?

これはすべて、REST や JS API からではなく、Apex で行われます。

4

3 に答える 3

3

ここですでに述べたことに加えて、これらの場合に FOR UPDATE を使用して、スーパーフェルが参照しているものを回避します。そう、

Account theAccount;
Account[] accounts = [SELECT Id FROM Account WHERE Name = 'TEST' LIMIT 1 FOR UPDATE];
if(accounts.size() == 1)
   theAccount = accounts[0];
else
   theAccount = new Account();

// Make modifications to theAccount, which is either:
// 1. A record-locked account that was selected OR
// 2. A new account that was just created with new Account()

upsert theAccount;
于 2012-08-28T20:43:40.747 に答える
1

可能であればupsert呼び出しを使用する必要があります。select呼び出しの一部として親行を正しくロックするという問題に行かない限り、選択してから挿入/更新するアプローチは、同時呼び出しの領域に入ると問題になります。

于 2012-08-28T16:08:34.357 に答える
0

リストとisEmpty()関数で試してみます:

List<Account> a = [select id from account where name = 'blaahhhh' Limit 1];

if(a.isEmpty()){
    System.debug('#### do insert'); 
}
else{
    System.debug('#### do update'); 
}
于 2012-08-28T06:48:24.103 に答える