フォーマット
UPSERT()関数のフォーマットは次のとおりです。
- Target Table: データを挿入・更新するターゲットフォームです。
- Main Condition: メイン条件は、どのレコードを更新するかを特定するために使用します。メイン条件は論理関数で構成されます。
- Sub Condition:
- Target Column:
- Target Value: Target Columnを更新する値を指します。Target Valueには、現在のエントリフォームのコンポーネント値、更新対象となるターゲットフォームのコンポーネント値、固定値、または他の関数で構成された値を指定できます。
ケース1: ベーシックコンポーネントのデータを挿入する際に、ターゲットフォームのベーシックコンポーネントのデータを更新する
- 使用するフォーム
- 要件
- 数式の設定詳細と数式の解説
- Target Table: 在庫テーブル。
- Main Condition: EQ(在庫テーブル.商品名, 商品名)。更新対象のレコードは、在庫テーブル内で商品名がエントリフォームで入力された商品名と等しいものです。
- Sub Condition: 「在庫テーブル」で更新されるのはベーシックコンポーネントである商品名と在庫数量であり、明細が関わらないため、Sub Conditionには「」を入力します。
- Target Column: 在庫テーブル.商品名。
- Target Value: 商品名。データが見つからない場合、データを挿入する際、在庫テーブルの商品名の値は購買テーブルの商品名の値となります。
- Target Column: 在庫テーブル.在庫数量
- Target Value: 在庫テーブル.在庫数量 + 購買数量。条件に基づいて在庫商品をマッチングした後、今回の購買数量を元の在庫数量に加算します。
ケース2: サブフォームコンポーネントのデータを挿入する際に、ターゲットフォームのベーシックコンポーネントのデータを更新する
- 使用するフォーム
- 要件
- 数式の設定詳細と数式の解説
ケース3: ベーシックコンポーネントのデータを挿入する際に、ターゲットフォームのサブフォームコンポーネントのデータを更新する
- 使用するフォーム
- 要件
- 数式の設定詳細と数式の解説
注意事項
- ベーシックコンポーネントと明細下の値を同時に更新することはできません。このようなシナリオがある場合は、2つのUPSERT関数に分割してください。1つはベーシックコンポーネントの更新用、もう1つは明細下のデータの更新用として使用します。
- 上記で説明した商品購買・在庫のシナリオでは、フォームデータが削除された場合、在庫数量も相応に減算する必要があります。この場合、「フォーム削除」イベントにUPDATE関数を設定してデータを減算し、データの整合性を確保できます。
- UPSERT関数は一度に最大100件のメインフォームデータのレコードを更新できます。これを超えるとエラーとなり、送信に失敗します。Freeプランでは、一度に特定のフォームデータの下に最大50件の明細データエントリを挿入できます。ベーシック版およびプロフェッショナル版では、一度に500件の明細データエントリを更新・挿入できます(デフォルトは50件です。最大件数を500に設定するには、フォーム編集ページで設定する必要があります)。これを超えた場合もエラーとなり、「送信に失敗しました」と表示されます。
- UPSERT関数は一度に1つのフォーム下の1つの明細コンポーネントのデータのみを操作できます。複数の明細コンポーネントのデータを操作する必要がある場合は、複数のUPSERT関数を設定してください。
- Main ConditionとSub Conditionは論理関数で構成されます。ANDとOR以外の論理関数では、第1パラメータはターゲットテーブルのコンポーネントでなければならず、2つのパラメータの位置を入れ替えることはできません。
- UPSERT関数を設定して明細データを別のテーブルに挿入(更新)する際、明細下の2つのレコードが同じ条件に該当する場合、別のテーブルには2つのレコードが挿入されます。1つ目の明細レコードが挿入され、2つ目の明細レコードが更新されるわけではありません。
- プレミアム数式コンポーネントの対応スコープは以下のとおりです