新規作成とコピー作成をISCLONE関数で見分ける方法
新規作成とコピー作成は、どちらもデータベース上は同じ挿入操作です。ISCLONE関数を使って両者を見分け、処理を分岐させる方法を説明します。
なぜ見分ける必要があるのか
取引先や商談を「コピー」ボタンから複製すると、項目の値を引き継いだまま新しいレコードが作られます。まっさらな新規作成と同じ自動処理を走らせると、コピー元の情報を引き継いだレコードに対して、本来は不要な初期化通知や既定値の上書きが起きることがあります。新規作成とコピー作成を区別できれば、この処理を分けられます。
ISNEW関数だけでは区別できない
レコードトリガーフローの数式でよく使うISNEW()は、レコードが新規作成されたときにTRUEを返します。ただし、通常の新規作成でもコピーからの作成でも、どちらもレコードの挿入である点は同じです。そのためISNEW()は両方のケースでTRUEになり、これだけでは新規作成とコピー作成を分けられません。
ISCLONE関数でコピーかどうかを判定する
Salesforceには、レコードが別のレコードのコピー(クローン)かどうかを判定するISCLONE()という関数があります。対象のレコードがコピーによって作られていればTRUE、そうでなければFALSEを返します。NOT()と組み合わせて、判定を反転させることもできます。
公式のリファレンスでは、ISCLONE()は検証ルールで使う関数として案内されており、数式項目では使えません。加えて、Salesforceのリリースノートには「レコードトリガーフローの数式でISCLONE関数を使う」という記事が別に用意されており、フローの数式リソースでも同様に使えることが案内されています。
フローの作り方
レコードトリガーフローを新規作成する
Flow Builderで「新規フロー」から「レコードトリガーフロー」を選びます。
開始を設定する
判定したいオブジェクトを選び、トリガーは「レコードが作成された時」にします。項目の初期化だけならレコードトリガーフロー全体を保存の前で組み、関連レコードの作成なども行うなら保存の後で組みます。
数式リソースを作成する
リソース種別は「数式」。API参照名は「IsRecordClone」、データ型は「真偽値」、数式には「ISCLONE()」と入力します。
決定要素で分岐する
表示ラベル「新規かコピーかの判定」。アウトカム「コピーから作成」の条件要件は「{!IsRecordClone}」が「次の値と一致する」「{!$GlobalConstant.True}」にします。デフォルトアウトカムが通常の新規作成として扱われます。
各パスの処理を組む
「コピーから作成」のパスには、引き継いだ値をリセットする割り当てなど、コピー時だけ必要な処理を置きます。デフォルトのパスには、通常の新規作成向けの処理を置きます。
フローを保存して有効化する
フロー名とAPI参照名を入力し、保存後に「有効化」します。
ここで間違えやすい
| 間違い | 何が起きるか |
|---|---|
ISNEW()だけで新規作成とコピー作成を分けようとする | 両方のケースでTRUEになるため、判定が意図どおりに分岐しません |
ISCLONE()を数式項目に使おうとする | 使えません。検証ルールかフローの数式リソースで使います |
| 判定結果を確認せずに本番組織へ反映する | コピー操作以外の作られ方(連携ツールからの挿入など)も含め、サンドボックスで想定するケースを試してから反映します |
| 保存の前フローに「レコードを作成」など未対応の要素を置く | 保存の前フローで使える要素は「割り当て」「決定」「レコードを取得」「ループ」だけです |
動作確認のしかた
通常の新規作成で確認する
対象オブジェクトのレコードを、コピーを使わず新規作成します。保存後、デフォルトパス側の処理(通常の新規作成向けの処理)が反映されていることを確認します。
コピー作成で確認する
既存レコードを開き、「コピー」ボタンから複製します。値を確認・編集して保存し、「コピーから作成」パス側の処理が反映されていることを確認します。
2つのパターンで結果が異なっていれば、ISCLONE()による分岐が意図どおりに働いています。同じ結果になってしまう場合は、決定要素の条件要件や数式リソースの参照名が正しく設定されているかを見直します。
確認した環境
- 2026年9月 / Salesforce Summer '26(APIバージョン67.0)時点の公式ドキュメントで、ISCLONE関数の定義とレコードトリガーフローの決定要素の構成を確認しています
まとめ
- 新規作成とコピー作成は、どちらもレコードの挿入であるため
ISNEW()だけでは区別できません ISCLONE()は、レコードが別のレコードのコピーであるときにTRUEを返す関数ですISCLONE()は検証ルールとフローの数式リソースで使えますが、数式項目では使えません- 数式リソースで
ISCLONE()を評価し、決定要素で「コピーから作成」と通常の新規作成を分岐させます
参考:当時の画面
記事を最初に書いた当時の画面です。いまの手順と違うところは、各画像の説明に書いています。
Salesforceの導入・運用についてご相談ください
導入前の検討から、お使いの環境の改修・運用、AIとの連携まで承ります。状況を伺ったうえで、進め方をご提案します。