RSSBus Connectを用いてSalesforceからPostgreSQLにAccountデータを同期する方法

# はじめに

昨今業務システムのクラウドサービス活用も進み、マルチクラウド、オンプレ×クラウドのハイブリッドで利用されている企業も多くなってきています。

しかし、各アプリケーションで必要なデータはオーバラップしていることが多く、特に取引先・顧客情報などは様々なアプリケーションで必要かつ利用されていることが実情です。

そこで今回はRSSBus Connectを用いて、Salesforceの取引先企業情報を既存のDBへ同期する方法を紹介したいと思います。

# RSSBus Coonectとは？

https://www.rssbus.com/

RSSBus Connectは、ファイル、データベース、またはクラウドアプリケーションのデータをすべて1つのアプリケーションで簡単に統合することができるソフトウェアです。

アプリケーションとデータの接続を行い、Mrketoなどのマーケティングサービスから得た潜在顧客情報をSalesforce等のSFAに連係したり、バイナリファイル転送・EDIによるプロセスの自動化も行うことが可能です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/2dd6a4e5-c1be-b97f-4fc7-32d91e5d5d6e.png)

RSSBus Connectは以下のようにフロー形式のUIで各データソースを繋ぐようにデータ連携のプロセスを開発することが可能です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/106a418a-2c3a-fd90-f0fa-53e284a9784c.png)

# 本記事で実装するシナリオ

本記事では、Salesforceで発生した取引先（Account）の情報をPostgreSQLの既存のテーブル（例えばCustomer）にUpsertする方法をお伝えします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/b11328aa-336e-8625-d543-ae219e7de810.png)

以下のSalesforceのデータを

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/566dcfee-e47e-4dad-aa72-c629e8a4062e.png)

PostgreSQLのテーブルへ同期しています。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/4ea4dfe5-8533-d769-bbb6-62dc4e319a50.png)

# 事前準備

## RSSBus Connectのダウンロード・インストール

まず、RSSBus Connectをダウンロードします。

RSSBus Connectは30日間無償の試用版が提供されているので、以下からダウンロードしてください。

https://www.rssbus.com/download/

本記事ではWindows版（Windowsサービスで実行）を使用します。

ダウンロード後、インストーラーが立ち上がるので、ダイアログに沿ってインストールを実施します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/077b6fba-ede4-63bf-9583-0b2c5c2fee38.png)

インストール後自動的にRSSBus Connectの画面が立ち上がるので、インストーラーで設定したID・PWを用いてログインします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/d3de5331-5b9f-a9bf-ada8-3173bb6f755f.png)

ログイン後の画面でトライアルキーのインストールができるので［Activate 30-Day Trial］をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/520f87d0-0531-55cf-f7b7-53aa3d209f49.png)

Name, Emailなどの必要情報を入力の上、ライセンス規約に同意し、［Activate Trial］をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/aae8312b-52ad-65ce-08f1-108598049c39.png)

以上で、RSSBus Connectのインストールは完了です。

## Salesforce Portのダウンロード

続いて本フローを作成するにあたり必要となるSalesforceのモジュール（RSSBus ConnectではPortと呼びます）を追加でインストールします。

RSSBus Connectでは標準でも多様なPortが備わっていますが、以下のページから追加でPortをダウンロードし、機能を拡張することが可能です。

https://www.rssbus.com/apps/?tag=CRM

Port一覧からSalesforceをクリックし

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/aafe000c-6bb1-7591-6fc9-73fe2b6e1bfa.png)

［Download Port］をクリックすることで、インストーラーを入手できます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/afafc623-37dc-ad0f-af71-7bc2e56e6e85.png)

Portインストーラーはダイアログに沿って進めるだけで簡単にインストールすることが可能です。

## PostgreSQLのテーブル構成

本記事では以下のようなPostgreSQLのテーブルを構成し、データの同期先としています。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/ae7ebf51-792b-43ef-8d0b-df68ea2daec3.png)

# フローの作成

## 作成手順

それでは、実際にフローを作成していきたいと思います。

本記事では、前述の通り、Salesforceから以下のようなフローを作成します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/106a418a-2c3a-fd90-f0fa-53e284a9784c.png)

大まかな手順は以下の通りです。

RSSBus Connectでは、それぞれの処理単位であるPortを構成し、つなぎ合わせることで一連のフローを形作ることが可能です。

1. Salesforce のデータを受信するPortの構成

