ActiveSalesforceというSalesforceのデータベースをActiveRecord経由でアクセスできるアダプタを触ってみました。ちょっとハマった部分があるのでメモしておきます。
インストールと設定
私が試した環境はRails 2.1.0です。Rails 2.xだと、
$ gem install activerecord-activesalesforce-adapter
だけでOK。Rails 1.xだとインストールと設定の手順が違いますのでこちらを参照してください。
インストール後、すぐに下にあるようなコードを書いて動かしてみたのですが、RubyForge: ActiveSalesforce: トラッカー詳細: 19960 defining belongs_to with :dependent => :nullify is broken in edge rails > r8675と同じ事象が発生し動作しませんでした。このチケットにあるパッチをあてたところ、うまく動くように。
次にRailsでプロジェクトを作成し、config/database.ymlを次のように書き換えます。
development: adapter: activesalesforce url: https://www.salesforce.com/services/Soap/u/8.0 username: Salesforceのアカウント password: Salesforceのパスワード|セキュリティトークン
ActiveSalesforceのドキュメントではパスワードだけを指定するように書かれていますが、今のSalesforceでは(ネットワークを信頼済みに設定しない限り)API経由でアクセスする際はパスワードに続けてセキュリティートークンを指定する必要があります。
セキュリティトークンはSalesforceにログインし、[設定] | [私の個人情報] | [セキュリティトークンのリセット] から参照できます。
尚、上記のconfig/database.ymlのサンプルでは、パスワードとセキュリティトークンの間に|がありますが、これは可読性のために入れてあります。
実際に指定するときはパスワードに続けてセキュリティトークンを指定してください。
Salesforceのデータにアクセスする
あとはRailsの世界です。ここではSalesforceの取引先(account)の一覧を出力してみます。accountのコントローラとビューを作成します。コントローラの方はこんな感じ。
def index
@accounts = Account.find(:all)
respond_to do |format|
format.html # index.html.erb
format.xml { render
ml => @accounts }
end
end
ビュー(index.html.erb)はこんな感じ。
<h1>取引先一覧</h1>
<table>
<tr>
<th>取引先番号</th>
<th>取引先名</th>
<th>住所(請求先)</th>
<th>電話</th>
<th>Fax</th>
<th>説明</th>
</tr>
<% for account in @accounts %>
<tr>
<td><%=h account.account_number %></td>
<td><%=h account.name %></td>
<td>
<%=h account.billing_postal_code %>
<%=h account.billing_state %>
<%=h account.billing_city %>
<%=h account.billing_street %>
</td>
<td><%=h account.phone %></td>
<td><%=h account.fax %></td>
<td><%=h account.description %></td>
</tr>
<% end %>
</table>
http://localhost:3000/accountsへアクセスしたらこんな感じに。
うん、普通にRailsアプリですね。とは言え、Salesforceのスキーマを知らないと何もできません。
SalesforceのスキーマはForce.com Web Services API Developer’s GuideのReference – Standard Objectsから参照可能です。
なお、RailsからSalesforceのデータへアクセスする場合、メンバ名を以下のように読み替える必要がありますのでご注意。
| Filed Name(ドキュメントの表記) | Railsのメンバ名 |
|---|---|
| BillingPostalCode | billing_postal_code |
Salesforceを導入するような企業は既に基幹システムを持っているケースも多いと思います。
その場合、Force.com APIを使ってAjaxリクエストでデータを取得したり、バッチを開発したりして既存システムとSalesforceのデータ連係を実現する方法が主流だと思いますが、ActiveSalesforce + Railsという構成で、Railsの生産性の高さを生かしたSalesforce連携システム開発というのも可能性を感じます。
Salesforceに関しては標準のカスタマイズの他に、システム間連携の開発も可能です。そのような案件がありましたら、ぜひご相談ください。連絡先はこちらです。
関連する記事:
- accepts_nested_attributes_forしたモデルの日本語化(Rails 3.1.1)
- カメラペーパークラフトにEF300mm F2.8L IS USM追加
- RailsによるアジャイルWebアプリケーション開発 第2版
- The Rails Way
- MykeepassからDropboxにあるパスワードファイルを参照する方法
おーすごい。参考になります。