3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Salesforce APIとRailsでSalesforceデータを取得する

Last updated at Posted at 2017-05-18

別サイトで2014/4/28に投稿した記事です。別サイト閉鎖につき、移転しました。情報が古い可能性があるので、ご注意ください。

概要

Salesforceは、言わずと知れたクラウド上でSFAサービスを提供する会社です。
SFA(Sales Cloud)の他に、カスタマーサービス(Service Cloud)やアプリ基盤サービス(Salesforce1 Platform)などがあります。

今回は、Ruby on Railsで、Salesforce APIを叩いて、Salesforceユーザの一覧と詳細を表示します。

公式サイト

http://www.salesforce.com/jp/

価格

↓ は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

API資料

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?