オープンソースのERP iDempiereの標準ウィンドウは汎用的な画面としてはとても良くできています。多機能で汎用的に作られた画面は、どんなデータ入力も可能にするいっぽうで、その操作になれるのに多少の練習が必要であり、単純なデータの入力には多機能過ぎでした。そこで、JPiereでは単純なデータ入力を簡単に省力化して入力できる画面(ウィンドウ)を作成しました。
シンプル インプット ウィンドウの特徴
シンプル インプット ウィンドウは、1つのテーブルへのデータ入力をできるだけ簡単(省力的)に行う事を目的に作られた画面(ウィンドウ)です。標準ウィンドウのように1つのウィンドウをタブ構成にして複数のテーブルにデータを登録する事はできませんが、その代り、より簡単に、より素早くスプレッドシートに似た操作感覚でデータを入力する事ができます。
◆より簡単に、より素早くデータの入力・更新・削除が行える
- カーソルをTabキーで横移動し、Enterキーで縦に移動させる事ができます。
- フィールド(項目/カラム)の表示/非表示や並び順、表示幅をユーザー毎に設定する事ができます。
- 固定フィールドを指定する事で、横スクロールする場合にも、編集しているレコードを簡単に識別する事ができます。
- データが入力されていないSearchフィールドでは、Enterキーを押す事で検索ウインドウを表示させる事ができるなど、なるべくキーボードだけで操作できるように配慮しています。
- 最後のレコードの予め指定したフィールドと右端のフィールドでEnterキーを押すと、次の行が追加されます。
◆1つのデータベーステーブルへのデータ入力に特化
- 1つのシンプル インプット ウィンドウでデータを入力・更新・削除する事ができるのは、1つのデータベーステーブル(以下、テーブル)だけです。1つのデータベーステーブルに特化する事で、操作性の向上を行っています。
- 主キーが、デーブル名+_IDのテーブルであれば、基本的にどのテーブルでもシンプル インプット ウィンドウでデータを入力・更新・削除する事ができます。
◆その他の特徴
- テーブルの1つのフィールドを指定して、そのフィールドの値ごとに1つのタブにグループ化してデータを表示する事ができます(タブフィールド)。
- 数値フィールドの値を合計して項目のラベルに表示する事ができます。
シンプル インプット ウィンドウの画面構成
シンプル インプット ウィンドウは、"検索条件&初期値入力領域"、"ボタン領域"、"編集領域"により構成されています。
検索条件&初期値入力領域
画面上部の“検索条件&初期値入力領域”では、データ検索の際の検索条件と、新規データ入力の際の初期値を設定しておく事ができます。
- 検索条件 & 初期値入力領域に表示するフィールドは、シンプルインプットウィンドウ設定の画面で、自由に設定する事ができます。
- SQL JOIN句と併用する事で、他のテーブルの項目もフィールドに設定する事ができます。
- 検索条件 & 初期値入力領域に表示するフィールド間でダイナミックバリデーションを設定する事ができます。
- 検索条件 & 初期値入力領域に表示するフィールドに、クイック入力ウィンドウを割り当てる事ができます。クイック入力ウィンドウが割り当てられたフィールドには、その横にボタンが表示されます。クイック入力ウィンドウで簡単に検索条件 & 初期値入力領域のフィールドの値を新規作成もしくは更新する事ができます。
ボタン領域
検索フィールドに入力された値をもとにデータを検索し、編集領域に表示します。データの編集途中で検索ボタンを押すと、変更を保存するかどうかポップアップウィンドウが表示されます。
OKボタンを押すと、変更を保存し、”検索条件&初期値入力領域”の値をもとにデータを検索し、編集領域に表示します。 キャンセルボタンを押すと、ポップアップウィドウが閉じ、検索ボタンを押す前の状態に戻ります。
検索条件&初期値入力領域に入力された値をもとに新規データを登録します。一番最後の行の右端でEnterキーを押すと、次の行が追加されます。 データの編集途中で新規作成ボタンを押すと、変更を保存するかどうかポップアップウィンドウが表示されます。
OKボタンを押すと、変更を保存し、編集領域が新規データ入力の状態になります。 キャンセルボタンを押すと、ポップアップウィドウが閉じ、新規作成ボタンを押す前の状態に戻ります。
変更及び追加したデータを保存します。数値項目の合計値を項目のラベルに表示するように設定していた場合、保存ボタンを押す事で再計算します。編集途中のデータがある場合、保存するまでは他のタブに移動する事はできません。
シンプルインプットウィンドウを初期の状態に戻します。 データの編集途中でホームボタンを押すと、変更を保存するかどうかポップアップウィンドウが表示されます。
OKボタンを押すと、変更を保存し、シンプルインプットウィンドウを初期の状態に戻します。 キャンセルボタンを押すと、変更を破棄し、シンプルインプットウィンドウを初期の状態に戻します。
プロセスアイコンは、タブの設定でツールバーボタンにプロセスが割り当たっている場合に表示され、選択しているデータに対してプロセスを実行する事ができます。 編集途中のデータがある場合には、プロセスの実行前に保存されます。 プロセスの実行はタブ単位で行われます。
レコードの削除を許可している場合に、削除アイコンが表示され、選択したレコードを削除する事ができます。レコードを選択し、削除ボタンを押すと確認のポップアップウィンドウが表示されます。
OKボタンを押すと選択したデータは削除され、キャンセルボタンを押すと、削除ボタンを押す前の状態に戻ります。 削除はタブ単位で行われます。
フィールド(項目/カラム)の表示/非表示や並び順、表示幅をユーザー毎に設定する事ができます。
カスタマイズボタンをクリックすると右のポップアップウィンドウが表示されます。右側に表示されているフィールドの並び順で編集領域にデータを表示する事ができます。
横スクロールする際に、指定したフィールドの数だけ固定する事ができます。固定フィールド数は、初期状態にした際に編集する事ができます。
編集領域
シンプル インプット ウィンドウの”編集領域”は、tabキーでカーソルを横移動し、Enterキーでカーソルを縦移動させる事ができます。
事前準備
◆テーブルの追加(2Pack.zipのパックイン)
META-INFフォルダの直下にある2Pack.zipをパックインして下さい。下記のエンティティが追加されます。
- JP_SimpleInputWindow(テーブルとカラム)
- JP_SimpleInputSearch(テーブルとカラム)
- シンプル インプット ウィンドウ設定(ウィンドウ)
◆シンプル インプット ウィンドウのもととなるウィンドウの作成
シンプル インプット ウィンドウは、シンプル インプット ウィンドウエンジンが標準ウィンドウの設定をもとに作成します。そのため予めシンプル インプット ウィンドウで表示する標準ウィンドウの設定を行っておく必要があります。
シンプル インプット ウィンドウの設定
事前準備が完了したらシンプル インプット ウィンドウの設定を行います。
◆シンプル インプット ウィンドウタブ
シンプル インプット ウィンドウタブでは、シンプル インプット ウィンドウの基本となる設定を行います。
- ウィンドウ(必須)…シンプルインプットウィンドウで表示したいタブが含まれているウィンドウを設定します。
- タブ(必須)…シンプル インプット ウィンドウで表示させたいタブを設定します。ウィンドウに設定したウィンドウのタブの中から選択入力します。
- タブフィールド…タブフィールドに設定したフィールドの値ごとに1つのタブにしてデータを表示する事ができます。タブフィールドを設定した場合は、SQL ORDER BY句に、タブフィールドに設定したフィールドの値でソートできるよう記述して下さい。
- 固定フィールド数…シンプル インプット ウィンドウで固定フィールドとするフィールド数のデフォルト値を設定します。
- ページ行数…ページングする行数(レコード数)を設定します。
- SQL JOIN句…SQL WHERE句の設定やSQL ORDER BY句の設定、検索フィールドの設定で、タブフィールドに設定したタブに対応するテーブル以外のテーブルを使用したい場合は、あらかじめSQL JOIN句に記述しておく必要があります。記述例:LEFT OUTER JOIN M_Product ON (JP_ReferenceTest.M_Product_ID = M_Product.M_Product_ID)
- SQL WHERE句…シンプルインプットウィンドウに表示するレコードを予め制限したい場合、その条件を記述します。WHERE句以下の条件を記述して下さい。記述例:M_Product.Value IN ('I0001','I0002','I0003')
- SQL ORDER BY句…シンプルインプットウィンドウに表示するレコードの順番を記述する事ができます。タブフィールドの機能を使用する場合は、特にレコードのソート順には気をつけて下さい。記述例:M_Product.Value
- 削除可能…削除可能フラグをONにすると、ボタン領域に削除ボタンが表示され、三択したデータを一括で削除する事ができます。
- 合計(Σ)…ONにした場合、シンプルインプットウィンドウの数値系のフィールドのラベルに合計値を表示します。合計値は"保存"する時に更新されます。
◆検索フィールドタブ
検索フィールドタブでは、シンプル インプット ウィンドウの検索条件&初期値入力領域の設定を行います。
- タブ(必須)…検索条件&初期値入力領域に表示したいフィールドがあるタブを設定します。
- フィールド(必須)…検索条件&初期値入力領域に表示したいフィールドを設定します。タブフィールドに設定したタブに属するフィールドを選択する事ができます。
- 必須…ONにすると、検索条件&初期値入力領域に表示するフィールドの値をデータ検索時に必須にする事ができます。
- デフォルトロジック…検索条件&初期値入力領域に表示するフィールドの値をデフォルト値を設定する事ができます。
- Xポジションとカラムスパン…Xポジションとカラムスパンの設定で、検索条件&初期値入力領域に表示するフィールドの表示を制御する事ができます。
- クイック入力ウィンドウ…クイック入力ウィンドウを割り当てる事ができます。
フォームの設定
シンプル インプット ウィンドウはフォームを使用して画面を作成します。シンプル インプット
ウィンドウの設定が完了したら、フォームの設定を行い、メニューツリーに割り当てて下さい。
- クラス名(Class Name)…"JP_SimpleInputWindow_ID="+"シンプル インプット ウィンドウ設定のID" を設定します。
親子関係が強い子レコードのデータ入力について
受注伝票のヘッダーデータと明細データのように、親子関係が強いケースでも、子レコードのデータ入力にシンプルインプットウィンドウを使用する事ができます。
親子関係が強い場合、子レコードでは親レコードの値を引き継いでデータ入力します(例:組織情報)。シンプルインプットウィンドウは、次の条件を満たす時に、親レコードの情報をコンテキスト情報として保持し、子レコードに引き継ぐ事ができます。
- シンプルインプットウィンドウ設定で、タブフィールドに設定したタブのリンクカラムが設定されている。
- 親レコードと結びつけるリンクカラムのフィールドが検索条件&初期値入力領域のフィールドにあること。
- そのリンクカラムの名称の最後3文字”_ID”を取り除いたテーブルが存在している。
【補足説明】親レコードの情報と検索条件&初期値入力領域のフィールドの情報が重複する場合
親レコードが保持している情報と、検索条件&初期値入力領域のフィールドの情報が重複する場合、シンプルインプットウィンドウは、検索条件& 初期値入力領域のフィールドの情報を優先します。そのため、親レコードの情報を子レコードに引き継ぎたいフィールド(Column)を、検索条件 & 初期値入力領域のフィールドにも使用する場合は、注意して下さい。
※この機能を活用すると、【JPIERE-0112】棚卸伝票(シンプルインプットウィンドウ)のように伝票の入力も可能になります。
プロセスについて
◆親レコードの情報を取得する
親子関係が強い子レコードのデータ入力にシンプルインプットウィンドウを使用する際に、親レコードの情報を取得してプロセスで処理する事ができます。
プロセスのパラメーター設定でデフォルトロジックに@XXXX@を使用して取得します。
- @PARENT_RECORD_ID@…親レコードのIDを取得する事ができます。
- @PARENT_TABLE_NAME@…親テーブルの名称を取得する事ができます。
※参照:SimpleInputWindowDocActionProcess.java
◆選択したレコードのIDの取得について
- プロセスアイコンからのプロセスの実行…シンプル インプット ウィンドウのボタン領域のプロセスアイコンからプロセスを実行すると、選択されているレコードの値を取得し、何らかの処理を実行する事ができます。選択されているレコードの値はT_Selectionテーブルに、プロセスIDと一緒に保存されています。※参照:SimpleInputWindowSampleProcess.java
- レコードのボタンからのプロセスの実行…編集中のレコードのボタンからプロセスを実行する事もできます。この場合、編集中の1レコードが対象になります。getRecord_ID()メソッドで編集中のレコードのIDを取得する事ができます。 ※参照:SimpleInputWindowSampleProcess2.java
コールアウトについて
シンプル インプット ウィンドウでは通常のコールアウトは使用できません。シンプルインプットウィンドウ専用のコールアウトを用意する必要があります。
- 参照:SimpleInputWindowSampleCallout.java
- 参照:SimpleInputWindowCalloutInventory.java
バーチャルカラム(SQLカラム)を使用する際の制限と対応策
シンプル インプット ウィンドウではバーチャルカラムも使用する事ができます。ただし、次の制限がありますので、コールアウトと一緒に活用して頂く事を推奨致します。
- シンプル・インプット・ウィンドウの仕様で、レコードを更新して保存する際に、保存後に画面のリフレッシュは行わないため、バーチャルカラムの値が更新されない。
- バーチャルカラムの仕様で、新規レコードを追加する場合には、保存するまでバーチャルカラムの値は表示されない。
コールアウトでバーチャルカラムに表示されている値を更新させる事ができますので、シンプル・インプット・ウィンドウでバーチャルカラムを使用したい場合は、コールアウトと一緒に活用して頂く事が、上記制限の対応策になります。その際に、コールアウトで更新する値は、バーチャルカラムで本来表示される値と同じ値になるようにして下さい。
コールアウトの実装は下記のサンプルコールアウトを参照して下さい。
参照:SimpleInputWindowSampleCallout.java
その他
◆タブフィールドへのバーチャルカラム(SQLカラム)フィールドの設定
タブフィールドにはバーチャルカラム(SQLカラム)のフィールドも設定する事ができます。しかし、検索フィールドにはバーチャルカラムのフィールドは設定する事はできません。検索フィールドは”SQL JOIN句”で結合したテーブルのカラムを設定できますので、バーチャルカラムを設定する必要性はありません。
バーチャルカラムでタブフィールドを有効にするためには、そのバーチャルカラムをシンプルインプットウィンドウに表示するようにして下さい。バーチャルカラムをタブフィールドとして使用する場合、そのバーチャルカラムが画面に表示されていないとタブフィールドの機能は有効になりません。
◆読取専用シンプルインプットウィンドウ
シンプルインプットウィンドウのもととなっているタブを読取専用にするとシンプルインプットウィンドウも読取専用になり、更新できなくなります。
◆新規レコードの登録をしない場合のシンプルインプットウィンドウ
シンプルインプットウィンドウのもととなっているタブのレコード追加(IsInsertRecord)フラグをOFFにすると、シンプルインプットウィンドウでも新規レコードを追加できなくなります。
◆数値系のフィールドで合計を表示したくないフィールドがある場合の対応
シンプルインプットウィンドウの設定で、”合計(IsSummarized)”フラグをONにすると、すべての数値系フィールドでフィールドのラベルに合計値が表示されるようになります。しかし、合計を表示したくない数値系のフィールドも混在する場合があると思います。その場合、合計を表示したくない数値系のフィールドの設定で、”Swing-UIの配置”のフィールドグループにある”表示長さ(DisplayLength)”の値を”0”にして下さい。
◆最後のレコードの特定のフィールドでEnterキーを押し新規レコードを追加させたい場合
最後のレコードの右端のフィールドでEnterキーを押すと、新規レコードを追加できますが、同じように、特定のフィールドでEnterキーを押すを新規レコードを追加できます。フィールドの設定で”Swing-UIの配置”のフィールドグループにある”同一行(IsSameLine)”の値をOFFにして下さい。
最後のレコードでEnterキーを押し新規レコードを追加させる事ができるカラムには、新規レコード追加のアイコンが表示されます。
◆数値系のフィールドの合計値を入力中に更新したい場合
シンプルインプットウィンドウの標準機能では、数値系のフィールドの合計値は保存する際に更新されます。しかし、入力中にも合計値を更新したい場合もあると思います。その場合は、シンプルインプットウィンドウのコールアウトで、"dataBinder.getSimpleInputWindow().updateColumn();"と記述して下さい。
この記述で、コールアウトが呼び出されるたびに(コールアウトが設定されている数値系フィールドの値が更新される都度)、数値系フィールドのラベルの合計値が更新されます。合計値を更新する処理は、サーバー側でタブのデータをすべて合計するループ処理が行われますので、パフォーマンスとトレードオフの関係にあります。使用する場合は、データ件数を考慮して下さい。
カスタマイズ履歴
2024年11月14日 : プロセス実行後にタブが閉じるように修正
プロセス実行後にタグが閉じることができなくなっていた不具合を修正しました。
2021年1月17日 : SQLのメンテナンス
IDEMPIERE-4254において、MRole#getOrgWhere()の戻り値が変更になったためSQLのメンテナンスを実施しました。
2021年1月1日:ボタンにラベルを追加
これまでシンプルインプットウィンドウにあるボタンはアイコンだけでしたが、ラベルをつけました。