旅行業の営業担当者のための REST: Salesforce.com の Google データの使用

Lane LiaBraaten、Google デベロッパー プログラム
2007 年 11 月

はじめに

Salesforce.com と Google は人気の「Software as a Service(Software as a Service)」アプリケーションをホストしています。どちらの組織も API を提供しています。これにより、デベロッパーはこれらのアプリケーションを強化する大規模なデータストアにアクセスできます。この 2 つの API の組み合わせにより、さまざまな処理が可能になります。G Suite は、企業での使用頻度が高まっています。Salesforce.com では、カスタム ビジネス アプリケーションを構築するための広範なプラットフォームを構築しているため、デベロッパーの皆様は Google と Salesforce.com の機能を結び付けて活用する機会が多くあります。

この記事では、RESTful API を使用してエンタープライズ マッシュアップを構築する方法を説明します。Salesforce.com プラットフォームや Google Data プロトコルを使い始めたばかりであっても問題ありません。開発環境の設定、既存の Salesforce.com と Google マッシュアップのインストール、独自のマッシュアップの作成をお手伝いします。

Salesforce.com の皆様

私と同じように Salesforce.com の新規広告主様が Apex Developer Network で ADN のデベロッパー アカウントを登録する必要があります。デベロッパー アカウントは、完全な機能を備えた Salesforce.com アカウントと、Apex Wiki掲示板へのアクセスを提供します。

次に、Apex Toolkit for Eclipse を取得します。このツールキットには、Java 1.5Eclipse 3.2.2 以降が必要です。Eclipse の使い方をご存じであれば、ツールキットのソフトウェア アップデート サイトは http://www.adnsandbox.com/eclipsetoolkit/10.0/ です。Eclipse プラグインについて知らない場合や、インストール中に問題が発生した場合は、Apex Wiki で詳細なインストール手順をご覧ください。

ツールキットをインストールすると、Eclipse のヘルプシステムに統合された Apex ヘルプ コンテンツにアクセスできるようになります。Eclipse では、[Help] > [Help Contents] > [Apex Toolkit for Eclipse] に移動してこのコンテンツを表示します。ヘルプリソースの 1 つに、新しいプロジェクトの作成、S-Control、クラス、トリガーの追加の方法を説明するクイックスタート チュートリアルがあります。Apex コードを利用したことがない方は、先に進む前に、このチュートリアルで Apex プロジェクトを作成してください。

Google カレンダーに予定を書き出す

Ron Hess が Google カレンダー マッシュアップ アプリケーションを作成して、Salesforce.com から Google カレンダーに予定を書き出せるようにしました。また、マッシュアップの仕組みを説明する記事も執筆しています。構築方法を示す Google スプレッドシート アプリケーションは、Ron の Google カレンダーのマッシュアップの後にモデル化されます。Ron、ありがとうございます。

Salesforce.com のパワーユーザーであれば、Ron の Google カレンダー アプリケーションを説明なしで統合して使用できる可能性があります。最初は少し助けが必要なので、Ron のアプリの動作を確認しました。

  1. アプリケーションをインストールします。
    • Google カレンダーのマッシュアップ ページに移動して、[今すぐ入手] をクリックします。
    • ADN 認証情報を入力して、[続行] をクリックします。
    • 利用規約を確認し、[続行] をクリックします。
    • [パッケージの内容を調べる] ページで [次へ] をクリックします。
    • セキュリティ レベルを選択し、[次へ] をクリックします。
    • [Install] をクリックします。
  2. Salesforce.com AJAX プロキシの設定
    • [管理設定] メニューで、[セキュリティ管理] | [リモートサイトの設定] をクリックします。
    • [新規リモートサイト] をクリックします。
    • [リモートサイト名] に「Google」と入力し、[リモートサイト URL] には https://www.google.com を使用します。
    • [保存] をクリックします。
  3. [イベントの詳細] ページに [Google に追加] ボタンを追加します。
    • [App Setup] メニューで、[Customize | Activities] | [Event Page Layouts] をクリックします。
    • [イベント レイアウト] 行の [編集] をクリックします。
    • [詳細ページのボタン] 領域をダブルクリックします。
    • [Google に追加] をハイライト表示し、右(>)矢印をクリックしてボタンを追加します。
    • [OK] をクリックします。
    • [ページ レイアウトのプロパティ] ページで [保存] をクリックします。
  4. 予定を書き出す
    • 左上の [ホーム] をクリックしてカレンダーを表示します。
    • イベントがない場合は、[New Event] をクリックしてイベントを作成します。
    • イベントをクリックして [イベントの詳細] ページを表示します。
    • [Google に追加] ボタンをクリックします。
    • JavaScript アラートで [OK] をクリックします。
    • 自分の Google ユーザー名とパスワードでログインします。
    • [アクセスを許可] をクリックして、Salesforce アプリケーションに Google カレンダーへの書き込み権限を付与します。
    • Google カレンダーで予定を表示する

Google スプレッドシート アプリケーションの構築

