指定ログイン情報を使って、SalesforceからGoogleカレンダー連携 | 営業管理ツールのUPWARD(アップワード)

営業管理ツール > ブログ > 指定ログイン情報を使って、SalesforceからGoogleカレンダー連携

BLOGブログ

指定ログイン情報を使って、SalesforceからGoogleカレンダー連携

Salesforce Spring’15にてリリースされた「指定ログイン情報(Named Credential)」がGoogleカレンダー連携に使えるのでは?と思ったので、早速試してみました。

指定ログイン情報(Named Credential)とは…

Salesforceのヘルプを見ると、以下のように書いてあります。

A named credential specifies the URL of a callout endpoint and its required authentication parameters in one definition. You can simplify the setup of authenticated Apex callouts by specifying a named credential as the callout endpoint. You can instead specify a URL as the callout endpoint and register that URL in your organization’s remote site settings. In that case, however, you handle the authentication in your code. Doing so can be less secure and especially complicated for OAuth authentication.
要するに、Salesforce内にWEBサービス呼び出し時の認証情報込みエンドポイントを作れるよということ。
プログラム中では、以下のように記載するだけで、認証処理を省略することが可能になります。

 

今回は、指定ログイン情報を利用してGoogle Calendarの情報を取得してみようと思います。

Google Developer Consoleでのアプリケーション設定

まずは、Google Developer Consoleへアクセスして、アプリケーションのプロジェクトを作成します。

1) 「プロジェクトを作成」をクリック

2) 「プロジェクト名」に任意のプロジェクト名を入力し、「作成」をクリック

次に、認証情報とAPIの設定を行います。

1) 「APIと認証」-「認証情報」を選択し、「新しいクライアントIDを作成」をクリック

2) 「ウェブアプリケーション」を選択し、「クライアントIDを生成」をクリック

承認済みのJAVASCRIPT生成元、承認済みのリダイレクトURLはいじらなくてよいです。(後ほど設定します)

3) 作成すると以下のような情報が生成されます

認証プロバイダ情報を作成

1) Salesforceの設定画面で「セキュリティのコントロール」-「認証プロバイダ」をクリック

認証プロバイダの画面で「新規」をクリック、「プロバイダタイプ」で「OPEN ID Connect」を選択。名前は任意の名前を入力してください。

2) 必要な情報の入力

コンシューマ鍵にはClientID、コンシューマの秘密にはクライアントシークレットをセット、承認エンドポイントには、更新トークンを発行させるため、以下のように記述

https://accounts.google.com/o/oauth2/auth?approval_prompt=force&access_type=offline

3) 登録ハンドラは「登録ハンドラテンプレートを自動生成」をクリックし、以下のように記述

public class GoogleHandler implements Auth.RegistrationHandler{
public User createUser(Id portalId, Auth.UserData data){
User u = [SELECT Id FROM User WHERE GoogleAccount__c = :data.email];
return u;
}
public void updateUser(Id userId, Id portalId, Auth.UserData data){
}
}

4) Googleのクライアント情報を修正
認証プロバイダ情報のコールバックURLに記載の内容を、リダイレクトURIに修正する

指定ログイン情報を作成

1) Salesforceの設定画面で「セキュリティのコントロール」-「指定ログイン情報」をクリック

2) 指定ログイン情報の内容を編集
URLにはhttps://www.googleapis.com/calendar/v3を入力。
ID種別は「指定ユーザ」、認証プロトコルには「OAuth2.0」を選択。認証プロバイダには先ほど作成したクラスを選択。
範囲には、https://www.googleapis.com/auth/calendarを記載。
「保存時に認証フローを開始」を選択し、「保存」する。

「承諾する」を選択

「許可」を選択

これで完成。
以下のコードを実行すると、Googleカレンダーのユーザ一覧が取得できます。

path = ‘users/me/calendarList’;
public static String getGCalReponse(String path) {
Http h = new Http();
String reqPath = ‘callout:GoogleCalendar/’ + path;
System.debug(reqPath);
HttpRequest req = new HttpRequest();
req.setEndpoint(reqPath);
req.setMethod(‘GET’);

HttpResponse res = h.send(req);
System.debug(res);
return res.getBody();
}

あとは、GoogleカレンダーAPIの仕様に従い、実装することでSalesforceとGoogleカレンダー連携が実装できます。
認証仕様が変わってしまう場合などは、この機能で仕様変更に対応させ、連携処理部分に注力できるかもしれません。でも、この設定画面等についての資料をもう少し公開していただけると楽に設定できたかもしれません。
以下を参考にさせていただきました。
http://blog.flect.co.jp/labo/2013/11/apexgoogle-cale-36dc.html
http://qiita.com/kossacks/items/8d279bcc1acc2c2153ab

エンジニア募集してます。

横浜から世界へ!オークニーでは働き方が変化するクラウドサービスを一緒につくるメーンバーを募集中です!
詳しくは、こちらをご覧ください。

  • このエントリーをはてなブックマークに追加
  • Pocket

tag:

関連記事

ご不明な点はお気軽にお問い合わせください。
お急ぎの方は、下記フリーダイヤルよりお電話ください。

※ 受付時間: 10:00〜17:00(土日祝を除く)

0800-800-5092

(UPWARD専用フリーダイヤル)

Page TOP