IModelFactoryのプラグイン開発
このチュートリアルは Jan Thielemann from evenos GmbH (www.evenos.de)によって提供されています。もし、質問及び改善の提案などありましたら、下記までご連絡下さい。
※翻訳は萩原秀明 (利用者:Hideaki_Hagiwara)が行いました。
このチュートリアルの目的
このチュートリアルの目的は、IModelFactoryサービスのプラグインの開発方法を示すことにあります。なぜモデル・ファクトリー・サービス(model factory service)を使用する必要があるのでしょうか。それは、追加したテーブルに対応するモデルクラスを用意する事ができるからです。iDempiereはIModelFactoryサービスを通して提供されるモデルクラスを使用する事ができ、beforeSave()メソッドを実行する事ができます。 Also if you want to use the Query class, it is necessary to provide your own models. Otherwise, a Query will return a "GenericPO" instead of your model class.
前提知識
このチュートリアルを始める前に次のページを参照して下さい。:
プラグインの開発
プラグインプロジェクトを作成した後で、依存関係を設定します。EclipseのメニューバーのFile>New>Othersをたどって、プラグイン開発(Plug-in Development)のセクションから"Component Definition" を選択して下さい。
"Next"へボタンを押して、作成したプラグインプロジェクトを選択し、"file name"と"general name"を入力して下さい。チュートリアルでは例として、"filename"に"defaultmodelfactory.xml"を、そして"general name"に "my.domain.model.factory"を使用します。もちろん他の名前でも大丈夫です。ここでは、まだクラス名は設定する必要がありません(まだクラスは実装していませんので・・・)。最後に"finish"ボタンをクリックして下さい。
次に下記の2つもクラスを作成して行きます:
- モデルクラス
- モデルクラスのファクトリークラス(ModelFactory) ※IModelFactoryをインターフェースして実装します。
モデルクラスとそのファクトリークラスは、別々のクラスファイルにして実装する事に注意して下さい。モデルクラスの中にファクトリクラスも実装してしまうと、うまく動かないでしょう。良い点としては、モデルクラスのファクトリクラスでは追加するモデルクラスが複数あっても1つで良い事です。
このチュートリアルでは、MOrderを継承したサブクラス(MOrder_New)を使用していきます。MOrder_Newにはデフォルトのコンストラクタを実装しておきます。
次にIModelFactoryをインターフェースして"MyModelFactory"とよぶモデルクラスのファクトリークラスを作成します。getClass()メソッドで、作成したモデルクラスと対応するテーブル名をチェックし、あれば作成したモデルクラスを返すようにします。 2つのgetPO()メソッドは、作成したモデルクラスのインスタンスを作成するコンストラクタとして使用されます。
mymodelfactory.xmlを開いて "Browse"ボタンをクリックして"MyModelFactory"クラスを選択します。そして、"service.ranking"と呼ばれる整数の値(0より大きい整数)も加えます。
"Services"タブで、"Proviced Services" セクションにIModelFactoryを加えます。
基本的に行う必要がある作業はここまでです。実際にiDempiereを起動して、beforeSave()メソッドの振る舞いを確認して下さい。
作成したプラグインがActiveになっている事確認して下さい。
iDempiereを起動して、プラグインがActiveになっている事を確認します。
Sales Orderを作成し、入力必須項目を埋めたら、保存ボタンをおして下さい。beforeSave()メソッドの振る舞いを確認できるはずです。
トラブルシューティング
- modelfactory.xmlの"Name"がユニークになっているのを確認して下さい。例えば、"my.domainname.pluginname.model.factory"などは良いネーミングです。 そして、対応する正しいクラスを選択して下さい。
- 高いサービスランキングのモデルクラスのファクトリークラスが存在しない事を確認して下さい。
- モデルクラスとモデルクラスのファクトリークラスは分けて下さい。
- iDempiereにログインする前に、作成したプラグインがActiveになっている事を確認して下さい。
- MANIFEST.MF に "Service-Component: modelfactory.xml” (例 "Service-Component: mymodelfactory.xml")が追加されている事を確認して下さい。