Salesforce.com のページ内を移動するのは面倒で、コードを記述する準備ができているかもしれません。ここでも Eclipse を起動すると、作成した Apex プロジェクトに Ron の Google カレンダー アプリの S-Control が含まれていることがわかります。これは、Apex Toolkit for Eclipse が Salesforce.com と常に同期しているためです。

認証コントロールなど、Google カレンダーのマッシュアップの一部の機能を再利用して、独自の Google データアプリを構築できます。このセクションの残りの部分では、Salesforce.com の連絡先を Google スプレッドシートにエクスポートするアプリを作成する方法について説明します。

シンプルな S-Control を公開する

S-Control は、Salesforce.com によってホストされ、ユーザーがアプリケーションにアクセスしたときにウェブブラウザで実行されるファイルです。S-Control には、ウェブブラウザで表示または実行できる、あらゆる種類のコンテンツ(HTML、CSS、JavaScript など)を含めることができます。

Salesforce.com と Google のマッシュアップには多くの変動要素があるため、最初に Google の連絡先リストページに [Google にエクスポート] ボタンを追加して、JavaScript に精通する前に単純な S-Control-in-call を呼び出すことができます。

Apex プロジェクトで [S-Controls] フォルダを右クリックし、[Apex | New S-Control] を選択します。新しい S-Control に、「export_contacts」というラベルと名前を付け、種類は [カスタム HTML] のままにして、[完了] をクリックします。

新しい S-Control には、スケルトン HTML ファイルが含まれます。<head> に一連の JavaScript を追加しますが、最初に <body> を入力することもできます。その場合、連絡先のエクスポート中にユーザーに見せる情報を指定します。この HTML を S-Control の本文にコピーして、「待機中の点」と Google スプレッドシートのロゴを表示します。

<div id="waiting" align="center" />
  <img src="/img/icon/home32.png" height="64" width="64" />
  <img src="/img/waiting_dots.gif" alt="Please wait..." title="Please wait..." height="25" width="196" />
  <img src="http://docs.google.com/images/doclist/logo_docs.gif" />
  <p><h3>Exporting contacts to Google Spreadsheets, please wait...</h3></p>

</div>

これで、S-Control を公開し、S-Control を呼び出すボタンを設定できるようになりました。

  1. Eclipse を使用して S-Control ファイルを公開します。
    • Apex プロジェクトを右クリックし、[Apex | Synchronize with Salesforce] を選択します。
    • ディレクトリ ツリーで新しい S-Control を見つけて右クリックし、[リモート環境をオーバーライドしてサーバーに公開] を選択します。
    • S-Control が見つからない場合は、Apex Toolkit がすでにアップロードされている可能性がありますが、最新のパースペクティブがサーバー上で実行されていることを確認するには、同期パースペクティブを使用することをおすすめします。
  2. Salesforce.com の UI を使用して、この S-Control を呼び出すボタンを定義します。
    • [アプリの設定] メニューで、[カスタマイズ] | [連絡先] | [ボタンとリンク] をクリックします。
    • [カスタムボタンとリンク] で [新規] をクリックします。
    • ラベルに「Export to Google」と入力し、名前として「Export_to_Google」と入力します。
    • ディスプレイのタイプとして [リストボタン] を選択します。
    • コンテンツ ソースとして [カスタム S-Control] を選択します。
    • [行動] で [サイドバーを使用して既存のウィンドウに表示する] を選択します。
    • [カスタム S-Controls] メニューから [export_contacts] を選択します。
  3. 連絡先を連絡先のリストに追加します。
    • [アプリの設定] メニューで、[カスタマイズ] > [連絡先] > [レイアウトを検索] をクリックします。
    • [連絡先のリスト表示] 行の [編集] をクリックします。
    • [Google にエクスポート] をハイライト表示し、右(>)矢印をクリックしてボタンを追加します。
    • [保存] をクリックします。
  4. 次のようにして、試乗してみましょう。
    • [連絡先] タブをクリックします。
    • ビューとして [すべての連絡先] を選択し、[実行] をクリックします。
    • 新しい [Google にエクスポート] ボタンをクリックします。
    • 「waiting_dots」を監視しますが、その他の動作は起こりません。

Google スプレッドシートの操作

Google カレンダー マッシュアップのソースを見ると、gcal_snippet.scf ファイルに Google カレンダー サーバーの抽象化が含まれていることがわかります。Google スプレッドシートを操作するには、Google スプレッドシート サーバーに同様のファイルを作成する必要があります。Salesforce.com の AJAX プロキシを使用して Google AuthSub で認証するために Ron Hess のコードを再利用し、Google カレンダーにイベントを書き込む関数を Google スプレッドシートに情報を書き込む関数に置き換えました。このファイルのソース全体は、gspreadsheet_snippet.scf から入手できます。

次に、export_contacts.scf S-Control に JavaScript を追加し、連絡先情報を Salesforce.com に照会し、Google スプレッドシートに書き込みます。Salesforce.com からデータを取得するのは簡単です。クエリを作成して、データが返されるときに実行するコールバック関数を指定するだけです。例:

  var query = 'Select FirstName, LastName, Phone From Contact';
  var queryResult = sforce.connection.query(query, queryCallback);

