# Visualforceを利用したシートの埋め込み

Visualforceページのレイアウトへの埋め込み機能を応用して、作成したシートを任意のSalesforceレコードの詳細画面に埋め込むことができます。これによって多機能かつ編集可能な関連リストとしてシートを利用することができます。

## Salesforce Classic のレイアウトへの埋め込み <a href="#embed-in-classic-layout" id="embed-in-classic-layout"></a>

Salesforce Classicのレイアウトにシートを追加するには、以下の手順に従います。

1. 以下のように`msmxSheet:SheetRedirect`コンポーネントを1つのみ含むVisualforceページを作成します
   * 下記の例は「取引先」ページに埋め込む場合です。「取引先」以外のページに埋め込む場合は`standardController`の値を適切なオブジェクトのAPI参照名に置き換えます）
   * `bookId` および `sheetId` については[「URLでのシートへのアクセス」](https://docs.mashmatrix.com/mashmatrix-sheet/ja/customization/access_sheet_directly_with_url)を参考に指定します。

```
<apex:page
  standardController="Account"
  showHeader="false"
>
<msmxSheet:SheetRedirect
  bookId="a002800000iNFMLAA4"
  sheetId="s1"
  recordId="{!$CurrentPage.parameters.id}"
/>
</apex:page>
```

1. 作成したVisualforceページに対して適切にアクセス権限を指定します。
2. オブジェクトのレイアウト編集画面を開いて、作成したVisualforceページをレイアウト中に配置します

`msmxSheet:SheetRedirect`に指定可能な属性は以下のとおりです。

* **bookId** - 表示するシートを含むブックのID (必須)
* **sheetId** - 表示するシートのID。シートIDの値はシート設定から参照可能。指定されない場合はブックに含まれるシートが全てタブで表示される
* **recordId** - コンテキストとなるレコードのID。このID値がフィルタの「関連レコードID」として利用される
* **nocache** - シートを表示する際のデータ読み込みのキャッシュを無効にし、更新時に常にサーバからデータを読み込みするように指定する

{% hint style="warning" %}
`msmxSheet:SheetRedirect`コンポーネントはVisualforceページ内に1つのみ指定可能です。その他のコンポーネントは配置できせん。
{% endhint %}

## Lightning Experience のアプリケーションビルダーを用いた埋め込み <a href="#embed-in-lex-page" id="embed-in-lex-page"></a>

{% hint style="info" %}
Lightning Experienceでは、レコードページ内にシートを表示するために[「Sheetコンポーネント」](https://docs.mashmatrix.com/mashmatrix-sheet/ja/customization/sheet_component)が利用できます。Visualforceによる埋め込みとは異なり、Sheetコンポーネントはセットアップが簡単で、かつ矩形フレームに隔離されることなくページに一体化して利用できます。そのためほとんどの場合で「Sheetコンポーネント」のほうが有利です。
{% endhint %}

Lightning Experienceにおいて詳細画面にシートを追加するには、以下の手順に従います。

1. Classicでのレイアウトの埋め込みの例と同様に、Visualforceページを作成します。その際に「Lightning Experience、Lightning コミュニティ、およびモバイルアプリケーションで利用可能」のオプションにチェックを入れて保存します。
2. 作成したVisualforceページに対して適切にアクセス権限を指定します。
3. シートを埋め込みたいレコードの詳細ページ画面を開き、画面上部の設定メニューから「編集ページ」を選択し、Lightningアプリケーションビルダー画面を開きます。
4. Lightningコンポーネントから「Visualforce」を選択し、ページ中の任意の領域にドラッグ＆ドロップします。
5. プロパティの「Visualforceページ名」に先ほど作成したVisualforceページの名前を選択します。表示ラベルおよび高さは任意に設定します。

## 埋め込み用のフィルタ設定 <a href="#filter-setting-for-embedded-sheet" id="filter-setting-for-embedded-sheet"></a>

レコードに関連したもののみがシート内に表示されるようにするためには、あらかじめ埋め込まれるシートに対して適切にフィルタ設定がされている必要があります。埋め込み用のフィルタを設定するには、以下の手順に従います。

1. 埋め込み対象となるSalesforceオブジェクトへの参照ID項目をシート内の列として追加します。
2. 1\) で追加した列の列メニューからフィルタを選択します。
3. フィルタ設定ダイアログで、フィルタ値入力ボックスの右にある「参照値選択ボタン」をクリックし、参照値選択ダイアログを表示します。
4. ダイアログから参照の種別として「関連するレコードID」を選択し、フィルタを適用します。
5. 必要に応じて、1) で追加した列を非表示に設定します。

## 新規レコードの自動関連設定 <a href="#auto-relation-fill-for-new-record" id="auto-relation-fill-for-new-record"></a>

埋め込みされたシートの中で新規レコードを作成した際、以下の場合には新規レコードに現在表示しているレコードのIDが自動的に設定されます。

1. フィルタを設定した列に表示している参照ID項目がシート内に表示している主オブジェクトに直接所属している項目である
   * 例：取引先レコードページにケースを一覧するシートを表示している場合、「取引先ID」項目でのフィルタは対象となるが、「取引先 > 取引先ID」項目や「親ケース > 取引先ID」項目などでのフィルタでは対象とならない
2. フィルタを設定した列に表示している参照ID項目が編集可能である
