コールアウトのプラグイン開発

提供: iDempiere ja
移動先:案内検索

このチュートリアルは Jan Thielemann from evenos GmbH (www.evenos.de)によって提供されています。もし、質問及び改善の提案などありましたら、下記までご連絡下さい。


※翻訳は萩原秀明 (利用者:Hideaki_Hagiwara)が行いました。


このチュートリアルの目的

このチュートリアルの目的は、コールアウトのプラグイン開発の方法を示すことです。コールアウトのプラグイン開発の方法は次の3つがあります。

  • 拡張ポイントを使用したコールアウトのプラグイン開発 (Create a Callout using the IColumnCallout interface and extension points)
  • CalloutEngineを継承したコールアウトのプラグイン開発 (Create a Callout using plain java and the Application Dictionary)
  • CalloutFactoryを使用したコールアウトのプラグイン開発 (Create a Callout using the IColumnCalloutFactory and a component definition)


前提知識

コールアウトのプラグインを開発する前に次のページを参照して下さい。


プラグインの開発

拡張ポイントを使用したコールアウトのプラグイン開発

拡張ポイントを使用したコールアウトのプラグイン開発は簡単ですが少し時代遅れです。iDempiereの将来のバージョンでは使えなくなるかもしれません。そのため、"CalloutFactoryを使用したコールアウトのプラグイン開発"を推奨します。"前提知識"を読んで、プラグインを開発する準備をして下さい。準備ができたら新しいパッケージを作成し、IColumnCalloutクラスをインターフェース しstart() メソッドを実装します。

Plugincallout1.png

マニフェストエディターでMANIFEST.MFファイルを開き、拡張タブへ移動します。そして org.adempiere.base.IColumnCallout extensionを追加します。追加後右クリックして、 新規 -> "callout"でcalloutの要素を追加します.追加したcallout要素のクラスの項目に作成したパッケージ.クラスを入力します。tableNameにはコールアウトを設定するテーブルの名称を設定します。ここでは"M_Product"とします。そして、columnNameにはコールアウトを設定するカラム名を設定します。ここでは "Help"とします。priorityは1としておきます。

Plugincallout2.png

"org.adempiere.base.IColumnCallout"に戻ります。

Plugincallout3.png

基本的にこれだけです。iDempiereを起動し"Product window"にアクセスしてみて下さい。"help"フィールドを変更するかEnterを押すと、コールアウトが呼び出されるはずです。

Plugincallout4.png

作成したコールアウトを別のテーブルのカラムにも設定する事ができます。そうしたい場合はマニフェスト・エディターで"拡張"を追加し、別のテーブルとカラムの設定をするだけです。

コールアウトのstart()メソッドで、mTab.getTableName() と mField.getColumnName()を使用して、どのコールアウトメソッドを使用するのか切り替える事もできます。次のリンク先が良い参考になるでしょう。 CalloutInfoWindow.java


CalloutEngineを継承したコールアウトのプラグイン開発

この開発方法も少し時代遅れです。ここで紹介している開発方法の中では一番おススメできませんが、完全性のため紹介しておきます。 (このリンク先Compiere/ADempiere に書かれていいるのはOSGiを使用しない古いコールアウトの開発方法です。)

はじめに、CalloutEngine を継承したコールアウトのクラスを作成して下さい。そして次のような構造の新しいメソッドを作成します。:

  • public String myMethodName(Properties ctx, int WindowNo, GridTab mTab, GridField mField, Object value)

そして、試しにログを取り、nullを返す処理を記述してみましょう。null以外を返すとコールアウトエンジンはエラーとしてハンドリングします。

Plugincallout5.png

MANIFEST.MFをEclipseのマニフェストエディターで開き、Runtimeタブに切り替えて下さい。 そしてコールアウトのクラスがあるパッケージを追加して下さい。:

Plugincallout6.png

ここに1つ問題があります。"拡張"などを使用していないので、どのようにしてコールアウトエンジンは作成したクラスがどこにあるのか知ることができるのでしょうか? そのためには、MANIFEST.MFタブに切り替えて、 次の行を加えて下さい。

このコールアウトの開発方法がベストプラクティスではない事に注意して下さい。

マニフェストファイルを保存して、iDempiereを起動し、Systemクライアントにログインして下さい。そしてアプリケーション辞書のテーブルとカラムの設定で、コールアウトを設定したいカラムまで移動して下さい。ここでは例として、M_ProductテーブルのDescriptionカラムにコールアウトを設定します。

Plugincallout8.png

iDempiereを再起動し、プラグインをアクティブな状態にして下さい。コールアウトの動作が確認できるはずです。

Plugincallout7.png

CalloutFactoryを使用したコールアウトのプラグイン開発

この開発手法はコールアウトのプラグイン開発として好ましい開発方法です。この開発方法では2つのクラスを作成します。ひとつは、Factoryクラスでもうひとつは、実際のcalloutクラスです。私たちはこの2つを"CalloutFactory"と"CalloutFromFactory"とよんでいます。 IColumnCalloutcalloutからコードをコピーしてCalloutFromFactoryと呼んでいるクラスにはりつけます。そしてIColumnCallout インターフェースのstart()メソッドを実装します。

Plugincallout9.png

興味深い部分としては、CalloutFactoryクラスをIColumnCalloutFactoryをインターフェースして実装するのに、getColumnCallouts() メソッドが必要になる事です。 ここで、コールアウトをよびだすカラム名(columnname)とテーブル名(tablename)をチェックする事ができます。ここでは、MProduct.Table_Name と MProduct.COLUMNNAME_DocumentNoteでコールアウトを使用する事にします。

Plugincallout10.png

次のステップは、コンポーネントの定義をプラグインに加える事です。 Click on New>New>Others and select Component Definition from the list:

Plugincallout11.png

OSGI-INFというフォルダをプラグインプロジェクトに作成する必要があります。これはOSGiのお約束でコンポーネント定義をおく場所になります。

すべての定義はXML形式で行われます。

"next"ボタンを押し、"Name"を入力します。Nameはユニークになるようにして下さい。そして"browse"ボタンを押して、CalloutFactoryクラスを "class:"に入力します。

Plugincallout12.png

コンポーネントのXML形式ファイルを開き(この例ではcalloutfactory.xml) "service"タブに移動します。そして、Provides Servicesに org.adempiere.base.IColumnCalloutFactoryを加えます。

Plugincallout13.png

マニフェスト・エディターでMANIFEST.MF開き、"Service-Component: ..."と書かれた行を確認します。そして、コンポーネント定義したXMLファイルへの正しいパスを記入して下さい。

Plugincallout14.png

iDempiereを起動し、コールアウトの動作を確認して下さい。

Plugincallout15.png

Bundleのjarファイルをエクスポートする前に、build.properties ファイルを開いて、"Binary Build" のリストの中にあるコンポーネント定義のXMLファイルのフラグがONになっているかどうか確認して下さい.

Screenshot-OSGIINF-buildproperties.png

Cookieは私達のサービスを提供するのに役立ちます。このサービスを使用することにより、お客様はCookieの使用に同意するものとします。