HerokuConnect一問一答。HerokuConnectは時間の扱いに要注意。料理は火加減、要注意
はい、どうも。 最近、HerokuConnectをつうじてSalesforceにも興味を持ち始めたおっぴーです。
ある特定のプラットフォームに縛られた技術を利用することを、「ベンダーロックイン」と称して遠ざかりたくなるものなのですが、ロックインされると結構、便利で快適というのもまた事実。
本日は、SalesforceとHerokuにどっぷり使って楽をしたい!HerokuConnectを使ってみたい!とお考えの方が、「でも、これってどうなるのかな?」という点について、動作確認をした結果を踏まえてご紹介いたします。
最初に結論
- datetimeの扱いはUTC固定なので要注意
- ファイルや画像は連携できないので別途仕組みが必要
- 価格が謎
- 以上を考慮したうえでも簡単なので利用する価値は十分
日本語はうまく扱えますか?
大丈夫です! HerokuPostgresとSalessforceはともにUTF-8で文字列のデータを管理しています。 文字コードそのものは扱いの難しい要素でありますが、双方がおなじ文字コードを採用していれば複雑な考慮は不要ですね。
レコードの削除や 項目の値の削除は連携できる?
できます!
たとえば、HerokuPostgresでレコードを消したけど、Salesforce上ではレコードが残ってしまわないか? その逆は? その心配は不要です! レコードをそのものを削除した場合も連携中の項目の値を削除した場合も、それぞれその情報が連携されます。 ただし、双方のデータの更新が反映されるのはRead/WriteModeのみですので、連携設定はちゃんと行いましょう。
バッチ処理のような連携は可能?
たとえば、毎週土曜日の深夜1時から一括でデータをHerokuからSalesforceに連携したい(もしくは、その逆も)。
残念ながらできません!
HerokuConnectは一定の間隔で、SalesforceとHerokuPostgresのデータ連携を行うためのサービスです。 間隔は2分から60分までの間で設定できますが、スケジュール管理機能はありません。
このため、毎月1日、毎週土曜日に、や毎晩午前2時になどの定期的な連携を行うことはできません。
日付(Date)もしくは日付・時間(DateTime)はちゃんと連携できる?
日付は大丈夫ですが、日付・時間は残念がら。。。
HerokuConnectとSalesforceでは、datetimeをUTC固定で扱います。
このため、日付・時間をHerokuで更新する場合は、datetimeをUTCで扱うよう注意しましょう。 たとえば、HerokuPostgresのデータを利用するアプリでは、datetimeをJSTに変換して表示し、登録・更新時はUTCで扱うよう注意が必要です。
データ連携でエラーが発生したらどうなるの?
連携しているHerokuアプリに追加されているmemberとcollaboratorにエラーメールが送信されます。
メールアドレスは、Herokuアカウントのメールアドスレスになります。 できれば
- アラート送信先のメールアドレスが設定できるようになる
- 送信したくないアカウントを選べる
ようになると嬉しいですね。
SalesforceのAPI利用制限は本当に関係ないの?
ありません!
現状の画面では、連携時にAPIをどれだけ消費しているか、をみることができます。 が、これはAPI利用制限がHerokuConnectにも適用されていた時の遺産のようなものでしょう。
既存のテーブルとオブジェクトを連携したいんだけど?
非常に残念ですができません。
たとえば、HerokuPostgresに既存のusersというテーブルがあるとします。 このusersというテーブルにたいして、Salesforceのカスタムオブジェクトのサービス利用者(仮にServiceUserとしましょう)のユーザー名を連携させたい、というケースはあるでしょう。
しかしながら、これはできません。
データ連携を行う際には、連携対象のSalesforceのオブジェクト専用テーブルがHerokuPostgres上に作成されます。 上記の場合は、serviceuser__cというテーブルが新たに作成され、データ連携を行うためには、このテーブルを介する必要があります。
このため、Herokuでusersのユーザー名を変更した場合には、serviceuser__cのユーザー名も変更しなければならない、という動きになります。 うーむ。。。おしい。。。
SalesforceのSandbox環境やProduction環境にはつなげるの?
できます!
HerokuConnectの設定時に、Production、Sandbox、CustomDomainの3つから選択可能です。 Herokuの環境も、本番、ステージングをわけておけば、それぞれの環境でHerokuConnectを利用したアプリケーションを動作させることができます。 こうすることで、リリース前のテストもしっかり出来そうですね。
メモ&添付ファイルは連携できる?
コメントをいただいたとおり、Attachmentオブジェクトの選択が可能であることを確認しました。
確認不足で誤記載をしており、失礼いたしました!
主従関係のレコードをHerokuでインサートできるの?
可能です。
詳しいやり方はドキュメントに記載されています。
機会がありましたら、このブログで方法についてご紹介いたしますが、外部IDを主オブジェクトに定義することで、連携が可能になります。
連携時にデータの変換はできる?
これはできません。
たとえば、こんなことがやりたいですよね。
顧客の購入金額にあわせて、ユーザーランクを決定している場合に、 Salesforceでは金額をもっていて、HerokuPostgresでは金額は扱いたくないのでランクコードとしてA、B、Cの文字列として渡したい、という場合。
こうした変換を行う場合は、あらかじめにSalesforceのオブジェクトに変換結果をもっておき、これを連携するという方法になりそうですね。
でも、お高いんでしょう?
無料で利用できるdemoでは、10000行までの相互のデータ連携が可能です。
それ以上の利用の場合は、有償版の利用が必要になりますが、営業さんへのお問い合わせとなるようです。 このため、正確な価格は謎、です。
現状、無料で利用できるdemoは、あくまでも事前検証や開発に利用するものと考えられますが、10000行も連携できれば、十分かも知れませんね。
ということで
HerokuConnectにまつわる疑問について一問一答でした。 これはどうよ?というご質問があるかは、ぜひご連絡ください。分かる範囲でお答えします!
あと2015/09/10に第1回FlectMeetupを開催します!
普段、フレクト社内で行われている勉強会の雰囲気で、外部の方と一緒にお勉強してお酒を飲みたい!という思いで企画したものです。
予定があう方は是非、ご参加ください!
お世話になっております。
添付ファイルの中身はAttachmentオブジェクトのBodyにbaset64エンコードされた状態で連携されるので、実質的には「連携対象」という認識だったのですが間違っておりますでしょうか?
HerokuConnectのドキュメントの記述(対象外の旨)が見つからなかったので、もしよろしければご教示いただければ幸いです。
投稿: | 2015年9月24日 (木) 14:48
コメントありがとうございます!
ご指摘のとおりAttachmentオブジェクトとして、HerokuConnectをつうじて連携設定できることが確認できました。(本文も修正いたしました。)
確認不足の点を、ご指摘いただきありがとうございました。
ちなみに、参考にしたドキュメントは下記のURLの「Heroku Connect does not support image or file sync.」という部分です。
https://devcenter.heroku.com/articles/herokuconnect#faq
画像ファイルの連携についての記載内容を拡大解釈しすぎてしまいました。
投稿: おっぴー | 2015年9月30日 (水) 12:51