Salesforce.com の連絡先情報を取得したら、その書き出し先を特定する必要があります。RESTful Google Data プロトコルでは、各スプレッドシートを一意の URL で識別できます。ユーザーのスプレッドシート(および関連する URL)のリストを取得するには、メタフィードの URL(http://spreadsheets.google.com/feeds/spreadsheets/private/full)をクエリします。以下のメソッドは、これらのスプレッドシートを反復処理して、特定のタイトルのスプレッドシートを探します。正しいスプレッドシートを見つけたら、まずワークシートのリストを取得してから、最初のワークシートのセルフィード URL を返します。

function getCellFeedUrl() {
  var SPREADSHEET_TITLE = 'Salesforce.com Contacts';
  var WORKSHEET_REL = 'http://schemas.google.com/spreadsheets/2006#worksheetsfeed';
  var CELLSFEED_REL = 'http://schemas.google.com/spreadsheets/2006#cellsfeed';

  // Query to find the spreadheet called "Salesforce.com Contacts"
  var spreadsheets = g.getFeed('http://spreadsheets.google.com/feeds/spreadsheets/private/full');
  var entries = g.getEntryList(spreadsheets);
  for (var e in entries) {
    if (g.getTitle(entries[e]) == SPREADSHEET_TITLE) {
      var worksheetsFeedUrl = g.link(entries[e],WORKSHEET_REL);
      var worksheets = g.getFeed(worksheetsFeedUrl);
      var worksheetEntries = g.getEntryList(worksheets);
      return g.link(worksheetEntries[0], CELLSFEED_REL);
    }
  }
}

Google スプレッドシートのデータ API で利用できるフィードについて詳しくは、リファレンス ガイドをご覧ください。

queryCallback 関数は、getCellFeedUrl メソッドを使用して、セルの更新リクエストを送信するために必要なセルフィード URL を見つけ、セルごとに連絡先情報を書き込みます。

function queryCallback(queryResult) {
  var cellFeedUrl = getCellFeedUrl();
  var contacts = queryResult.getArray('records');
  for (var i=0; i<contacts.length; i++) {
    g.updateCell(cellFeedUrl, i+1, 1, contacts[i].LastName + ", " + contacts[i].FirstName);
    g.updateCell(cellFeedUrl, i+1, 2, contacts[i].Phone);
  }
  
  jumpback(); // Return to the contacts page when your done
}

updateCell メソッドは gspreadsheet_snippet.scf S-Control にあります。このメソッドは、指定した行と列のセルの編集 URL を取得して、更新されたセルの Google データ表現が含まれる HTTP PUT メッセージを送信します。

GoogleSpreadsheet.prototype.updateCell = function(cellsFeedUrl, row, column, content ) {
  var cellEntry = this.getFeed(cellsFeedUrl+'/R'+row+'C'+column);
  var cellEditUrl = this.link(cellEntry,'edit');

  var newCellEntry = "<atom:entry xmlns:atom='http://www.w3.org/2005/Atom'>" +
      "<atom:category scheme='http://schemas.google.com/spreadsheets/2006' " +
      "term='http://schemas.google.com/spreadsheets/2006#cell' />" +
      "<gs:cell xmlns:gs='http://schemas.google.com/spreadsheets/2006' " +
      "row='" + row + "' col='" + column + "' inputValue='" + content + "' />" +
      "</atom:entry>";

  this.putEntry(cellEditUrl, newCellEntry);
} 

Google スプレッドシートのデータ API を使ってセルを更新する方法について詳しくは、デベロッパー ガイドをご覧ください。

Google スプレッドシートのデータ API ではサブドメイン https://spreadsheets.google.com を使用するため、上記のコードを使用するには、事前に Salesforce.com AJAX プロキシ サーバーを設定して https://spreadsheets.google.com を追加しておく必要があります。

また、Google ドキュメントにアクセスして、データを保持するための新しいスプレッドシートを作成する必要もあります。Salesforce.com の連絡先として保存してください。

これらの S-Control をアップロードすると、連絡先情報を Google スプレッドシートにエクスポートできるようになります。その逆はどうでしょうか。Salesforce.com と Google Data API について新たに得た知識を使って、Google スプレッドシートから Salesforce.com に連絡先情報をインポートするコードを記述することもできます。

まとめ

説明はほんの少しでしたが、Salesforce.com のプラットフォームと Google Data API の基礎を理解したところで、これらの強力なシステムを活用するために記述できるすべてのアプリケーションについて考えてみましょう。Google Data ファミリーの API は増え続けており、アプリケーションで活用できる詳細情報を公開しています。Salesforce.com プラットフォームでは、この記事で取り上げていない便利なツールが数多く提供されています。AppExchange でこれからご紹介するエンタープライズ マッシュアップについてご案内いたします。

よろしくお願いいたします。

リソース