8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ほぼSalesforce !! Qiitan と カレンダーと 3年目のWebエンジニアAdvent Calendar 2022

Day 8

Salesforce Canvas でWebサイトを埋め込みしてみる

Last updated at Posted at 2022-12-10

これは何

  • Salesforce Canvasについて設定方法をまとめたものです。
    • iframeの中で Salesforceのデータを扱いやすくなったり、Salesforceに画面をレコード詳細ページに画面を埋め込んだ際にサイズを自動調節してくれたりできます。

検証につかう環境は、trailheadのハンズオン環境です。
出てくるデータも初期のデモデータになります。

Canvas使うと何がいいの?

  • 複雑なロジックをSalesforceではなくWebサイトへ
  • 効率的なUIをSalesforceで実現するのが難しそうな場合
    • SalesforceではなくWebサイトへ
  • WebサイトとSalesforce間での通信

等実装をSalesforce内だけではなく、別のアプリケーションも併用してつかう選択肢としておすすめです。

この記事でやること

  • Canvas用Webサイトの用意
  • Canvasアプリケーションの作成
  • 取引先ページに埋め込み

概要

Webサイトの準備

埋め込みをするためのWebサイトを準備します。

ホスティング先はnetlifyを使用します。

作成したコードはGitHubに置いています。

GitHubのコードをダウンロードしていただきnetlifyにあげていただければそのまま使えます

コードに関しては、以下のhtmlと
canvas-all.jsを読み込みんでいます。

index.html
<html>
  <head>
    <script src="./js/canvas-all.js"></script>
  </head>
  <body>
    <h1>埋め込みテスト</h1>
    <div id="js-canvasArea">表示エリア</div>
    <script>
      Sfdc.canvas.client.refreshSignedRequest(function(data) {
        if (data.status === 200) {

          const signedRequest =  data.payload.response;
          console.log(signedRequest);
          const part = signedRequest.split('.')[1];
          const obj = JSON.parse(Sfdc.canvas.decode(part));
          console.log(obj);
          const authBlock = document.getElementById('js-canvasArea');
          authBlock.innerHTML = JSON.stringify(obj);
        }
      });
    </script>
  </body>
</html>

設定

接続アプリケーション

1. アプリケーションの作成

設定>アプリケーションマネージャにアクセスし、新規接続アプリケーションボタンを押す

アプリケーションマネージャ _ Salesforce.png

アプリケーションマネージャ _ Salesforce (2).png

設定した内容は以下の通りです。

項目 内容
接続アプリケーション名 キャンバスアプリテスト
API参照名 canvasAppTest
OAuth設定の有効化 チェック
コールバックURL キャンバスアプリケーションのURL/callback
選択した OAuth 範囲 フルアクセスいつでも要求を実行
キャンバス チェック
キャンバスアプリケーションURL 埋め込みたいWebサイトURL
アクセス方法 署名付き要求(POST)
場所 Lightningコンポーネント、Visualforceページ

CanvasはAuraとVisualforceで利用できるので、
場所はLightningコンポーネント、Visualforceページを選択しています。
別の記事でAuraとVisualforceでのCanvas操作を解説しようと思います。

2. キャンバスアプリケーションにアクセスできる権限を付与

作成したアプリケーションにアクセスし、Manageボタンを押す。

接続アプリケーションを管理する _ Salesforce.png

ポリシーを編集ボタンを押す。

Lightning Experience _ Salesforce.png

許可されているユーザを管理者が承認したユーザは事前承認済みに変更

Lightning Experience _ Salesforce (1).png

プロファイルを管理するボタンを押し、システム管理者を追加。

Lightning Experience _ Salesforce (3).png

3. キャンバスアプリケーションの確認

設定>キャンバスアプリケーションのプレビューアにアクセス
下記のように埋め込む対象のWebサイトが表示されていればOKです。

trailheadのハンズオン組織で検証していて以下のようなエラーメッセージが出た場合は、
ハンズオン組織をログアウトしユーザ名とパスワードを入力してログインし直してみてください。

Your browsing session has ended or is invalid. Please re-login to Salesforce.com again.

キャンバスアプリケーションのプレビューア _ Salesforce.png

取引先ページにCanvasアプリケーションを設置

1. Visualforce作成

canvasAppTest.page
<apex:page>
  <apex:canvasApp developerName="canvasAppTest"
    height="1000px" width="100%"
    entityFields="Phone, Name"
    parameters="{message:'キャンバステスト'}"/>
</apex:page>
属性 説明
entityFields Canvasアプリケーション側に渡す、項目。Accountページで表示させ
Phone, Nameを指定すると取引先名と電話番号がCanvasに渡されます。
parameters entityFields以外で値をCanvasに渡したい場合に使用

Lightning Experience、エクスペリエンスビルダーサイト、およびモバイルアプリケーションで利用可能にチェックを入れましょう

Visualforce ページ _ Salesforce.png

2. 取引先のLightningページに設置

取引先 レコードページ - Lightning アプリケーションビルダー (1).png

netlifyでホスティングしたURLにPOSTすると404になってしまうので
設定等で解決策がわかりましたら冒頭に記載します。
今回は Back to our siteのリンクをクリックすると問題なく挙動するので
そちらで対応します。

Edge Communications _ Salesforce.png

下記の様にCanvasアプリケーションにTokenや、アクセスしたSalesforceのユーザ情報が渡されます。
Tokenを利用してCanvasアプリケーション側でSalesforceのAPIを実行することもできます。

Edge Communications _ Salesforce (2).png

entityFieldsやparametersも、Canvasアプリケーション側に渡されています。

entityFields
"record":{"attributes":{"type":"Account","url":"/services/data/v56.0/sobjects/Account/0012w000017ipeMAAQ"},
"Id":"0012w000017ipeMAAQ","Phone":"(512) 757-6000","Name":"Edge Communications"}
parameters
{"message":"キャンバステスト"}

まとめ

  • 埋め込むサイトの中で 認証情報をもとに埋め込みのブロッキング等したい場合
    • ifarmeにアクセスできるアカウントを絞り込むことも可能
    • 渡されるアカウントのトークンでAPIの実行権限制御など
  • Salesforceの認証情報が欲しい場合
  • Salesforceのレコード情報を簡単に使いたい場合
  • 表示している画面の情報を渡すことができる

SAML SSO の設定もできるぽい

実装に関して

  • Salesforceに接続アプリケーションを追加
  • 埋め込み側に canvas-all.jsを追加
    • SalesforceのAPIを実行したい場合は jsforce等を利用

次回

  • Canvasのサイズを自動で変更する
  • AuraでCanvasを使ってみる
  • 埋め込みの親子間でイベントを送受信してみる
  • jsforceでSalesforceのレコードを取得してみる

等本格的にSalesforce Canvasを使っていこうと思います。

参考

8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?