# 更新挿入モードでの作業

シートの更新挿入（UPSERT）モードは、シート上で外部データを取り込んでレコードデータを更新したり新規登録することに特化したモードです。更新挿入モードでは、Excelやスプレッドシートのデータを取り込むときに、既存レコードを検索してレコードの更新をおこなったり、重複を避けて新規レコードを登録するといった作業が簡単に可能になります。

## 更新挿入モードの概要

### 特定キー

更新挿入モードでは、レコードを特定するキーとなる列（特定キー）がシート内に指定されます。特定キーは取込対象のデータとSalesforce内のレコードとを結びつける役目を持ちます。以下のような項目を持つ列は特定キーとして利用できます。

* Salesforce ID項目
* Salesforce上でユニーク（一意）として指定されている項目
* 自動採番されている項目
* Salesforce上で外部IDとなっている項目
* その他、オブジェクト内で概ね一意となる可能性の高い項目（例：取引先名、メールアドレスなど）

### 設定方法

シートを更新挿入モードにするには、1つ以上の列を特定キーとして設定する必要があります。ある列を特定キーにするには以下の手順に従います。

<figure><img src="https://2817247209-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FS2wT6ommdiuYru74JEtd%2Fuploads%2Fgit-blob-7ed1e693ca67839f4c45909d2dea99003f00237b%2Fsetting-identification-key.png?alt=media" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2817247209-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FS2wT6ommdiuYru74JEtd%2Fuploads%2Fgit-blob-516d30a2485bea6c39910759afcbe42c19247c0e%2Fidentification-key-icon.png?alt=media" alt=""><figcaption></figcaption></figure>

1. 列のヘッダメニューから「設定」を選び、列の設定ダイアログを表示
2. 列の設定ダイアログ内の「オプション」タブ内の編集設定から「レコードを特定するキーとして利用する」**\[A]** にチェックを入れて保存
3. 列ヘッダの表示ラベルの横に鍵マークのアイコン **\[B]** が表示されます

{% hint style="info" %}
特定キーとして指定できる列は、シートのオブジェクトに直接所属しているテキスト型（電話、URL、メール型なども含む）、ID型、選択リスト型の項目を持つ項目列のみです。その他のデータ型や、参照関係をたどった先のオブジェクトの項目、および数式列やデータ列などは指定できません。
{% endhint %}

{% hint style="info" %}
特定キーに指定する列は、必ずしも編集可能である必要はありません。特定キーに指定された場合、その列が編集不可に設定されている場合であっても、更新挿入モードではその列に対してキーとなる値を入力できます。
{% endhint %}

### 動作

<figure><img src="https://2817247209-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FS2wT6ommdiuYru74JEtd%2Fuploads%2Fgit-blob-d2a6048ed858ae51e569bd9c2a5d551cdd4f059c%2Fupsert-mode-empty-sheet.png?alt=media" alt=""><figcaption></figcaption></figure>

更新挿入モードではシートの表示直後およびリフレッシュ後にはレコード情報は取得されず、シートには空行のみが表示された状態となります。

<figure><img src="https://2817247209-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FS2wT6ommdiuYru74JEtd%2Fuploads%2Fgit-blob-485c5203f0cb3358e692d82cfdae052b85536517%2Fupsert-mode-empty-row.png?alt=media" alt=""><figcaption></figcaption></figure>

シート内の空行にある＋ボタン **\[A]** を押して新規行を追加すると、その行の先頭には通常モードの場合と同じように橙色のマーク **\[B]** が表示されます。

<figure><img src="https://2817247209-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FS2wT6ommdiuYru74JEtd%2Fuploads%2Fgit-blob-fd718960213570a7debf4b59e6b47f31a50d713f%2Fcopy-paste-upsert-import.png?alt=media" alt=""><figcaption></figcaption></figure>

Excelやスプレッドシートから取り込みたいデータを範囲選択してコピーし、シート内に作成された新規行のセルに対して貼り付けると、特定キーに指定した列に貼り付けられた値に一致するレコードを自動的に検索します。

<figure><img src="https://2817247209-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FS2wT6ommdiuYru74JEtd%2Fuploads%2Fgit-blob-49f0a37bd9f7ee67ab1c6fff51b13899c85da395%2Fupsert-mode-update-insert-rows.png?alt=media" alt=""><figcaption></figcaption></figure>

