Salseforce の Canvas アプリケーションと埋め込まれる側の PHP アプリケーションの実装例です。
- forcecom: SFDX プロジェクト
- php: PHP プロジェクト Heroku にデプロイ可
Heroku で動作確認する場合は、前提条件として以下が必要です。
- Heroku アカウント
- PHP
- Composer
- Heroku コマンド
Heroku コマンドは以下のページを参考に入れてください
https://devcenter.heroku.com/articles/getting-started-with-php#set-up
Heroku アプリを作成
$ heroku create
Heroku の URL は、接続アプリケーションに設定するため控えておきます。
例: https://morning-woodland-99878.herokuapp.com/
プロジェクトをデプロイ
$ git subtree push --prefix php heroku master
forcecom/force-app/main/default/connectedApps/Canvas_App.connectedApp-meta.xml を開き、
ConnectedApp/canvasConfig/canvasUrl
要素の値を、作成した Heroku アプリケーションの URL に置き換えます。
<ConnectedApp xmlns="http://soap.sforce.com/2006/04/metadata">
<canvasConfig>
<accessMethod>Post</accessMethod>
<canvasUrl>作成したHEROKUのURLを設定</canvasUrl>
<locations>Visualforce</locations>
<samlInitiationMethod>None</samlInitiationMethod>
</canvasConfig>
...
forcecom ディレクトリに移動して以下のスクリプトを実行して、接続アプリケーションのコンシューマキーに新しい値をセットします。
(コンシューマキーは ConnectedApp/oauthConfig/consumerKey
要素)
$ cd forcecom
$ node ./scripts/js/set_cunsumer_key_to_connected_app.js
※ 接続アプリケーションのコンシューマキーはグローバルで一意である必要があるため Scratch 組織に push する前に新しい値を生成してセットしておく必要があります。
引き続き forcecom ディレクトリで作業します。
SFDX プロジェクトに必要な node パッケージをインストール
$ npm install
Scratch 組織の作成とソースの push
$ sfdx force:org:create -f ./config/project-scratch-def.json -s -d 30
$ sfdx force:source:push
Scratch Org では force:org:open で起動するとセッションに問題があるらしいのでパスワードでログインする必要があります。
以下のコマンドでパスワードを生成
$ sfdx force:user:password:generate
生成したパスワードで Scratch Org にログイン https://test.salseforce.com からログインします。
設定で[アプリケーションマネージャ]を開き「Canvas App」のメニューより[Manage]を選択、[ポリシーを編集]を開きます。
[OAuth ポリシー] > [許可されているユーザ]で「管理者が承認したユーザは事前承認済み」を選択して[保存]します。
※ 署名付きリクエストを送信するにはこの設定が必要です。
設定で[アプリケーションマネージャ]を開き「Canvas App」のメニューより[参照]を開きます。
[API (OAuth 設定の有効化)]の[コンシューマの秘密]の値を表示してコピーします。コピーした値を、以下のコマンドで Heroku の環境変数「CANVAS_CONSUMER_SECRET」にセットします。
$ heroku config:set CANVAS_CONSUMER_SECRET=<コンシューマの秘密の値>
システム管理者プロファイルの編集を開き、[接続アプリケーションへのアクセス]で「Canvas App」にチェックを入れて保存します。
アプリケーション ランチャーで「Canvas」と入力して、「Canvas App」タブを開きます。
PHP 側を修正して、push --force したい場合は以下のコマンドでデプロイ
$ git push heroku `git subtree split --prefix php master`:master --force