Skip to content

geeorgey/selfLightningSync

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 

Repository files navigation

selfLightningSync

自前でLightning Syncを実装する 前回こんなのを書いたのですが、その続きです。 SalesforceのApexでチームスピリットの出退勤情報からGoogleカレンダーに登録する処理

SalesforceにはLightning Syncという機能が提供されており、それを使えばこんなことをしなくても同期できるのですが、__Einstein活動キャプチャという機能をONにしていると、Lightning Syncが使えない__ので、自前実装するしかありません。なんでそんな仕様なんだろう🤔

ToDo

  • 第一部:GoogleCalendarの更新情報をSalesforceに同期する
  • 第二部:SalesforceのEvent情報の更新をGoogleCalendarに同期する

第一部:GoogleCalendarの更新情報をSalesforceに同期する

###必要要件 GoogleからSalesforceへの接続には、別途サーバが必要になります。 なるべく簡単に開発できるようにと思ったのですが、mac標準で入っているphpにはJSONエクステンションが入っていないために利用できませんでした。以下のコードを使う場合は、JSONエクステンション、SOAPエクステンションが入ったphp環境でお試しください。

同期に必要な要件

Salesforce側に同期するので、今回のスクリプトでは

  • Salesforceのユーザを調べてEmailとSalesforceのUser.idを取得します
  • Emailリストを使ってGoogleCalendarAPIを叩き、カレンダー情報を取得します
  • 取得したGoogleカレンダー情報をSalesforceのEventに同期します GoogleAPIにはPUSH通知機能があるのですが、面倒なので今回は使っていません。 任意の間隔でGoogleAPIを叩き、その時間の間に更新された予定をSalesforce側に同期しています。

##Google APIの利用を開始する PHPから使いますので、こちらをインストールします。 Google APIs Client Library for PHP 書かれているとおりcomposerをインストールする必要があります。既にインストール済み環境の場合はインストール部分はスキップしてください。 手順は

  • Composerのインストール

  • フォルダが無いので作る

  • $ sudo mkdir -p /usr/local/bin

  • インストールするためのコマンドはこちらに書かれています。https://getcomposer.org/download/

  • インストールしたらcomposer.pharを移動。

  • mv composer.phar /usr/local/bin/composer ここまでcomposerのインストール部分。

  • Google APIs Client Library for PHPをインストールする

  • $ composer require google/apiclient:"^2.0"

Google APIsで新規プロジェクトを作成

こちらから:https://console.developers.google.com/apis/ プロジェクト作成後に認証情報ひらき、認証情報を作成>OAuthクライアントIDを作成。 oauth.png コールバックURLはひとまずこれを入れておきます。なんでもいいです http://localhost:8080/

ウェブ_アプリケーション_のクライアン…_–_API_とサービス_–_Lnest-SF-Gcal_–_Google_API_Console.png

JSONファイルをダウンロードして作業フォルダの中に入れましょう。 その際、ファイル名を credentials.json に変えておくと、GoogleAPIのサンプルがそのまま動きます。

ライブラリから以下の2つのAPIを検索して利用開始してください。

  • Google Calendar API

Googleのドキュメントはこちら Calendar APIのページ:https://developers.google.com/calendar/quickstart/php

ここまで来たらGoogle Calendar APIのサンプルを試してみてください。 上述のCalendar APIのページにあるコードをそのまま index.php に書いて実行してみます。 ターミナルで php index.php と打つと、こんなレスポンスが返ってきます。

https://accounts.google.com/o/oauth2/auth?response_type=code&access_type=offline&client_id=4674xxxxxxxx8-xxxxxxxxxxxxxxxxxxxxorp6r9j8bf0n.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost:8080%index.php&state&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar.readonly&prompt=select_account%20consent
Enter verification code:

書かれている通り、URLをブラウザで開きましょう。この部分です。 https://accounts.google.com/o/oauth2/auth?response_type=code&access_type=offline&client_id=46xxxxxx18-cxxxxxxxxxxxxxxxx0n.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost:8080%index.php&state&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar.readonly&prompt=select_account%20consent

これを開くと、GoogleのOAuth画面に行くので自分のGoogleアカウントで開き、Google Calendar APIへのアクセス許可が求められるので承認します。するとこうなります。 localhost.png そりゃそうです。何も表示できるように作ってないのですから。重要なのは画面表示ではなく、そのURLです。 http://localhost:8080/SyncGoogleCalToSalesforceEvent.php?code=4/ygFFXpRLYvJnbN5LO2EF**********************YIzAt65GxE-vKwYb2mYdTnm--CfIetczXU&scope=https://www.googleapis.com/auth/calendar.readonly みたいなURLになっているとおもうのですが、その code= のあと 4/ygFFXpRLYvJから最後までをコピーして、Enter verification code:のところに入力してください。 そうすることによって、実行したフォルダの中にtoken.jsonができているはずです。これでGoogleの認証が終わります。 もう一度実行してみると、カレンダーの予定が10件表示されることがわかるでしょう。

$ php index.php

credentials_json_—_public.png

###SalesforceへJWT接続するための設定をする やり方はこちらを参照してください Salesforce JWT用の接続アプリを共有して組織への接続を簡単にする

コールバックURLにhttp://localhost:1717/OauthRedirect を設定する部分が意味わからなかったのですが、 そういう仕様 みたいです。

JWT接続便利。使うべし。

JWT接続してからREST API使うサンプルは こちら を参照。

$ composer require lcobucci/jwt jwtのインストールは必須です。

Salesforceへデータを同期する

コードはこちら https://github.com/geeorgey/selfLightningSync/blob/master/php/Googlecal_to_Salesforce.php

SalesforceのREST APIを使って更新をします。 SalesforceのEventオブジェクトに googleCalEventID__c : GoogleカレンダーのEvent.idを入れています googleCalEventID2__c : こちら、ユニーク項目として設定。 メアド+Event.id 形式にしてあります。GoogleカレンダーのEvent.idが完全にユニークならこちらは不要ですが、仕様がよくわからなかったので。 というカスタム項目を作っています。

フォルダの中にGooglecal_to_Salesforce.phpを突っ込んでcronで回してください。 187行目 に-5分設定をしてあるので、5分毎のcronを回しています。もっと短くても構わないとは思います。 $crontab -e

*/5 * * * * /usr/bin/php /path to file/Googlecal_to_Salesforce.php 2>&1 | logger -t mycommand -p local0.info 

##第二部:SalesforceのEvent情報の更新をGoogleCalendarに同期する Eventが更新されたときに、Googleカレンダーに同期するしくみ。 コード類はこちら https://github.com/geeorgey/selfLightningSync/tree/master/Apex EventAllTrigger.apxt でEventの更新をキャッチしてGoogleカレンダーに同期をかける。

Event.googleCalEventID_c に Googleカレンダーの Event.idが入っているので、それを使ってupsertをかける。

##以上 GoogleカレンダーとSalesforce側への同期は5分に一度。 Salesforceのカレンダーの更新はリアルタイムに処理されます。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages