Eclipseを使ってデータ登録画面を確認する

2011年6月17日(金)
久保田 大輔

次に第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回は終了です。

adempiere.jp

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています