これからSalesforce のVisualforce で画面開発を行う方へ、コンポーネントを選ぶ時に迷わない、知っておくと便利なワンポイントを紹介いたします。
Visualforce 画面の入力コンポーネントを作成する<apex:inputText> と<apex:inputField> は、見た目こそ大きく変わりませんが、実装してみると細かい挙動が異なります。
今回は、入力コンポーネントの入力値が想定された桁数をオーバーした場合、どのような挙動の違いがあるのか実際の操作画面を見ながら整理していきたいと思います。
環境前提
挙動を確認する前提として、以下のようなVisualforce 画面を作成します。
- カスタムオブジェクト(Hoge__c)のテキスト項目(データ型:テキスト)、数値項目(データ型:数値)に対して編集が可能である
- カスタムオブジェクトの入力規則は設定しない
- 画面の入力コンポーネントは桁数を制限する属性を付与しない
- 画面の「更新」ボタンを押下することで入力値をレコードへ更新(Update)する
- 更新処理が正常終了した場合はアラートで”更新が正常終了しました。” を表示
- 更新処理でexceptionエラーがある場合はアラートでエラーメッセージを表示


比較条件
以下の3つのパターンで、設定桁数をオーバーする値を入力してみます。
- 「テキスト項目」が最大桁数をオーバー
- 「数値項目」の整数部が最大桁数をオーバー
- 「数値項目」の小数部が最大桁数をオーバー
実行結果
<apex:inputText> <apex:inputField> それぞれで実装したコンポーネントの挙動は以下の通りです。
比較条件 | <apex:inputText> で実装した場合 | <apex:inputField> で実装した場合 |
---|---|---|
条件1 | 項目の最大桁数を超過した桁数の入力ができるが、レコード更新処理にでexceptionエラーが発生する。 | 項目の最大桁数を超過した桁数は入力できない。 |
条件2 | 項目の最大桁数を超過した桁数は入力できるが、レコード更新処理でexceptionエラーが発生する。 | 項目の最大桁数を超過した桁数は入力できるが、レコード更新処理実行時、コンポーネントにエラーメッセージを表示する。 |
条件3 | 項目の最大桁数を超過した桁数の入力ができ、レコード更新処理が正常終了する。登録値は入力値と同値になる。 | 項目の最大桁数を超過した桁数の入力ができ、レコード更新処理が正常終了する。登録値は項目の設定桁数で四捨五入した値となる。 |
※<apex:inputText> は属性「maxlength」を使用すれば入力桁数の制御が可能
エラー発生のタイミングや表示内容に違いがあることがわかります。
それでは、それぞれの挙動について実際の画面と共に確認していきましょう。
<apex:inputText> で実装する場合
条件1 「テキスト項目」が最大桁数をオーバー
例として、「テキスト項目」の最大文字数が「10」の設定のコンポーネントに11桁の文字列「abcdefghijk」を入力し、更新ボタンを押下する。

すると、コンポーネントの入力操作に制限はないが、更新ボタン押下時の処理でexception エラーが発生する。

条件2 「数値項目」の整数部が最大桁数をオーバー
例として、「数値項目」の最大文字数が「5」、少数点の位置が「1」の設定のコンポーネントに、整数部が6桁の数値「123456.0」を入力して更新ボタンを押下する。

すると、コンポーネントの入力操作に制限はないが、更新ボタン押下時の処理でexception エラーが発生する。

条件3 「数値項目」の小数部が最大桁数をオーバー
例として、「数値項目」の最大文字数が「5」、少数点の位置が「1」の設定のコンポーネントに、小数部が2桁の数値「100.35」を入力して更新ボタンを押下する。

すると、更新ボタン押下時の処理は正常終了し、登録値は入力値と同値になる。


<apex:inputField> で実装する場合
条件1 「テキスト項目」が最大桁数をオーバー
例として、更新するテキスト項目の最大文字数が「10」の設定のコンポーネントに11桁の文字列「abcdefghijk」を入力しようとすると、項目最大桁数を超過した11桁目の「k」は入力することができない。

この状態で更新ボタンを押下すると、入力値は桁数をオーバーしないので処理は正常終了する。

条件2 「数値項目」の整数部が最大桁数をオーバー
例として、数値項目の最大文字数が「5」、少数点の位置が「1」のコンポーネントに整数部が6桁の数値「123456.0」を入力して更新ボタンを押下する。

すると、コンポーネントの入力操作に制限はないが、更新ボタン押下時の処理でコンポーネントにエラーメッセージが表示される。これはSalesforce 画面と同様の挙動である。(ただし表示されるメッセージ内容は異なる)


条件3 「数値項目」の小数部が最大桁数をオーバー
例として、「数値項目」の最大文字数が「5」、少数点の位置が「1」の設定のコンポーネントに小数部が2桁の数値「100.35」を入力して更新ボタンを押下する。

すると、更新ボタン押下時の処理は正常終了し、登録値は項目の設定桁数で四捨五入した値となる。


最後に
本投稿ではVisualforce 画面の入力コンポーネントの<apex:inputText> と<apex:inputField> で、入力値の桁数をオーバーした場合に着目し、エラー発生のタイミングや表示内容に違いがあることが確認できました。Visualforce での画面作成時に本投稿を思い出していただき、少しでもお役に立てれば幸いです。
Visualforce 画面の設定には、本投稿の内容以外にも項目の入力規則やコンポーネントの属性設定、Apex クラスのコーディングによる制御など多くのカスタマイズ要素が存在します。
今後もSalesforce 開発の中で、困った点やその改善策などを共有していこうと思います。
投稿者プロフィール

-
2020年頃よりSalesforce の学習を始めました。
Apex によるバックエンド処理や、Visualforce 画面などを用いた開発業務を行っています。
日々進化するSalesforce での開発における、便利な方法を皆さまと共有できればと思います。
最新の投稿
Salesforce2025.01.23【Salesforce】ユーザーを無効化する時に注意すべきポイント2つを紹介
Salesforce2024.07.01【Salesforce】注意!CSV出力時のデータ型ごとの出力形式の違い
Salesforce2024.01.19【Salesforce】非同期処理の大量のデータを他システムへ連携するためのDataspider Cloud 活用例
Salesforce2023.05.24【Salesforce】Apex処理のガバナ制限におけるヒープサイズ制限による「System.LimitException: Batchable instance is too big」エラーの回避方法について