こんにちは、CData エンジニアの宮本です。
先日、Power Shell のモジュールとして使える「CData PowerShell Cmdlets」をリリースしました。
いろいろと専用コマンドが用意されていますが、面白いところでは接続先のデータ(データソース)をRDB にレプリケートすることができる同期用コマンドなどもあり、コマンドのパラメータにいくつか設定するだけで利用することができるようになっています。
ということで、今回はPowerShell ISE からSalesforce のデータをローカルのSQLServer にレプリケートする方法をご紹介します。
必要なもの
- PowerShell ISE
- CData Salesforce PowerShell Cmdlets(30日間の評価版あり)
- Salesforce のアカウント
- DB 今回はSQLServer を使用
※CData Salesforce PowerShell Cmdlets 以外は用意しておいてください。
Salesforce PowerShell Cmdlets のインストール
それではインストールしていきましょう。以下のリンクよりインストーラーをダウンロードしてください。
https://www.cdata.com/jp/drivers/salesforce/powershell/
ダウンロード評価版からダウンロードします。
インストーラーを起動すると、この画面が表示されるので次へでそのままインストールを完了させます。
以上でインストールが完了です。
PowerShell ISE でレプリケートコマンドを実行
それではPowerShell ISE を起動してみます。
起動すると右側にモジュール一覧が表示され、その中に先ほどインストールした「SalesforceCmdlets」が存在しているのが確認できます。
SalesforceCmdlets にはデータ取得や更新などの専用コマンドが用意されており、今回は赤枠の「Sync-Salesforce」同期用コマンドを使っていきます。
http://cdn.cdata.com/help/RFF/jp/rcmd/SalesforceCmdlets.htm
Sync-Salesforce コマンドを選択します。
パラメータに接続情報や対象テーブルを指定します。
- Connection:Salesforce への接続情報(ここで同期先のDBも指定します)
- User :Salesforceアカウント
- Password :Salesforceパスワード
- SecurityToken :Salesforceセキュリティトークン
- Cacheconnection :同期先RDBの指定。
"server=SQLServer名;database=SQLServerのDB名;user id=SQLServerアカウント;password=SQLServerパスワード;" - CacheProvider :Microsoft .NET Framework に同梱されているMicrosoft .NET Framework Provider for SQL Server
例)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 でレプリケートしていきますので、画面下部の実行ボタンをクリックします。
22件、SQLServer にレプリケートした結果が返ってきました。
SQLServer を参照すると、「LeadSFCmdlets 」がレコード22件で作成されていることが確認できました。
ちなみに、もう1回実行してみると・・・・
0件という結果になりました。
Salesforce でデータの更新が発生していなかったので、差分更新機能がはたらき0件という結果になったということです。
Syncコマンドを実行すると、同期先に[CDATA_SYNC_STATUS]テーブルというジョブ情報を保持したテーブルが作成されます。そのテーブルの中にはLastModTime という最後にジョブを実行したときの最終レコードの日時がここに設定されますので、2回目以降はこの日時をデータソース側に渡してフィルタリングし,
対象データを絞っています。
では、Salesforce のデータを1件更新した状態で、もう一度実行してみます。
ちゃんと1件更新されたという結果が返ってきました。
もしスケジュール実行するならば、ps1ファイルで保存してタスクスケジューラーなどで実行すれば定期的にSalesforce のデータを同期することができます。
おわりに
いかがでしたでしょうか。1つのコマンドを実行するだけでSalesforce のデータをデータベースに同期することができました。
Salesforce 以外にも200種類以上のデータソースに対応しています。すべて30日間の無料評価版がありますので是非お試しください。
https://www.cdata.com/jp/powershell/