#TableauCRM のレシピで操作したデータを #Salesforce に書き込んだらZapier要らずになった Salesforce データパイプラインについて
最近あまりTableau CRMについて書いてないですね、お久しぶりです。
今回、久しぶりにデータセットを編集しようと思って触っていた所こんな発見がありました。
Salesforceに出力。そういえばそんなことを言っていたような…すっかり忘れていたぞその実装。ということで試していこうと思います。
実は、先日Zapierを使ってHerokuPostgresのレコードをSalesforceに同期するということをやったのですが、これを置き換えられるのではないかと思ったんですよね。
まずは機能を有効にしていきます。Sales Cloudの設定画面から
機能設定>分析>Analytics>設定
へと進み、Salesforce 出力接続を有効化にチェックを入れて保存します。
Salesforce側に同期先のオブジェクトを作成する
データを持ってくるわけなので、それを格納するオブジェクトが必要です。同期先のデータの何をもってくるのかを検討してオブジェクト項目を適宜作成していってください。
データ接続を設定する
次に、Tableau CRMのデータマネージャから、ターゲットとなるデータソースへの接続を設定します。ここでいうと、HerokuPostgresのデータをSalesforceにもっていきたいので、HerokuPostgresの入力接続設定をします。
入力接続が設定できたら、それを選択してテーブルを選択します
続行ボタンを押すと、利用するカラム選択画面に移ります。
注意:接続元のカラムを全て割り当てる必要があるので、Salesforce側に同期しない項目のチェックボックスは外しておきましょう。
同時に、Salesforceへの出力設定もしておきましょう。
レシピを作成します
データソースを先程設定したHerokuPostgresのarticlesを選択。今回は途中でjoinしたりはしないのでそのまま出力ノードをくっつけます。
出力ノードの設定はこんな形
書き込み先を出力接続。接続名は先程設定したSalesforceを選択。オブジェクト名は、書き込みたいオブジェクトを選択しましょう。
演算子はInsert/Update/Upsertが選択できるみたいです。
外部IDというのは、そのキーを使ってUpsertをするというもの。例えば、今回はArticle IDというものを使っていますがこれはHerokuPostgresのテーブルの各レコードについているID項目を使っています。
HerokuPostgres側のレコードを抽出して、Salesforce側のArticle ID(int)という項目に入れるのですが、もし既にこのIDが存在している場合は情報を更新し、存在しない場合はレコードを作成するという設定です。
ここまできたら保存して実行ボタンをおしてみましょう。恐らく成功すると思います。
これでZapierで組んだzapが要らなくなってしまった…課金したばっかなのに…しかもちょっと面倒だったのに…
トラブルシュート
実はこのnote、書いてから2週間ほど放置してあったのですが、レシピ実行時にエラーがでてうまく行かなかったんですよね。それについての共有
Boolean値に気をつけて
PostgreSQLコネクタで取得してきたテーブルをじっくり見てください。Booleanのカラムが0と1で構成されていることに気付くはずです。僕は気付かなかったのでこんなに時間がかかってしまったのですが…
ということで、Boolean項目を使う場合は、出力ノードの手前で変換を噛ましてあげましょう。
日付項目に気を付けて
これは、そんなの当たり前だろという話なのですが、SalesforceのCreatedDateとLastModifiedDateは書き込めません。PostgreSQL側に同等の項目があるのでそれ入れればいいよなって流れで判断してたのですが、これは駄目です。
Salesforce データパイプライン (Data Pipeline)について
CRMAでは100MB/dayという制限があるのですが、これを取っ払ってくれる有料プランがSalesforce Data Pipelineという商品になっています。