2022年8月1日月曜日

ページ・アイテムの書式を検証する

 前回の記事で、主キーの書式を検証する方法について説明を省いていたので、その方法について少し紹介してみます。

必ずしも主キーである必要はなく、書式の決まった列のデータが対象になります。

前回の記事を元にして、表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を入力し、発生するエラーを確認します。


ORA-2290が発生し、そのメッセージがそのまま表示されます。

エラー処理ファンクションを定義することにより、表示されるエラー・メッセージを変更することは可能です。

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コードの実行を選択し、設定コードに以下を記述します。


動的アクションによる検証では、値の変更が確定した時点でエラー・メッセージが表示されます。


また、正しい書式のデータを入力し直すと、エラー・メッセージが消去されます。データの送信は不要です。


あらゆる場合で、表NK_TESTの列CODEに保存される値の書式を保証するわけではありませんが、APEXアプリケーションの利用者からみた使いやすさという点で、メリットがあります。


大文字入力を強制する



ユニバーサル・テーマのコンテント・モディファイアを使うと、ページ・アイテムの入力を大文字に強制することができます。製品コードなどには英大文字を使う場合が多いと思うので、設定しておくと便利でしょう。

詳細CSSクラスu-textUpperを指定すると、入力する英字がキーボードの設定に関わらず大文字になります。


以上、ページ・アイテムの書式の検証方法の紹介でした。

Oracle APEXのアプリケーション作成の参考になれば幸いです。