この記事では主キーのメールアドレスフィールド(入力必須、ユニーク)を用意しつつ、フォームでは重複を許可して登録させる方法をご紹介します。
設定イメージ
登録フォームにはユニーク制約が設定されていない別のメールアドレスフィールドを入力項目として用意します。
ただし、主キーのメールアドレスフィールドに何かしらの値を登録しないと入力必須エラーが発生するため、JavaScriptによって生成されたランダムなメールアドレスを一時的なメールアドレスとして裏側で登録します。
フォームから登録されると、DBトリガのレコードアクションによりフォームで入力されたメールアドレスが主キーのメールアドレスにマッピングされます。
しかし、メールアドレスが既に存在している場合は重複エラーとなりマッピングが失敗します。
マッピングが失敗した場合は、メールアドレス重複フラグを立てます。
メールアドレス重複フラグの有無を条件とすることで、重複した場合にユーザーや事務局にメールを送信したり、カスタムプログラムによって重複したデータを削除したりすることが可能となります。
ただし、主キーのメールアドレスフィールドに何かしらの値を登録しないと入力必須エラーが発生するため、JavaScriptによって生成されたランダムなメールアドレスを一時的なメールアドレスとして裏側で登録します。
フォームから登録されると、DBトリガのレコードアクションによりフォームで入力されたメールアドレスが主キーのメールアドレスにマッピングされます。
しかし、メールアドレスが既に存在している場合は重複エラーとなりマッピングが失敗します。
マッピングが失敗した場合は、メールアドレス重複フラグを立てます。
メールアドレス重複フラグの有無を条件とすることで、重複した場合にユーザーや事務局にメールを送信したり、カスタムプログラムによって重複したデータを削除したりすることが可能となります。
DBフィールド設定
設定に必要なフィールドのみを記載しています。
表示名(任意) | フィールドタイプ | DB上で必須な属性 |
---|---|---|
メールアドレス(主キー) ※追加済みの場合は不要 |
メールアドレス |
必須制約:あり ユニーク成約:あり |
メールアドレス(フォーム用) | メールアドレス | なし |
メールアドレス重複フラグ | セレクト | 1:重複 |
DBトリガ設定
レコードアクション① メールアドレスマッピング
フォームで入力されたメールアドレスを主キーのフィールドにマッピングするための設定です。重複するメールアドレスの場合はマッピングが成功せず、②のアクションでメールアドレス重複フラグが立てられます。
レコードアクション設定
トリガ種別 | 登録トリガ |
---|---|
アクション先 | 自DB |
アクション先への操作 | 更新 |
処理設定
発動条件 |
指定する 経路条件:一部の経路 > フォーム |
---|---|
処理タイプ | 更新 |
処理マッピング |
アクション先DBフィールド:メールアドレス(主キー) = 格納値:メールアドレス(フォーム用) |
エラー処理 |
フォーマットチェック:エラー終了 入力必須チェック:エラー終了 重複不可チェック:アクション先DBに更新せずに、次のアクションへ |
レコードアクション② メールアドレス重複フラグ立て
「メールアドレス(主キー)」と「メールアドレス(フォーム用)」が一致してない場合(マッピングが成功していない場合)にメールアドレス重複フラグを立てるトリガ設定です。レコードアクション設定
トリガ種別 | 登録トリガ |
---|---|
アクション先 | 自DB |
アクション先への操作 | 更新 |
処理設定
発動条件 |
指定する 経路条件:一部の経路 > フォーム 関数条件: @newDB2.email <> @newDB2.email_temp |
---|---|
処理タイプ | 更新 |
処理マッピング |
アクション先DBフィールド:メールアドレス重複フラグ = 格納値:
'1' |
エラー処理 |
フォーマットチェック:エラー終了 入力必須チェック:エラー終了 重複不可チェック:エラー終了 |
登録フォーム設定
メールアドレス(フォーム用)の入力項目を追加する
既存のフォームに設定を行う場合は、「メールアドレス(フォーム用)」の入力項目を追加します。メールアドレス(主キー)のhiddenタグを追加する
JavaScriptで生成したランダムなメールアドレスを「メールアドレス(主キー)」フィールドに登録するためのタグを追加します。既存のフォームを修正する場合は、入力と完了の両方のステップからメールアドレス(主キー)の項目を削除したのちに、下記のソースを入力ステップに追加してください。
html
<!--/* メールアドレス(主キー)(email) */--> <sp:input-field name="f0X"></sp:input-field> <input id="email-input" type="hidden" th:name="${fields['f0X'].name}" value="">
JavaScript
window.onload = function() { const characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; let email = ''; for (let i = 0; i < 16; i++) { email += characters.charAt(Math.floor(Math.random() * characters.length)); } email += '@example.com'; const emailInput = document.getElementById('email-input'); emailInput.value = email; }
テスト登録&チェック
設定完了後はテスト登録を行い、メールアドレスが正しくマッピングされているか、重複している場合に正しくメールアドレス重複フラグが立っているか などをご確認ください。
メールアドレス重複フラグが立ったデータに対する設定例
ユーザーまたは事務局宛てに重複お知らせメールを送信する
配信条件を[メールアドレス重複フラグ][等しい][重複]としたメールアクションを作成することで、メールアドレスが重複した場合のみメールを配信することが可能です。フォーム送信後にメールを配信する設定方法については、サポートサイト フォームのメールアクション をご覧ください。
一定期間経過した重複データを削除する
カスタムプログラムを使用することで、一定期間超過した重複データを削除することが可能です。カスタムプログラムの機能説明は、サポートサイト スケジュールトリガのカスタムプログラムアクション をご覧ください。
レコードを一括削除するプログラムについては、カスタムプログラムの使いどころ や APIメソッドごとのサンプルコードまとめ Record (batch) の「レコード一括削除依頼作成メソッド」を参考にしてください。