キーの値に完全一致する既存のレコードが見つかった場合、その行にレコードの情報が読み込まれて表示されます。行の先頭には緑色のマーク **\[C]** が表示され、保存時には既存のレコードを更新することを示します。特定キーとなっている列以外のデータについては、見つかった既存レコードと値の差分があるセルのみが更新対象としてマークされます。 **\[D]**

キーの値に一致するレコードが見つからなかった場合、その行の先頭には橙色のマークが表示されたままとなり、保存時には新規にレコードが作成されることを示します。 **\[E]**

シートの保存ボタンを押すと、既存レコードに一致している行（先頭が緑色のマーク）では対応するレコードを更新し、一致するキーを持たない行（先頭が橙色のマーク）では新規レコードを作成します。

{% hint style="info" %}
更新挿入モードでは、シートの設定で「新規レコードの作成」操作許可にチェックがない場合でもシートへ新規行の追加が可能となりますが、その行に入力したデータが既存のレコードとして存在しない場合、レコードの保存時にエラーが表示されます。
{% endhint %}

## 重複レコードの解決

<figure><img src="https://2817247209-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FS2wT6ommdiuYru74JEtd%2Fuploads%2Fgit-blob-05f7df1252f54dce54f72b3948c51955c17e4a4f%2Fupsert-mode-dup-record-mark.png?alt=media" alt=""><figcaption></figcaption></figure>

キーの値に一致するレコードが複数あった場合、複数あるレコードのうちの１つが自動的に更新対象のレコードとして選択され、その行の特定キーのセルには重複マーク **\[F]** が表示されます。

<figure><img src="https://2817247209-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FS2wT6ommdiuYru74JEtd%2Fuploads%2Fgit-blob-0fc1c0533ff4f45b756bf7b656376b7eca2a9536%2Fupsert-mode-dup-record-lookup-search.png?alt=media" alt=""><figcaption></figcaption></figure>

特定キーのセルをダブルクリックしてルックアップ検索することで、重複するレコードの中から明示的に更新するレコードを指定できます。

## ルックアップ検索での更新レコードの選択

一致するレコードが見つからなかった場合や、重複レコードがあった場合、明示的に更新するレコードを検索して指定することが可能です。特定キーのセルをダブルクリックして対象のレコードをルックアップ検索することで、明示的に更新するレコードを指定できます。

特定キーでのルックアップ検索は、通常の参照関係のルックアップ検索の場合と同様に、キーワードに一致するものを検索できます。またルックアップ検索ダイアログを表示してグリッド表形式で検索および指定することも可能です。

{% hint style="info" %}
ルックアップ検索の候補に特定キーの列に指定された項目以外の情報を表示するには、表示したい項目の列をシートの固定表示領域に設置しておく必要があります。
{% endhint %}

## 複合キーの指定

シート内には複数の特定キー列を指定することが可能です（複合キー）。特定キーを持つ列が複数設定された場合は、すべての特定キー列の値（空白値を除く）に一致するものが既存レコードとして検索されます。

## 更新挿入モードにおけるフィルタの動作

更新挿入モードにおいても、通常モードと同様にシート内の列に対してフィルタを設定可能です。ただし、更新挿入モードでのフィルタは、特定キーに一致するレコードの検索対象をあらかじめ絞り込むのに利用されます。そのため、キー値に一致するレコードがデータベース内に存在する場合でも、そのレコードがフィルタの条件を満たしていない場合は、更新候補のレコードとして解決されることはありません。

たとえば、メール項目を特定キーとしてリード情報を取り込むシートに対して、メール送信除外項目のチェックがされていないことを条件とするフィルタがかかっている場合、メール送信除外となっているリードレコードは同じメールアドレスが取込データにあったとしても更新の対象とはなりません。

また、連動シートで子オブジェクトのレコード情報を表示している場合は、連動元シートで選択されている親のレコードのIDでフィルタがかかった状態となるため、更新挿入モードでは同じ親レコードに属しているレコードのみに一致検索対象が絞り込まれます。これはSheetコンポーネントでレコードページにシートを埋め込んでいるときに関連レコードIDでフィルタをかけている場合も同様となります。

{% hint style="info" %}
更新挿入モードにおいては列のソートの設定は無視されます。また、データ列および数式列に対して指定されているフィルタは更新挿入モードでは利用されません。
{% endhint %}
