前回の記事で、主キーの書式を検証する方法について説明を省いていたので、その方法について少し紹介してみます。
必ずしも主キーである必要はなく、書式の決まった列のデータが対象になります。
前回の記事を元にして、表NK_TESTの列CODEを対象とします。
列CODE(ページ・アイテムとしてはP3_CODE)の書式を、英大文字3文字と数値4文字を"-"で連結した文字列に限定します。以下がコードの例になります。
ABC-2323
XEF-9981
チェック制約を使う
データベースの表にチェック制約を適用し、指定した書式以外でのデータ入力を禁止します。以下の正規表現と一致すると、書式が正しいと判断します。
^[A-Z]{3}\-[0-9]{4}$
以下のALTER文を実行し、列CODEにチェック制約CODE_FORMAT_CHECKを作成します。
alter table nk_test add constraint code_format_check check (regexp_like(code,'^[A-Z]{3}\-[0-9]{4}$','c'));
書式の正しくないCodeを入力し、発生するエラーを確認します。
エラー処理ファンクションを定義することにより、表示されるエラー・メッセージを変更することは可能です。
APEXに限らず、どのような方法によるデータ入力でも、列CODEの書式が正しいことが保証される点は良いことです。他方、APEXアプリケーションからみると、データを送信するまで入力値の検証が行われないこと、エラー・メッセージがユーザーに分かりにくいというデメリットがあります。
ページ・アイテムの検証を使う
ページ・アイテムP3_CODEに検証を作成します。
作成した検証の識別の名前を書式の検証とします。検証のタイプは式、言語にPL/SQLを選択し、PL/SQL式として以下の正規表現を使った式を記述します。
regexp_like(:P3_CODE,'^[A-Z]{3}\-[0-9]{4}$','c')
今回は主キー項目ということもあり、常に実行はONにします。
エラーのエラー・メッセージとして以下を記述します。
#LABEL#の書式が正しくありません。
表示位置としてフィールドおよび通知でインライン表示を選択し、関連づけられたアイテムをP3_CODEとします。
以上の設定で、発生するエラーを確認してみます。
エラーの表示位置としてフィールドおよび通知でインライン表示を選択しているため、ページ自体とページ・アイテムにインラインでエラー・メッセージが表示されます。
開発者によってエラー・メッセージを定義できるのは良い点です。ただし、データを送信するまで書式の検証が行われない点に違いはありません。
動的アクションを使う
値が変更される都度、動的アクションで書式の検証を行います。
ページ・アイテムP3_CODEに動的アクションを作成します。TRUEアクションとしてJavaScriptコードの実行を選択し、設定のコードに以下を記述します。