Google Apps ScriptでSalesforceのイベント一覧を出力してみる

| コメントをどうぞ

前回の記事に引き続きGoogle Apps Scriptのサンプル作成ということで、今回はGoogle Apps ScriptからSalesforceのAPIを実行し、自分に関連するイベントリストをスプレッドシートに出力してみたいと思います。

スプレッドシートの作成

作成メニューからスプレッドシートを選択します。

create_spredsheet

スクリプトファイルの作成

スプレッドシートが起動したら、ツールメニューからスクリプトエディタを起動し、スクリプトファイルを作成します。

open_script_editor

起動したスクリプトエディタでスクリプトを作成していきます。
以下が今回作成したサンプルコードになります。

var AUTHORIZATION_URL = "https://login.salesforce.com/services/oauth2/authorize";
var ACCESS_TOKEN_URL = "https://login.salesforce.com/services/oauth2/token";
var CLIENT_ID = "your client id";
var CLIENT_SECRET = "your client secret";
var REDIRECT_URL= ScriptApp.getService().getUrl();
var sessionName = 'SALESFORCE_SESSION_INFO'; 

/* スプレッドシートのメニュー拡張 */
function onOpen() {
  SpreadsheetApp.getActiveSpreadsheet().addMenu("Salesforce", [{
    name:"認証",
    functionName: "initializeAuth"
  }, {
    name:"イベント取得",
    functionName: "getEvents"
  }]);
}

/* 認可コードの取得 */
function initializeAuth() {
  SpreadsheetApp.getActive().show(HtmlService.createHtmlOutput("<div>認証を開始します。</div><a href='"+ AUTHORIZATION_URL + '?response_type=code&client_id=' + CLIENT_ID + '&redirect_uri=' + REDIRECT_URL + "'>開始</a>"));
}

/* イベント出力 */
function getEvents() {
  if( !UserProperties.getProperty(sessionName) ) {
    initializeAuth();
  }
  else {
    var sessionInfo = JSON.parse(UserProperties.getProperty(sessionName));
    var soql = "SELECT Id,Subject, Location, StartDateTime, EndDateTime, Description, IsAllDayEvent, Account.Name, Who.Name, What.Name FROM Event";
    var queryUrl = sessionInfo.instance_url + "/services/data/v32.0/query?q="+encodeURIComponent(soql);
    var response = UrlFetchApp.fetch(queryUrl, {
      "contentType": "application/json",
      "headers": {
        "Authorization": "Bearer " + sessionInfo.access_token,
        "Accept": "application/json",
      },
      "muteHttpExceptions": true
    });
    var responseObject = JSON.parse(response.getContentText());
    if( response.getResponseCode() == 401 ) {
      initializeAuth();
      return;
    }
    var events = responseObject.records;

    var sheet = SpreadsheetApp.getActiveSheet();
    sheet.getRange('A1').setValue("件名");
    sheet.getRange('B1').setValue("開始日時");
    sheet.getRange('C1').setValue("終了日時");
    sheet.getRange('D1').setValue("場所");
    sheet.getRange('E1').setValue("説明");
    sheet.getRange('F1').setValue("取引先名");
    sheet.getRange('G1').setValue("担当者名");
    sheet.getRange('H1').setValue("案件名");

    for(var i=0;i<events.length;i++ ) {
      var rowIdx = i + 2;
      sheet.getRange('A' + rowIdx).setValue(events[i].Subject);
      sheet.getRange('B' + rowIdx).setValue(events[i].StartDateTime);
      sheet.getRange('C' + rowIdx).setValue(events[i].EndDateTime);
      sheet.getRange('D' + rowIdx).setValue(events[i].Location);
      sheet.getRange('E' + rowIdx).setValue(events[i].Description);
      sheet.getRange('F' + rowIdx).setValue(events[i].Account ? events[i].Account.Name : "");
      sheet.getRange('G' + rowIdx).setValue(events[i].Who ? events[i].Who.Name: "");
      sheet.getRange('H' + rowIdx).setValue(events[i].What ? events[i].What.Name: "");
    }
  }
}

/* アクセストークンの取得 */
function doGet(e) {
  if(e.parameters.code) {
    var params = {
      method: 'post',
      payload: "client_id=" + CLIENT_ID + "&client_secret=" + CLIENT_SECRET + "&grant_type=authorization_code&redirect_uri=" + REDIRECT_URL + "&code=" + e.parameters.code
    };
    var response = UrlFetchApp.fetch(ACCESS_TOKEN_URL, params).getContentText();

    // セッション情報をユーザプロパティに保存
    UserProperties.setProperty(sessionName, response);

    return HtmlService.createHtmlOutput('<div>認証が成功しました。</div><div>ウィンドウを閉じてください。</div>');
  }  
}

OAuth設定

コンシューマキーとコンシューマシークレットの設定

Salesforceの設定メニューからアプリケーション設定画面でリモートアプリケーション登録を行い
コンシューマキーとコンシューマシークレットを取得します。

sfdc_add_application

スクリプトの以下の部分に取得したコンシューマキーとコンシューマシークレットを指定します。

var CLIENT_ID = "your client id";
var CLIENT_SECRET = "your client secret";

コールバックURLの設定

スクリプトエディタの公開/ウェブアプリケーションとして導入を選択して、アプリケーションを公開します。
公開されると以下の画面が表示されURLが表示されます。

get_callback_url

このURLを先ほど登録したリモートアプリケーションのコールバックURLに設定します。

set_callback_url

トリガー設定

スプレッドシートのメニューを拡張するためのトリガー設定を行います。
リソースのすべてのトリガーを開き、スプレッドシートの起動時にonOpen関数が実行されるようにします。

add_trigger

項目
実行 onOpen
イベント スプレッドシートから / 起動時

設定後にスプレッドシートをリロードすると以下のように拡張メニューが表示されます。

CUSTOM_MENU2

出力結果

「認証」メニューを選択して認証と認可が終わった後に「イベント取得」メニューを選択すると、自分に関連するイベントリストがシート上に以下のように出力されます。

get_events_result2

今回はスプレッドシートを使った簡単な連携サンプルの紹介でしたが、次回はGoogle Apps Scriptの定期実行機能とイベントのマッチング用に前回の記事で紹介したFusion Tablesを利用して、SalesforceとGoogleカレンダーのイベントを定期的に同期させるサンプルアプリを作成してみたいと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>