2. PostgreSQL へデータを送信するPortの構成

3. SalesforceのデータをPostgreSQLへ送信するための変換を行うPortの構成

4. 各Portの接続

## Salesforce Receive Portの構成

まず最初にSalesforceのデータを受信するためのPortを構成します。

画面上のメニューから［FLOW］を選択すると、フローデザイナーの画面へ移動します。この画面で基本的なフローの作成が可能です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/c3ac40a7-d4f3-c68e-b555-5e95ab2c5baf.png)

左メニューにSalesforceのPortがあるので、ドラッグアンドドロップでキャンパスに配置します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/af4d54ff-7c06-5f88-50f4-b43a4e7a52c8.png)

PortのNameの入力が求められるので、任意の名称を入力の上［＋Create Port］をクリックします。

なお、Port Nameは重複できませんので、注意していください。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/fd707b51-7660-4c5b-7138-2b5c1598f018.png)

配置したSalesforce Portをクリックすると、画面右にPortのプロパティペインが表示されるので、Salesforceへの接続情報となる［User］［Password］［Security Token］を入力し、［Save Changes］をクリックします。なお［Test Connection］をクリックすることで、接続情報に問題が無いかどうかを確認することが可能です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/0809da39-56ca-9d51-dbfd-20ae7e995cba.png)

次にこのPortでSalesforce上のどのデータを受信するかを設定します。

Portのプロパティペインの下にあるMappings から［Output］を選択し、［＋］ボタンから［Table or View］をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/209ce46e-9361-1fad-4745-a2048c66d381.png)

クリック後、Salesforceのテーブルとビュー一覧が表示されるので、［Account］を選択し［Next］をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/d4e6c591-234d-bd99-706d-eea7d22f0b25.png)

この画面で取得するカラムと取得の条件を設定することができます。

今回は特定のカラムのデータを都度全件取得するように設定します。

任意のカラムを選択し、［Create］をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/3630a360-ede7-9dc6-be35-ea4859a63fd1.png)

対象のテーブルが追加されたことを確認し、［Save Changes］をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/c316c2bd-7db4-0ac2-5fd1-017f7288d187.png)

Receiveの設定は初期値では手動実行状態になっているので、［Automation］タブから自動処理に設定を変更します。

データの送信は必要無いため［Send］のチェックは外し、［Receive］のチェックを入れて、任意の実行間隔を設定します。

今回はDefaultのまま、60分間隔としました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/80d97051-5e51-3cf6-f08a-46f7459c66b3.png)

以上で、Salesforceのデータ取得用Portの構成は完了です。

## PostgreSQL Sent Port の構成

続いて、PostgreSQLへデータを送信するためのPortを構成します。

先程と同じようにPortの一覧からドラッグアンドドロップでPostgreSQLのPortをキャンパスへ配置します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/f88e66b0-1a05-b128-6ad6-8dfcacf7d042.png)

任意のPort Nameを入力の上［＋Create Port］をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/aa0fc6ed-b1d4-aa78-b8d0-f5f608328680.png)

配置したPostgreSQL Portを選択し、PostgreSQLへの接続情報［Host］［Port］［Database］［User］［Password］を入力の上、［Save Changes］をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/76458bf1-d297-695b-2ea5-720817b93800.png)

今度はデータを送信するためのPortのため、Mappingsから［Input］を選択し、［＋］ボタンから［Table or View］をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/f85df487-a87e-87c3-729c-87b4f660fa81.png)

事前に作成しておいた、［Customer］テーブルを選択し［Next］をクリック

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/31f70c12-2804-d397-d544-5b4f43651bd4.png)

挿入対象のカラムを選択の上［Create］をクリックします。

なおInput用PortはKeyカラムが存在する場合、自動的にUpsert処理を実施します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/2595c550-784d-4e90-5314-6171e53e43d6.png)

対象テーブルが追加されたことを確認後、［Save Changes］をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/a5aebd5b-b534-cac6-2604-4a5a5d2662ab.png)

以上で、PostgreSQLへのSend Portの構成は完了です。

## MAP Port の構成

続いて、SalesforceのデータをPostgreSQLに連係できるように、データの形式を変換するためのMAP Portを構成します。

RSSBusは内部的には1レコード・1XMLファイル単位で処理するよう設計されており、そのXMLの構成に準じて、データの変換や挿入が実施されます。

