by CData Software Japan | November 24, 2020

PowerShellでSalesforceのデータをRDBへレプリケート:CData Salesforce PowerShell Cmdlets

f:id:sennanvolar44:20201124064713p:plain こんにちは、CData エンジニアの宮本です。

先日、Power Shell のモジュールとして使える「CData PowerShell Cmdlets」をリリースしました。

prtimes.jp

いろいろと専用コマンドが用意されていますが、面白いところでは接続先のデータ(データソース)をRDB にレプリケートすることができる同期用コマンドなどもあり、コマンドのパラメータにいくつか設定するだけで利用することができるようになっています。

ということで、今回はPowerShell ISE からSalesforce のデータをローカルのSQLServer にレプリケートする方法をご紹介します。

必要なもの

※CData Salesforce PowerShell Cmdlets 以外は用意しておいてください。

Salesforce PowerShell Cmdlets のインストール

それではインストールしていきましょう。以下のリンクよりインストーラーをダウンロードしてください。

https://www.cdata.com/jp/drivers/salesforce/powershell/
f:id:sennanvolar44:20201123150206p:plain

ダウンロード評価版からダウンロードします。
f:id:sennanvolar44:20201123150407p:plain

インストーラーを起動すると、この画面が表示されるので次へでそのままインストールを完了させます。
f:id:sennanvolar44:20201123150850p:plain

以上でインストールが完了です。

PowerShell ISE でレプリケートコマンドを実行

それではPowerShell ISE を起動してみます。
起動すると右側にモジュール一覧が表示され、その中に先ほどインストールした「SalesforceCmdlets」が存在しているのが確認できます。
f:id:sennanvolar44:20201123151320p:plain

SalesforceCmdlets にはデータ取得や更新などの専用コマンドが用意されており、今回は赤枠の「Sync-Salesforce」同期用コマンドを使っていきます。
http://cdn.cdata.com/help/RFF/jp/rcmd/SalesforceCmdlets.htm
f:id:sennanvolar44:20201123151905p:plain

Sync-Salesforce コマンドを選択します。
f:id:sennanvolar44:20201123153937p:plain

パラメータに接続情報や対象テーブルを指定します。

例)Connect-Salesforce -User 'xxxxxxxxxxxxxx' -Password 'xxxxxx' -SecurityToken 'xxxxxxxxxxxx' -Cacheconnection 'server=xxxxxxxxxxxxxxxxxxx;database=dbTest;user id=xxxxxx;password=xxxxxxxx;' -CacheProvider 'System.Data.SqlClient'

ちなみにCacheconnection とCacheProvider の設定値を変更すればSQLServer 以外への指定も可能です。詳しくは以下を参照ください。

【Cacheconnection について】

CData ODBC Driver for Salesforce - Cache Connection

【CacheProvider について】

CData ODBC Driver for Salesforce - Cache Provider

続けて、残り部分の設定値についてです。

  • Table:Salesforce の対象テーブル名(不明な場合はこちらを参照)

  • Colums:対象カラム(未設定で全カラム対象)

  • DestinationTable:同期先でのテーブル名(任意の名前で設定可能)

  • Params:条件など

今回は全項目対象/条件なし/LeadSFCmdlets でレプリケートしていきますので、画面下部の実行ボタンをクリックします。
f:id:sennanvolar44:20201124060115p:plain

22件、SQLServer にレプリケートした結果が返ってきました。
f:id:sennanvolar44:20201124060907p:plain

SQLServer を参照すると、「LeadSFCmdlets 」がレコード22件で作成されていることが確認できました。
f:id:sennanvolar44:20201124060609p:plain

ちなみに、もう1回実行してみると・・・・ f:id:sennanvolar44:20201124060842p:plain

0件という結果になりました。
Salesforce でデータの更新が発生していなかったので、差分更新機能がはたらき0件という結果になったということです。

Syncコマンドを実行すると、同期先に[CDATA_SYNC_STATUS]テーブルというジョブ情報を保持したテーブルが作成されます。そのテーブルの中にはLastModTime という最後にジョブを実行したときの最終レコードの日時がここに設定されますので、2回目以降はこの日時をデータソース側に渡してフィルタリングし, 対象データを絞っています。
f:id:sennanvolar44:20201124061529p:plain

では、Salesforce のデータを1件更新した状態で、もう一度実行してみます。
f:id:sennanvolar44:20201124062721p:plain

ちゃんと1件更新されたという結果が返ってきました。

もしスケジュール実行するならば、ps1ファイルで保存してタスクスケジューラーなどで実行すれば定期的にSalesforce のデータを同期することができます。

おわりに

いかがでしたでしょうか。1つのコマンドを実行するだけでSalesforce のデータをデータベースに同期することができました。
Salesforce 以外にも200種類以上のデータソースに対応しています。すべて30日間の無料評価版がありますので是非お試しください。
https://www.cdata.com/jp/powershell/
f:id:sennanvolar44:20201124064131p:plain