JavaScript側でSalesforceのデータを登録できるRemoteObjectsのCreate処理についてちょっと勉強しました。いくつかうまくいかなかったのでまとめておこうと思います。
ハマったところ①:数値項目の登録
数値項目の登録でエラーが発生しました。おそらくデータ型が正しく指定できていないことが原因だと思います。
日付型の場合は"new Date()"で日付型に変換する必要があったのでJavaScriptでの数値型変換で使用する"Number()"とか"parseInt()"など試してみたのですがうまくいきませんでした。
ハマったところ②:複数件一括登録処理
行動(Event)を登録後に、それに紐付く招待ユーザ(EventRelation)を複数件一括登録してみようとしてみたのですがうまくいきませんでした。
通常、登録する値をセットする方法はこんな感じだと思います。
var eventRelation = new SObjectModel.EventRelation(); eventRelation.set('EventId', eventId); eventRelation.set('RelationId', selectUsers[0]); eventRelation.create(function(err, results, event) { // 省略 }
このCreate処理は次のような書き方でも同じように動作します。
var selectUsers = $j('#users').val(); var records = { EventId: eventId, RelationId: selectUsers[0] }; var eventRelation = new SObjectModel.EventRelation(); eventRelation.create(records, function(err, results, event) { // 省略 });
なので複数件登録したい場合は、こんな感じの書き方でいけるかなと試してみたのですが...
var selectUsers = $j('#users').val(); var records = []; for (var i = 0; i < listCnt; i++) { var rec = { EventId: eventId, RelationId: selectUsers[i] }; records.push(rec); } eventRelation.create(records, function(err, results, event) { // 省略 });
無効なパラメータエラーになりました。こういう書き方ではなかったみたいです。。
この数値型の登録エラーと複数件登録の問題が解決できませんでした。RemoteObjectsはまだパイロット版の機能なので、検索してみても情報が少なめで見つけることができませんでした。もうすぐ正式リリースされるみたいなのでそのときに解決できるといいなと思います。
参考リンク
- SFDC:RemoteObjectsのINSERT処理について - tyoshikawa1106のブログ
- Best Practices for Using Remote Objects
- Creating Records with Remote Objects
- An Example of Using Remote Objects with jQuery Mobile
- Using Remote Objects in JavaScript
- Visualforce Remote Objects | Shiva Blog
- Spring’14 Visualforce Remote Objects Introduction
- セールスフォースの豆知識: Visualforce Remote Objectsを使ったデータ更新