別サイトで2014/4/28に投稿した記事です。別サイト閉鎖につき、移転しました。情報が古い可能性があるので、ご注意ください。
概要
Salesforceは、言わずと知れたクラウド上でSFAサービスを提供する会社です。
SFA(Sales Cloud)の他に、カスタマーサービス(Service Cloud)やアプリ基盤サービス(Salesforce1 Platform)などがあります。
今回は、Ruby on Railsで、Salesforce APIを叩いて、Salesforceユーザの一覧と詳細を表示します。
公式サイト
価格
↓ はSales Cloudの価格表です。
http://www.salesforce.com/jp/crm/sales-force-automation/pricing-editions.jsp
タブに、Service CloudやSalesformce1 Platformがあるので、サービスメニューごとに価格を確認できます。
gem
今回使用するgemは https://github.com/heroku/databasedotcom です。
手順
準備
rails new salesforce_api
cd salesforce_api
Gemfileにgemを追加する
# Salesforce
gem 'databasedotcom'
bundle install # gemをインストール
Salesforce APIにアクセスするための情報を集める
Salesforceで接続アプリケーションを作成する
- Salesforceにブラウザでログインする。
- 「設定」→「ビルド」内の「作成」→「アプリケーション」をクリックすると、下の方に「接続アプリケーション」がある。
- 「接続アプリケーション」の横の「新規」をクリックして、接続アプリケーションを作成する。
- 作成した接続アプリケーションのページで「コンシューマ鍵」と「コンシューマの秘密」を入手できる。
*ヘルプの「接続アプリケーションの作成」にこの辺りのことが書いてあります。gemのREADMEには、どこで認証情報が存在しているのか書いていなかったので、見つけるのに少々時間がかかりました。
セキュリティトークンを取得する
セキュリティトークンは、「私の設定」ー「個人用」ー「私のセキュリティトークンのリセット」でリセットすると、セキュリティトークンが登録しているメールアドレスに送られてきます。
環境変数を設定する
export DATABASEDOTCOM_CLIENT_ID=xxx # 接続アプリケーションの「コンシューマ鍵」を設定
export DATABASEDOTCOM_CLIENT_SECRET=xxx # 接続アプリケーションの「コンシューマの秘密」を設定
export DATABASEDOTCOM_CLIENT_USERNAME=xxx # ログインに使用しているEメールアドレスを設定
export DATABASEDOTCOM_CLIENT_AUTHENTICATE_PASSWORD=xxx # ログインに使用しているパスワード+セキュリティトークンの文字列を連結して設定。
- なお、今回は、ユーザ名とパスワードを使う方式で認証しましたが、他に2方式あります。
RailsコンソールでSalesforce APIでアクセスする
Salesforceの認証
rails console
> client = Databasedotcom::Client.new client_id: ENV['DATABASEDOTCOM_CLIENT_ID'], client_secret: ENV['DATABASEDOTCOM_CLIENT_SECRET']
> client.authenticate :username => ENV['DATABASEDOTCOM_CLIENT_USERNAME'], :password => ENV['DATABASEDOTCOM_CLIENT_AUTHENTICATE_PASSWORD']
データの取得
> user_class = client.materialize("User") # "User"クラスを使えるようになる
> User.first # 最初に登録したユーザを取得する
データの更新
自分の別名を更新する例です。
*この操作はデータを変更するので、本番環境では試さないでください。まずは、Developerアカウントなどで実行し、本番環境とは別の環境で試してみてください。
> user_class = client.materialize("User")
> u = User.find_by_Name("YOUR NAME") # 自分のユーザアカウントを取得します。
> u.Alias = "NEW ALIAS" # 試しに新しい別名をセット。
> u.save # 保存します。
- 元に戻すのを忘れずに!
ユーザの一覧と詳細を閲覧する
ユーザを扱うコントローラを追加する
app/controllersの下に、salesforce_users_controller.rbを追加します。
class SalesforceUsersController < ApplicationController
def index
salesforce_client
user_class = @client.materialize("User")
@users = User.all
end
def show
salesforce_client
user_class = @client.materialize("User")
@user = User.find_by_Id(params[:id])
end
private
def salesforce_client
@client = Databasedotcom::Client.new client_id: ENV['DATABASEDOTCOM_CLIENT_ID'], client_secret: ENV['DATABASEDOTCOM_CLIENT_SECRET']
@client.authenticate :username => ENV['DATABASEDOTCOM_CLIENT_USERNAME'], :password => ENV['DATABASEDOTCOM_CLIENT_AUTHENTICATE_PASSWORD']
end
end
ユーザ一覧表示のビューを追加する
app/views/salesforce_usersの下に、ビューファイルを追加します。
index.html.erb
<h1>SalesforceUsers#index</h1>
<table>
<thead>
<tr>
<th>Id</th>
<th>Username</th>
<th>Alias</th>
</tr>
</thead>
<tbody>
<% @users.each do |user| %>
<tr>
<td><%= link_to user.Id, "/salesforce_users/#{user.Id}" %></td>
<td><%= user.Username %></td>
<td><%= user.Alias %></td>
</tr>
<% end %>
</tbody>
</table>
個別ユーザ表示のビューを追加する
show.html.erb
<h1>SalesforceUsers#show</h1>
<p>Username: <%= @user.Username %></p>
<p>Name: <%= @user.Name %></p>
<p>Alias: <%= @user.Alias %></p>
ルーティングの設定
get 'salesforce_users/index' => 'salesforce_users#index'
get 'salesforce_users/:id' => 'salesforce_users#show'
まとめ
他のクラウドAPIに比べて、Salesforceは認証系で多くの情報を求められます。
私も、結構ハマりました。
現時点(2014年4月)で、databasedotcom gemの日本語資料はほぼ皆無なので、ハマったら、素直に英語資料を読んでいくのがいいと思います。
次回は、Salesforce APIとRailsを使って、他のクラウドサービスと連携してみたいと思います。
お楽しみに!
サンプルコードのダウンロード
上記のサンプルコードは、Githubよりダウンロードできます。
https://github.com/fuji3zpg/salesforce_api_with_client