Adempiereの「プロセス」を作成する

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

モデルクラスの生成

サンプルウィンドウで表示しているデータをプロセスから操作するための、モデルクラスを作成する方法を説明します。

第4回記事の「Script Process」では「説明」の欄にプロセスで文字を入れる時にSQLを直接実行していましたがデータベースのテーブルに関連付けられたモデルクラス(エンティティクラス)を作ってデータの修正や保存をすることもできます。

モデルクラスを生成する方法は、以下のページに書かれています(英語)。
 →参照:NewWindow - ADempiere ERP Wiki

まず、パッケージエクスプローラーの
base\src\org\adempiere\util\GenerateModel.java
を選び、GenerateModel.javaを表示してください。このクラスを使うことにより、モデルクラスを生成することができます。

72行目からmainクラスがあり、Eclipseの実行ダイアログから引数を指定して実行することができます。GenerateModel.javaのエディタをアクティブにした状態で、Eclipseのメニューバーにある「Run」から実行設定のダイアログウィンドウを開いてください。Runダイアログの左上にある新規作成アイコンをクリックするとGenerateModelの実行設定が作成されます。

図6:実行設定のダイアログウィンドウ(クリックで拡大)

次にRunダイアログのArgumentsタブで「Program arguments」を入力します。
テキストエリアに、

C:\eclipse_projects\adempiere361\extend\src\compiere\model

のように、Adempiereのソースコードをチェックアウトしたフォルダにある、extend\src\compiere\modelまでのパスを入力してください。

「Run」ダイアログの右下にある「Run」ボタンを押すと処理が実行されます。

図7:「Run」ボタンを押して処理を実行する(クリックで拡大)

処理が完了した後、パッケージエクスプローラーの「extend/src > compiere.model」 を選択して再読み込み(右クリック⇒RefreshまたはF5キー)すると、生成されたI_Sample_Table1.javaとX_Sample_Table1.javaが表示されます。

GenerateModelは4つの引数がありますが、今回は最初の1つだけを指定して残りの3つはデフォルト値を使います。

GenerateModelの引数は、以下の通りです

  1. 出力先フォルダ
  2. パッケージ名
  3. エンティティタイプ
  4. 対象テーブルを絞り込むSQLの条件

例えば「Program arguments」に

C:\eclipse_projects\adempiere361\extend\src\compiere\model
compiere.model
'D'
'C_Order','C_OrderLine'

のような引数を設定するとC_OrderとC_OrderLineのモデルクラスが生成されます(実際のC_OrderとC_OrderLineのクラスは、base\src\org\compiere\model にあります)。

先ほどの、NewWindow - ADempiere ERP Wiki にも書かれていますが、生成されたX_で始まるクラスは修正しないでください。通常は、生成されたX_で始まるクラス継承したクラスを作成して使います。

モデルクラスを継承したクラスの生成

パッケージエクスプローラーの「extend/src > compiere.model」 で右クリックして、コンテキストメニューから「New > Class」を選び、新規のjavaファイルを作成してください。名前は、"MSampleTable1"にしてください。

図8:新規のjavaファイルを作成

生成されたMSampleTable1.javaに以下のコードを貼り付けてください。

package compiere.model;
import java.util.Properties;
public class MSampleTable1 extends X_Sample_Table1 {
 /**
  * 
  */
  private static final long serialVersionUID = 2558334849443879404L;
  public MSampleTable1 (Properties ctx, int M_Sample_Table_ID, String trxName)
  {
    super (ctx, M_Sample_Table_ID, trxName);
  }
  
  public void setDescription (String Description)
  {
    Description = Description + "(MSampleTable1クラスで文字を追加)";
    super.setDescription(Description);
  }
  }

これでプロセスが使うモデルクラスの作成は完了です。

プロセスの修正

作成したモデルクラスをプロセス内で使ってみます。SampleProcess2.javaの84行目に以下のコードを追加してください。

  MSampleTable1 sampleTable = new MSampleTable1(getCtx(), getRecord_ID(), get_TrxName());
  String msg = "このメッセージはProcess2により入力されました。";
  sampleTable.setDescription(msg);
  sampleTable.save();

コードを追加すると、"MSampleTable1"の部分でエラーになり、赤い波線が表示されるので、ダブルクリックで"MSampleTable1"を選択 ⇒ 右クリック ⇒ Source ⇒ Add Import でimport文を追加してください。

図9:エラーが発生したらAdd Import でimport文を追加する(クリックで拡大)

SampleProcess2.javaを保存したら、Adempiereを一度終了させて、Eclipseから起動してください。これで準備は完了です。

Adempiereのメニューから「Sample Window1」を表示させて、「SampleProcess2」ボタンを押してください。「Description」の項目に自動で文字が設定されます。

図10:「SampleProcess2」ボタンを押すと「Description」の項目に自動で文字が設定される(クリックで拡大)

SampleProcess2.javaのdoItメソッドなどにブレークポイントを設定すれば、プロセスのデバッグができます。

以上で第8回記事は終了です。第5回から第8回までの記事では、Adempiereのソースコードの取得、デバッグ方法、プロセス作成方法などについて解説しましたがいかがでしたでしょうか?今回掲載した内容を見れば、Adempiereの動作の仕組みが理解できると思います。

Adempiereはオープンソースなのでソースコードを自由に修正することができます。興味を持った方はぜひAdempiereを使ってみてください。

adempiere.jp

連載バックナンバー

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

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

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

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