今回は、SalesforceのAccountテーブルから取得したデータ（XMLフォーマット）を、PostgreSQLのCustomerテーブルへ挿入できるデータ変換処理をこのMAP Portを用いて構成します。

先程と同様に左のPort一覧から今度は［MAP］Portをドラッグアンドドロップでキャンパスに配置します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/f0683dd9-c78d-8d1e-fed0-3008e6510411.png)

任意のPort Nameを入力の上、［Create Port］をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/f38a6d4e-5c6a-73d1-479e-6e3c060dfc69.png)

MAPは元となるXMLファイルをベースにすることで簡単に構成することができます。

事前に設定したSalesforce Receive Portでは以下のようなデータが送られるので、このファイルをアップロードします。

```xml

<Items>
	<Account>
		<Id>0010I00001c0vLnQAI</Id>
		<BillingStreet>ミューア ロード 9068</BillingStreet>
		<Name>シティ パワー &amp; ライト</Name>
	</Account>
</Items>

```

SourceFileから［Select］→［Upload Sample File］をクリックし

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/14d7a03c-b947-89df-c1fd-2bdd6a7c9c69.png)

上記XMLファイルを選択の上、［Upload］をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/dee3e034-8336-03ea-c454-39e8cf6195b1.png)

続いて送信先です。送信先は以下のようなXMLフォーマットとなります。

```xml

<Items>
  <Customer>
    <Guid key="true" />
    <AccountName />
    <Address />
  </Customer>
</Items>

```

同じように今度は［Destination File］から［Select］→［Upload Sample File］をクリックし

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/832a201f-7440-5fda-5921-12751e3a4545.png)

上記XMLファイルを選択の上［Upload］をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/0d972ab8-b25f-6ca4-ad18-30cb322666c4.png)

各ファイルをアップロード後、下のMapping画面にそれぞれのXMLフィアルを元にした項目一覧が表示されるため、任意の項目同士をマッピングします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/8a415f85-a73f-b3a8-ffcc-e793d9ce2216.png)

マッピング完了後、［Save Changes］をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/298fba75-cdd8-b508-ef8a-74737147bee8.png)

以上でMAP Portの構成は完了です。

## 各Port の接続

最後に、それぞれ構成したPortをコネクタで接続します。

それぞれの始点と終点をドラッグアンドドロップで紐づけます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/14a389a9-3e23-0819-71d2-13116cfc92dc.png)

以下のように紐づけたら、画面右下の［保存］マークをクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/28077f38-d2ed-65c9-680c-c79785d8dca0.png)

以上で、すべて構成が完了しました。

## 手動実行

それでは、実際に実行してみましょう。

今回の設定では60分ごとにSalesforce のReceive Portがデータを受信し、処理を開始しますが、手動で実行することも可能です。

Salesforce Portを選択し［Receive］タブを選択し［Receive］ボタンをクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/40d05d77-383d-538e-3be5-bb6b13ece7c9.png)

自動的にデータが取得され、処理が行われます。

## 実行ログの確認

RSSBus Connectは各ポートから実行ログを確認することが可能です。

Salesforce Receive Portは、Receiveタブから取得した結果生成されたXMLの履歴を確認できます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/ffd05303-3523-5d48-98e4-8b271673e9b6.png)

Map Portは変換結果を［Send］タブから確認できます。File Nameをクリックすることで、変換後に生成されたXMLファイルをダウンロードすることも可能です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/fece3ac6-477f-3adc-da57-a6f31e9eb3b4.png)

PostgreSQLでは、［Send］タブから、データベースへの送信結果を確認することができます。

StatusがSentになっているものは正常に処理されたデータとなります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/56301/cb32074a-735f-1e75-81c6-85fca9ff100d.png)

# おわりに

いかがでしたでしょうか。もともとEDIの機能が中心であったため、XMLファイルに都度変換して、各Portでやり取りを行っているという点を理解することがRSSBus Connectを用いた開発を行う上でのポイントとなります。

是非様々なクラウド・アプリケーション連係シナリオで活用してみてください。

また、RSSBus Connectでは、下記にようなKnowledgeやドキュメントがOnline上で公開されているので、是非参考にしてみてください。

Sample Package では、各種シナリオに応じたフローがダウンロードし、自身のRSSBusへインストールの上、設定値などが確認できるので、とても参考になるかと思います。

Online Knowledge Base

https://www.rssbus.com/kb/

Sample Package

https://www.rssbus.com/examples/

Product Document

http://cdn.rssbus.com/help/ARD/mft/