設定・自動化

新規作成とコピー作成をISCLONE関数で見分ける方法

新規作成とコピー作成は、どちらもデータベース上は同じ挿入操作です。ISCLONE関数を使って両者を見分け、処理を分岐させる方法を説明します。

2025.07.17

なぜ見分ける必要があるのか

取引先や商談を「コピー」ボタンから複製すると、項目の値を引き継いだまま新しいレコードが作られます。まっさらな新規作成と同じ自動処理を走らせると、コピー元の情報を引き継いだレコードに対して、本来は不要な初期化通知や既定値の上書きが起きることがあります。新規作成とコピー作成を区別できれば、この処理を分けられます。

ISNEW関数だけでは区別できない

レコードトリガーフローの数式でよく使うISNEW()は、レコードが新規作成されたときにTRUEを返します。ただし、通常の新規作成でもコピーからの作成でも、どちらもレコードの挿入である点は同じです。そのためISNEW()は両方のケースでTRUEになり、これだけでは新規作成とコピー作成を分けられません。

ISCLONE関数でコピーかどうかを判定する

Salesforceには、レコードが別のレコードのコピー(クローン)かどうかを判定するISCLONE()という関数があります。対象のレコードがコピーによって作られていればTRUE、そうでなければFALSEを返します。NOT()と組み合わせて、判定を反転させることもできます。

公式のリファレンスでは、ISCLONE()は検証ルールで使う関数として案内されており、数式項目では使えません。加えて、Salesforceのリリースノートには「レコードトリガーフローの数式でISCLONE関数を使う」という記事が別に用意されており、フローの数式リソースでも同様に使えることが案内されています。

フローの作り方

  1. レコードトリガーフローを新規作成する

    Flow Builderで「新規フロー」から「レコードトリガーフロー」を選びます。

  2. 開始を設定する

    判定したいオブジェクトを選び、トリガーは「レコードが作成された時」にします。項目の初期化だけならレコードトリガーフロー全体を保存の前で組み、関連レコードの作成なども行うなら保存の後で組みます。

  3. 数式リソースを作成する

    リソース種別は「数式」。API参照名は「IsRecordClone」、データ型は「真偽値」、数式には「ISCLONE()」と入力します。

  4. 決定要素で分岐する

    表示ラベル「新規かコピーかの判定」。アウトカム「コピーから作成」の条件要件は「{!IsRecordClone}」が「次の値と一致する」「{!$GlobalConstant.True}」にします。デフォルトアウトカムが通常の新規作成として扱われます。

  5. 各パスの処理を組む

    「コピーから作成」のパスには、引き継いだ値をリセットする割り当てなど、コピー時だけ必要な処理を置きます。デフォルトのパスには、通常の新規作成向けの処理を置きます。

  6. フローを保存して有効化する

    フロー名とAPI参照名を入力し、保存後に「有効化」します。

新規フローのダイアログ。「最初から開始」が赤枠で選ばれている
新規フローの最初の画面です。赤枠の「最初から開始」を選んで次へ進みます。
フロー種別の選択画面。「レコードトリガーフロー」が赤枠で選ばれている
種別の選択です。赤枠のレコードトリガーフローを選び、右下の「作成」を押します。

ここで間違えやすい

間違い何が起きるか
ISNEW()だけで新規作成とコピー作成を分けようとする両方のケースでTRUEになるため、判定が意図どおりに分岐しません
ISCLONE()を数式項目に使おうとする使えません。検証ルールかフローの数式リソースで使います
判定結果を確認せずに本番組織へ反映するコピー操作以外の作られ方(連携ツールからの挿入など)も含め、サンドボックスで想定するケースを試してから反映します
保存の前フローに「レコードを作成」など未対応の要素を置く保存の前フローで使える要素は「割り当て」「決定」「レコードを取得」「ループ」だけです

動作確認のしかた

  1. 通常の新規作成で確認する

    対象オブジェクトのレコードを、コピーを使わず新規作成します。保存後、デフォルトパス側の処理(通常の新規作成向けの処理)が反映されていることを確認します。

  2. コピー作成で確認する

    既存レコードを開き、「コピー」ボタンから複製します。値を確認・編集して保存し、「コピーから作成」パス側の処理が反映されていることを確認します。

testObject1の新規作成画面。赤枠の名前とテキスト項目に「作成1」が入っている
まず通常の新規作成です。赤枠の2項目に同じ値を入れて保存し、コピー側の処理が動かないことを確かめます。
作成1の詳細画面。赤枠の名前が「作成1」のまま残っている
保存後の詳細です。赤枠の名前が入力したままなら、コピーから作成のパスは通っていません。
コピーボタンから開いた作成画面。赤枠の名前とテキスト項目に「コピー1」が入っている
次はコピーボタンから複製します。赤枠の2項目を書き換えて保存してください。
詳細画面。赤枠の名前が「コピーされました。」に書き換わっている
コピー作成後の詳細です。赤枠の名前がフローで書き換わっていれば、分岐が意図どおり働いています。

2つのパターンで結果が異なっていれば、ISCLONE()による分岐が意図どおりに働いています。同じ結果になってしまう場合は、決定要素の条件要件や数式リソースの参照名が正しく設定されているかを見直します。

確認した環境

  • 2026年9月 / Salesforce Summer '26(APIバージョン67.0)時点の公式ドキュメントで、ISCLONE関数の定義とレコードトリガーフローの決定要素の構成を確認しています

まとめ

  • 新規作成とコピー作成は、どちらもレコードの挿入であるためISNEW()だけでは区別できません
  • ISCLONE()は、レコードが別のレコードのコピーであるときにTRUEを返す関数です
  • ISCLONE()は検証ルールとフローの数式リソースで使えますが、数式項目では使えません
  • 数式リソースでISCLONE()を評価し、決定要素で「コピーから作成」と通常の新規作成を分岐させます

参考:当時の画面

記事を最初に書いた当時の画面です。いまの手順と違うところは、各画像の説明に書いています。

開始を設定の画面。オブジェクトはtestObject1、トリガーはレコードが作成された、数式欄にISCLONE()が入っている
開始の設定です。オブジェクトとトリガーの選び方を見てください。当時はエントリ条件の数式にISCLONE()を直接書いていました。

Salesforceの導入・運用についてご相談ください

導入前の検討から、お使いの環境の改修・運用、AIとの連携まで承ります。状況を伺ったうえで、進め方をご提案します。