RemoteObjectsの削除処理ついて勉強しました。Developers Guideによるといろいろな書き方があるみたいです。RemoteObjectsの処理なので、最初にRemoteObjectsタグを宣言する必要があります。
<apex:remoteObjects > <apex:remoteObjectModel name="Account" fields="Id" /> </apex:remoteObjects>
削除処理だけなら宣言するFieldは"Id"だけで問題ないみたいです。
パターン①
<script type="text/javascript"> function deleteAccount(prmAccountId) { var account = new SObjectModel.Account(); account.del(prmAccountId); return false; } </script>
パータン①の方法ではDELETE処理が完了する前に次の画面遷移の処理が実行されてしまいました。
account. del(prmAccountId); location.href = "/" + prmAccountId;
このような処理で遷移すると削除が実行する前のレコードが表示されます。画面を更新してようやく削除されましたとメッセージが表示されました。
パターン②
<script type="text/javascript"> function deleteAccount(prmAccountId) { var account = new SObjectModel.Account(); account.del(prmAccountId, updateCallback); return false; } function updateCallback(err, ids){ if (err) { alert(err); } else { location.href = "/" + ids; } } </script>
パターン②の場合は、DELETE処理が完了後に次の処理を実行できます。この場合、遷移先のページではレコードが削除されましたとメッセージが表示されます。
パターン③
<script type="text/javascript"> function deleteAccount(prmAccountId) { var account = new SObjectModel.Account(); account.del(prmAccountId, function(err, results) { if (err) { alert(err); } else { location.href = "/" + results; } }); return false; } </script>
パターン②と同じように動作しますがこのように書くこともできます。Createの処理を試していた時にこの方法を使っていたので、RemoteObjectsといえばこの書き方というイメージがありました。
複数レコードの一括削除
対象IDを配列にセットすれば一括で削除することもできるみたいです。
<script type="text/javascript"> function deleteAccount(prmAccountId) { var account = new SObjectModel.Account(); var targetIds = ['001E000000zOgju', '001E000000zOgjp', '001E000000zOQKt']; account.del(targetIds, function(err, results) { if (err) { alert(err); } else { console.log(results); } }); return false; } </script>
処理結果がセットされる"results"から削除対象のIDと件数を確認できるみたいです。