Eclipseを使ってデータ登録画面を確認する
次に第4回記事で作成した「Sample Window1」をクリックしてください。
VTreePanel.javaのブレークポイントの後に
client\src\org\compiere\apps\AMenuStartItem.java
の147行目(runメソッド)で停止します。
この状態で「Variables」ウインドウを確認すると「sql」という変数に、
SELECT * FROM AD_Menu WHERE AD_Menu_ID=?
という文字列が入っています。?の部分には「Variables」ウインドウの this > m_ID の値が設定されてSQLが実行されます。
図8:「Variables」ウインドウ |
pgAdmin3で、
set search_path to "$user",adempiere,public;
SELECT * FROM AD_Menu WHERE AD_Menu_ID=1000000
というSQLを実行すると、AD_Window_IDカラムの値が1000000であることが確認できます(1000000という値は環境によって変わる可能性があります)。
AD_Window_IDは、ad_windowテーブルの主キーです。
このAD_Window_IDが1000000という値を使って、
SELECT * FROM ad_window WHERE ad_window_id = 1000000
を実行すると、ad_windowテーブルのnameカラムに「Sample Window1」という値が入っていることが確認できます。
Eclipseの「Resume」アイコン(またはキーボードのF8)を押すと処理が再開されて
client\src\org\compiere\apps\APanel.java
646行目(initPanelメソッド)で停止します。
APanelクラスはCPanelクラスを継承していて、CPanelクラスはJPanelクラスを継承しています。JPanelクラスはJavaのSwingコンポーネントです。
Eclipseのデバッグモードでは「Debug」ウインドウで、メソッドの呼び出し順を確認できます。
APanel.javaの646行目で停止している時は、AMenuStartItem.javaの147行目、AMenuStartItem.javaの249行目、AWindow.javaの102行目の順でメソッドが呼び出されて、APanel.javaの646行目に来ていることが分かります。
図9:「Debug」ウインドウでメソッドの呼び出し順を確認 |
「Resume」アイコンを押していくと、
- base\src\org\compiere\model\GridWindowVO.java
67行目のcreateメソッド(ウインドウの情報を取得するSQLの発行) - base\src\org\compiere\model\GridWindowVO.java
201行目のcreateTabsメソッド(タブの情報を取得するSQLの発行) - base\src\org\compiere\model\GridTabVO.java
53行目のcreateメソッド(タブの情報の設定) - base\src\org\compiere\model\GridFieldVO.java
78行目のcreateメソッド(フィールドの情報の設定)
で停止します。
その後、GridTab.java 354行目のloadFieldsメソッドでm_vo.getFields()により、m_vo(GridTabVO型のメンバ変数)のFieldsというメンバ変数にフィールド情報が設定されます。
取得したウインドウ、タブ、フィールドの情報は、APanel.javaの789行目のGridControllerによって描画されます。
ツールバーの「表形式」アイコンを押すとレコード一覧とレコード詳細を切り替えられるので、client\src\org\compiere\grid\GridController.java944行目のdynamicDisplayメソッドにブレークポイントを設定して確認してください。
図10:「表形式」アイコンをでレコード一覧とレコード詳細を切り替えられる |
また、修正したデータを保存する流れについては、
- client\src\org\compiere\apps\APanel.java の1688行目(保存アイコンが押された時の処理)
- base\src\org\compiere\model\GridTable.java の2058行目(GridTableオブジェクトのm_fieldsから、POオブジェクトのm_newValuesへ代入する処理)
- base\src\org\compiere\model\PO.java の2340行目(UPDATE文を生成する処理)
などに書かれています。
「請求を生成」プロセスのソースコード
最後に、プロセスがどのソースコード(ファイル)を実行しているのかを確認する手順を説明します。
今回は、メニューツリーの 販売管理 > 販売請求 > 請求を生成 のプロセスが、どのソースコードに対応しているのかを確認します。まず、翻訳テーブルを確認する手間を省くために 英語でログインして「請求を生成」の英語名を確認します。→ Quote-to-Invoice > Sales Invoices > Generate Invoices
次にSystem Administratorの役割(ロール)でログインして、 アプリケーション構成 > レポートとプロセス を選択して「レポートとプロセス」ウインドウを開いてください。
「レポート&処理」タブで、名前が「Generate Invoices」のレコードを検索して、「クラス名」の値を確認するとorg.compiere.process.InvoiceGenerate になっています。これが「請求を生成」プロセスの処理が書かれたクラスです。
ファイル自体は、base\src\org\compiere\process\InvoiceGenerate.java にあります。
InvoiceGenerate.javaの126行目(doItメソッド)などにブレークポイントを設定して、Eclipseのデバッグモードで起動したAdempiereでメニューから「請求を生成」をクリックするとブレークポイントで処理が止まります。
これで、「Variables」ウインドウで変数の中身を確認したり、ステップ実行したりすることができるようになりました。
以上で第6回は終了です。