JavaScriptからSFDCのデータにアクセスできるRemoteObjectsのINSERT処理についてです。
RemoteObjectsでクエリを実行してレコードを取得する処理の場合は、apex:remoteObjectFieldで取得する項目を指定する必要があると思いますが、INSERTの場合はそれぞれの項目を宣言する必要はないみたいです。
次のようにremoteObjectModelでオブジェクトのみ宣言していればINSERT処理を実行することができました。
<apex:remoteObjects > <apex:remoteObjectModel name="Opportunity" fields="Id" /> </apex:remoteObjects>
RemoteObjectsで登録する項目と値のセットは次のような処理で行います。
var opportunity = new SObjectModel.Opportunity(); opportunity.set('Name', $j('#oppName').val()); opportunity.set('CloseDate', new Date($j('#closeDate').val())); opportunity.set('Amount', $j('#amount').val()); opportunity.set('IsPrivate', $j('#isPrivate').prop('checked')); opportunity.set('Description', $j('#description').val()); opportunity.set('StageName', 'Prospecting');
上の「new SObjectModel.Opportunity()」のOpportunity()はapex:remoteObjectModelで指定した名称になります。
登録する情報を準備したら次の処理でINSERTを実行できます。
opportunity.create(function(err, results, event) { if (err) { // 入力規則や必須判定でエラーが発生した場合 alert(err.message); } else { // INSERT処理が正常に実行された場合 console.log(results); console.log(results[0]); } });
エラーが発生した場合は「err」の変数にエラー情報がセットされます。「err.message」と指定することでエラーメッセージを取得できます。ただし、これで取得できるエラーメッセージはユーザ向けではない場合もあるので必要に応じて判定処理を用意した方が良さそうです。
必須エラー発生に取得できたメッセージ
入力規則エラー発生時に取得できたメッセージ
簡単に確認してみたところで必須項目の未入力エラー時はAPI名が表示されてしまったのであまり適切なメッセージではありませんでした。入力規則エラーの場合は指定したエラーメッセージのみ表示されたのでこのまま利用できそうです。
INSERT処理が正常に実行された場合、処理結果はresultsの部分にArray[]としてセットされました。resultsから取得できる情報はIDの項目値だけみたいです。ID以外の項目の値は取得できませんでした。
実際にRemoteObjectsで登録処理を実行したときのデモ動画です。
追記
関連記事書きました。
SFDC:RemoteObjectsのCreate処理でハマってる話 - tyoshikawa1106のブログ