Code[ish] jp で少しお話ししました
先日、 Code[ish] JP - ポッドキャスト | Heroku で少しお話しさせて頂く機会がありました。
僕の方は、主にtech系のネタをメインにしていたのですが、「あーそういえば」ということがありましたので、その辺りを補足しようかな、と思います。
Heroku Connect の所感とか悩みどころとか
Salesforce + Heroku 案件で Heroku Connect を使う機会があって、その中で気付いたことなどをもう少しを掘り下げようと思います。
1. 同期するレコード件数は事前に見積もる
Heroku Connectの課金体系は、同期するレコード件数に応じて段階的に課金が発生する(詳細はSalesforceの営業さんに)という具合です。
そんなわけで、例えば今後5年間で同期レコード件数の規模を見積もっておいて、お客さんとは大体のところで合意しておかないと、後でこんがりと燃え上がる...かもしれません。
(知らんですが)
2. Salesforce側のオブジェクトにあるレコードの一部を同期したい
現在のHeroku Connectの仕様上、どーにもならないので頭を切り替えましょう、としか言えない話だと思います。
レコードの一部を同期させたいとなると、こんなところが思いつくと思いますが、結局のところは連携用のオブジェクトを用意することになる(「1.」)と思うので、ガリガリとApexトリガを書いてます...
- 業務上で使用するオブジェクトとは別に、Heroku Connectの連携用として新たなオブジェクトを用意して、業務で使用するオブジェクトと、連携用のオブジェクトをSalesforce内で同期させる(トリガとか使う...など)
- 接続するユーザに共有設定をつけてレコードを絞る
- ただし、heroku側は"View All"が必要と記載しているので、試してみても良いけれど運用上はNGでしょう。。。(知らんですが)
- devcenter.heroku.com
3. 連携するオブジェクトに、変な入力規則とかつけてると連携エラーが頻発してツラい
Salesforce側のオブジェクトは、Heroku Postgresとのデータ連携のゲートウェイになるので、できることならデータはそのまま連携されることが望ましいと思います。「2.」とも少し関連しますが、連携用のオブジェクトから業務で使用するオブジェクトにデータを書き込む際に、業務上のロジックをかませて必要に応じてエラー通知させる(カスタム通知とか、特定のchatter groupに投稿するとか)のが良いのかなぁと考えてます。
Heroku Connectにて、エラーからの回復方法は、こんなところで紹介されていますが、 _trigger_log テーブルをいじるのは意外に面倒かな、とも思います。
devcenter.heroku.com
そんなわけで、Salesforce側の連携用オブジェクトには、あんまり入力規則とかフローとか入れない方が良いと考えています。
4. 選択リスト値のAPI値だけ連携されるけど、実はラベルも欲しい…
Salesforce側で連携するオブジェクトに選択リスト値(単数/複数)を定義することもあると思います。
そして、選択リストのAPI値とラベル値が異なる(API値は英数字のみ、ラベル値は日本語表記 など)こともあると思います。
この時、当たり前の話ですが...Heroku Postgres側にはAPI値だけが連携されて、ラベル値は連携されません。
Herokuで稼働させるWebアプリケーションで値を表示させたい、となるとラベル値も一緒に連携させたいですね。
(さらに言えば、API値とラベル値のセットも一緒に同期してほしい...けど、それはさておき)
結局、API値とラベル値の両方を連携させる必要がある場合には、
- ラベル値を格納するためのテキストフィールドを作っておく
- Apexトリガなどでラベル値を生成して、そのテキストフィールドにセットする
といった工夫が要るのかな、と思います。
ただ、API値とラベル値が一致している場合には、この限りではありませんね。
5. その他
2つのDB間を高頻度にデータ連携する仕組みということもあり、色々と非同期処理を前提にした設計が必要かな、と思うあたりでしょうか。
※Salesforce側で数式定義している項目がHeroku Postgresまで浸透するには時間がかかるよ、など。
そして、やはり便利ですね。使いどころを間違えなければ、非常に強力なサービスだと思います。シンプルですし。
あとはちょっと試してみたいな、と思うあたりでは...
- 複数のHeroku Connectをプロビジョニングして(Connect "A", "B", "C" とします)、1つのSalesforceと繋げる
- サイト"A" にはConnect "A"
- サイト"B" にはConnect "B"
- サイト"C" にはConnect "C"
という具合にすると、複数種のサイトを構築できたりするのかな、と。
(どんなユースケースだ?)
おわり
ゲスト出演してから、結構時間が経ってしまいました。。こういうのはサクッと書けるようになりたいな、と思う今日この頃です。
今後もHeroku Connectと、もっとキャッキャウフフして様々な可能性を探っていきたいな、と思います。
(たぶん