BEA ホーム | 製品 | デベロッパ・センタ | support | askBEA
 ドキュメントのダウンロード   サイト マップ   用語集 
検索

BPM プラグイン プログラミング ガイド

 前 次 目次 索引 PDFで表示  

プラグイン コンポーネントの定義

この章では、プラグイン コンポーネントを定義する方法について説明します。この章の内容は以下のとおりです。

 


概要

デプロイされたプラグインを BPM が検出する方法に説明されているように、プラグインにより BPM で以下のことが行えます。

この機能はプラグイン コンポーネントにより提供されます。次の表で、指定された機能をサポートするために必要なプラグイン コンポーネントの要件を示します。

表4-1 プラグイン コンポーネントの要件

BPM が行えるようにする動作

必要な作業

XML フォーマットでプラグイン データを読み込み(解析し)、保存する。

プラグイン データ インタフェースを実装する。

たとえば、プラグイン サンプルの SAMPLES_HOME/integration/samples/bpm_api/plugin/src/com/bea/wlpi/tour/po/plugin ディレクトリの EventNodeData.java を参照。

設計クライアント内でプラグイン GUI コンポーネントを表示する。

プラグイン パネル クラスを定義する。

たとえば、プラグイン サンプルの SAMPLES_HOME/integration/samples/bpm_api/plugin/src/com/bea/wlpi/tour/po/plugin ディレクトリの EventNodePanel.java を参照。

プラグインを実行する。

実行時コンポーネント クラスを定義する。

たとえば、プラグイン サンプルの SAMPLES_HOME/integration/samples/bpm_api/plugin/src/com/bea/wlpi/tour/po/plugin ディレクトリの EventNode.java を参照。

プラグインが着信データを読み込む(解析する)ことができるようにするには、プラグイン データ インタフェースと実行時コンポーネント クラスの両方が、親インタフェースである com.bea.wlpi.common.plugin.PluginObjectload() (解析) メソッドを実装する必要があります。

最後に、コンポーネント データを記述するためのプラグイン コンポーネント値オブジェクトを定義する必要があります。

次の節では、PluginObject インタフェースの説明、前述の表にリストした機能をサポートするようにプラグイン コンポーネントを定義する方法、およびプラグイン コンポーネント値オブジェクトの定義について示します。

注意: プラグイン コンポーネントの各タイプを定義するために行う必要のある手順の概略については、A-1 ページの「プラグイン コンポーネント定義のロードマップ」を参照してください。

 


PluginObject インタフェース

com.bea.wlpi.common.plugin.PluginObject インタフェースは、プラグインがプラグイン データを読み込む(解析する)ことができるようにします。

このインタフェースは、次の要素により拡張しておく必要があります。

PluginObject インタフェースは、次の表に示す 1 つのメソッド load() を定義します。

表4-2 PluginObject インタフェース メソッド

メソッド

説明

public void load(org.xml.sax.XMLReader parser)

XML ドキュメントからデータをロードする準備を行うようにプラグインに通知する。

メソッド パラメータの定義は次のとおり。

parser −
有効な SAX パーサを示す
org.xml.sax.XMLReader オブジェクト。データ解析時に複数のコンテンツ ハンドラを使用するには(深いネスト要素を解析するときに便利)、プラグインはこの値を保存し、指定された parser オブジェクトで setContentHandler() メソッドを呼び出すことができる。


 

Plug-in Manager は、XML ドキュメントの中でプラグイン セクション(たとえば <plugin-data> 要素)が見つかると、load() メソッドを呼び出します。この状況は、たとえば、Plug-in Manager が WebLogic Integration Studio の中でテンプレート、テンプレート定義、またはプラグイン コンフィグレーション XML ドキュメントを開くときに生じます。

注意: BPM DTD の詳細については、『BPM クライアント アプリケーション プログラミング ガイド』の「DTD フォーマット」を参照してください。

また、startElement() メソッドや endElement() メソッドなど、必要なコンテンツ ハンドラ メソッドも実装する必要があります。Plug-in Manager は、プラグインをパーサ コンテンツ ハンドラとして設定し、<plugin-data> 要素に達したときに、コンテンツ ハンドラに対する最初と最後の呼び出しとして、startElement() メソッドと endElement() メソッドを使用します。コンテンツ ハンドラは、介入する SAX 通知を使用して、プラグイン固有のデータを格納します。コンテンツ ハンドラ メソッドの詳細については、org.xml.sax Javadoc を参照してください。

プラグイン サンプルには、プラグイン コンポーネントごとに、PluginObject インタフェースを拡張し、必要なメソッドを定義する独立したファイルが用意されています。このファイルを個別に定義する必要はありません。ただし、個別に定義した場合、サンプルの中でそのファイルを共有する複数のクラスに対して 1 つの定義が提供される点が便利です。

次の節では、プラグインの完了ノードと開始ノードのために PluginObject インタフェースを実装する方法をコード例で示します。

これらの例だけでなく、SAMPLES_HOME/integration/samples/bpm_api/plugin/src/com/bea/wlpi/tour/po/plugin ディレクトリにある次のファイルも参照してください。

ファイル名

説明されている PluginObject 実装

EventObject.java

プラグイン イベント

CheckInventoryActionObject.java

プラグイン アクション

SendConfirmActionObject.java

プラグイン アクション

プラグイン サンプルの詳細については、BPM プラグイン サンプルを参照してください。

完了ノードの例

次のコード リストで、完了ノードのために PluginObject インタフェースを実装するクラスを定義する方法を示します。このサンプル コードへの入力は、分岐ダイアログ ボックスへのユーザ応答(yes または no)です。重要なコード行は、太字で示します。

注意: このクラスは、プラグイン サンプルには含まれていません。

コード リスト 4-1 完了ノードのための PluginObject インタフェースの実装

package com.bea.wlpi.test.plugin;

import java.io.IOException;
import com.bea.wlpi.common.plugin.PluginObject;
import org.xml.sax.*;

public class DoneObject implements PluginObject
{

protected String yesOrNo = null;
protected static String YESORNO_TAG = "yesorno";
protected transient String lastValue;

public DoneObject()
{
}

public DoneObject(String yesOrNo)
{
this.yesOrNo = yesOrNo;
}

public void load(XMLReader parser)
{
}

void setYesOrNo(String decision)
{
yesOrNo = decision;
}
String getYesOrNo()
{
return yesOrNo;
}

public void setDocumentLocator(Locator locator)
{
}

public void startDocument()
throws SAXException
{
}

public void endDocument()
throws SAXException
{
}

public void startPrefixMapping(String prefix, String uri)
throws SAXException
{
}

public void endPrefixMapping(String prefix)
throws SAXException
{
}

public void startElement(String namespaceURI, String localName, String qName, Attributes atts)
throws SAXException
{
lastValue = null;
}

public void endElement(String namespaceURI, String localName, String name)
throws SAXException
{
if(name.equals(YESORNO_TAG))
yesOrNo = lastValue;
}

public void characters(char[] ch, int start, int length)
throws SAXException
{
String value = new String(ch, start, length);

if(lastValue == null)
lastValue = value;
else
lastValue = lastValue + value;
}

public void ignorableWhitespace(char[] ch, int start, int length)
throws SAXException
{
}

public void processingInstruction(String target, String data)
throws SAXException
{
}

public void skippedEntity(String name)
throws SAXException
{
}
}

関連する次のコード例も参照してください。

開始ノードの例

プラグイン サンプルから抜粋した次のコード リストは、開始ノードのために PluginObject インタフェースを実装するクラスを定義する方法を示しています。load()startelement()endelement() の各メソッドが定義されます。この抜粋は、SAMPLES_HOME/integration/samples/bpm_api/plugin/src/com/bea/wlpi/tour/po/plugin ディレクトリの StartObject.java ファイルから取り出したものです。重要なコード行は、太字で示します。

コード リスト 4-2 開始ノードのための PluginObject インタフェースの実装

public class StartObject implements PluginObject {
.
.
.
public void load(XMLReader parser) {
}
.
.
.
public void startElement(String namespaceURI, String localName, String qName, Attributes atts)
throws SAXException {
lastValue = null;
}

public void endElement(String namespaceURI, String localName, String name)
throws SAXException {
if (name.equals(EVENTDESC_TAG))
eventDesc = lastValue;
}
.
.
.

関連する次のコード例も参照してください。

プラグイン サンプルの詳細については、BPM プラグイン サンプルを参照してください。

 


プラグイン データの読み込みと保存

XMLフォーマットでプラグイン データを読み込み(解析して)、保存するには、プラグイン データ インタフェースを実装する必要があります。

注意: KEY_DATAKEY_PANELKEY_RENDERER の各値を介して BPM プラグイン値オブジェクトにより定義されるプラグイン データ インタフェース クラスのそれぞれについて、クライアントでリモート クラス ロードをサポートするために、引数を必要としないパブリック コンストラクタを提供する必要があります。このパブリック コンストラクタを、このクラスにより参照されるプラグイン定義されたクラスに対して提供する必要はありません。BPM プラグイン値オブジェクトの詳細については、プラグイン開発の基礎を参照してください。

これは、WebLogic Integration リリース 2.1 Service Pack 1 に対する要件です。WebLogic Integration の以前のリリースを使用して生成されたクラスに対して引数のないコンストラクタを提供しない場合、そのクラスはインスタンス化されますが、クライアントとサーバ プラットフォームの間に互換性がない場合、例外が発生することがあります。

プラグインが着信データを読み込む(解析する)ことができるようにするには、プラグイン データ インタフェース クラスが、その親インタフェースである com.bea.wlpi.common.plugin.PluginObjectload() (解析) メソッドを実装する必要があります。

プラグインがそのデータを XML フォーマットで保存できるようにするには、定義されるプラグイン コンポーネントのタイプに基づいて、次の表に示すプラグイン データ インタフェースの 1 つを実装する必要があります。たとえば、Studio でテンプレート、テンプレート定義、プラグイン コンフィグレーション XML ドキュメントを保存する場合、データを XML フォーマットで保存する必要があります。

注意: 関数、メッセージ タイプ、変数タイプのプラグイン コンポーネントについては、データの読み込みと保存のためにプラグイン データ インタフェースを実装する必要はありません。

表4-3 プラグイン データ インタフェース

定義するプラグイン

実装の必要なインタフェース

プラグイン コンポーネント

プラグイン コンポーネントがそのデータを XML フォーマットで保存できるようにするための com.bea.wlpi.common.plugin.PluginData

アクションを定義するときには、このインタフェースを拡張する PluginActionData インタフェースを実装する必要がある。

アクション

プラグイン アクションがそのデータを XML フォーマットで保存できるようにするための com.bea.wlpi.common.plugin.PluginActionData。このクラスは、Studio の [アクション プラグイン] ダイアログ ボックスで使用され、サブアクションのための汎用サポートを提供する。

注意: PluginActionData は、この表の前の段で定義されている PluginData インタフェースを拡張します。


 

注意: BPM DTD とプラグイン固有の出力の例については、『BPM クライアント アプリケーション プログラミング ガイド』の「DTD フォーマット」を参照してください。

次の節では、各プラグイン データ インタフェースについて、さらに詳しく説明します。

PluginData インタフェースの実装

プラグイン コンポーネントがそのデータを XML フォーマットで保存できるようにするには、com.bea.wlpi.common.plugin.PluginData インタフェースを実装する必要があります。

注意: アクションを定義するときには、PluginActionData インタフェースの実装に説明されているように、PluginActionData インタフェースを実装する必要があります。

次の表で、PluginData インタフェースにより定義される、実装の必要なメソッドについて説明します。

注意: PluginData インタフェース メソッドの内容は、空の場合も、単純にログに対するメッセージを返す場合もありますが、必ず実装する必要があります。

表4-4 PluginData インタフェース メソッド

メソッド

説明

public java.lang.Object clone()

プラグイン データを複製する。

このメソッドは、このオブジェクトのグラフの深い(再帰的)コピーを示す java.lang.Object インスタンスを返す。

public java.lang.String getPrintableData()

プラグイン データの印刷可能な記述を取得する。

このメソッドは、通常、テンプレート定義を印刷するときに使用する。

このメソッドは、印刷可能なデータを示す java.lang.String オブジェクトを返す。この値は、プラグイン データ コンストラクタに指定されたロケールを使用してローカライズする必要がある。

public java.util.List getReferencedPublishables(java.util.Map publishables)

参照された公開可能なオブジェクトを取得する。

設計時クライアントがワークフロー定義を依存関係とともにパッケージ化できるようにする。結果のパッケージはインポートおよび実行が可能。公開可能オブジェクトには、テンプレート、テンプレート定義、ビジネス カレンダー、ビジネス オペレーション、イベント キー、リポジトリ項目などがある。これらのオブジェクトに対する参照の入ったプラグインは、このメソッドを呼び出すときにオブジェクトを宣言する必要がある。エクスポート パッケージを作成するユーザは、参照されたオブジェクトのどれをパッケージに含めるかを指定できる。

メソッド パラメータの定義は次のとおり。

publishables −公開可能なすべてのオブジェクトのマップを示す
java.util.Map オブジェクト。com.bea.wlpi.common.Publishable インタフェースに定義された定数をキーとする。マップ内の値は、対応するキーと一致するタイプの値オブジェクトの入った一様な java.util.List オブジェクトである。設計クライアントは実際のオブジェクトに対する参照のリストを求めているので、プラグインは、これらのリスト内の該当するオブジェクトを、返されるリストに追加する必要がある。

このメソッドは、com.bea.wlpi.common.Publishable オブジェクトのリストを返す。

公開可能オブジェクトの詳細については、『BPM クライアント アプリケーション プログラミング ガイド』の「ワークフロー オブジェクトの発行」を参照。

public void save(com.bea.wlpi.common.XMLWriter writer, int indent) throws java.io.IOException

XMLドキュメント内のデータを保存する。

Plug-in Manager は、XML ドキュメントでプラグイン セクション(たとえば、<plugin-data> 要素)を検出すると、このメソッドを呼び出す。この状況は、たとえば、テンプレート、テンプレート定義、プラグイン コンフィグレーション XML ドキュメントを Studio で保存するときに生じる。

メソッド パラメータの定義は次のとおり。


 

次の節では、PluginData インタフェースの実装方法をコード例で示します。

完了ノードの例

次のコード リストで、完了ノードのために PluginData インタフェースを実装するクラスを定義する方法を示します。重要なコード行は、太字で示します。

注意: このクラスは、プラグイン サンプルには含まれていません。

コード リスト 4-3 完了ノードのための PluginData インタフェースの実装

package com.bea.wlpi.test.plugin;

import com.bea.wlpi.common.XMLWriter;
import com.bea.wlpi.common.plugin.PluginData;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import org.xml.sax.*;


public class DoneNodeData extends DoneObject implements PluginData
{
public static int count = 0;
private int c;

public DoneNodeData()
{
c=count++;
}

public DoneNodeData(String yesOrNo)
{
super(yesOrNo);
c=count++;
}

public void save(XMLWriter writer, int indent) throws IOException
{
writer.saveElement(indent, YESORNO_TAG, yesOrNo);
}
}

関連する次のコード例も参照してください。

イベント ノードの例

プラグイン サンプルから抜粋した次のコード リストは、イベント ノードのために PluginData インタフェースを実装するクラスを定義する方法を示しています。この抜粋は、SAMPLES_HOME/integration/samples/bpm_api/plugin/src/com/bea/wlpi/tour/po/plugin ディレクトリの EventNodeData.java ファイルから取り出したものです。重要なコード行は、太字で示します。

コード リスト 4-4 イベント ノードのための PluginData インタフェースの実装

package com.bea.wlpi.tour.po.plugin;

import com.bea.wlpi.common.XMLWriter;
import com.bea.wlpi.common.plugin.PluginData;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.Map;
import org.xml.sax.*;

public class EventNodeData extends EventObject implements PluginData {
private SampleBundle bundle;

public EventNodeData() {
this(Locale.getDefault());
}

public EventNodeData(Locale lc) {
eventDesc = SamplePluginConstants.CONFIRM_EVENT;
bundle = new SampleBundle(lc);
}

public void save(XMLWriter writer, int indent) throws IOException {
writer.saveElement(indent, EVENTDESC_TAG, eventDesc);
}

public List getReferencedPublishables(Map publishables) {
return null;
}

public String getPrintableData() {
return bundle.getString("confirmOrderName");
}

public Object clone() {
return new EventNodeData(bundle.getLocale());
}
}

関連する次のコード例も参照してください。

プラグイン サンプルの詳細については、BPM プラグイン サンプルを参照してください。

開始ノードの例

プラグイン サンプルから抜粋した次のコード リストは、開始ノードのために PluginData インタフェースを実装するクラスを定義する方法を示しています。この抜粋は、SAMPLES_HOME/integration/samples/bpm_api/plugin/src/com/bea/wlpi/tour/po/plugin ディレクトリの StartNodeData.java ファイルから取り出したものです。重要なコード行は、太字で示します。

コード リスト 4-5 開始ノードのための PluginData インタフェースの実装

package com.bea.wlpi.tour.po.plugin;

import com.bea.wlpi.common.XMLWriter;
import com.bea.wlpi.common.plugin.PluginData;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.Map;
import org.xml.sax.*;

public class StartNodeData extends StartObject implements PluginData {
private SampleBundle bundle;

public StartNodeData() {
this(Locale.getDefault());
}

public StartNodeData(Locale lc) {
eventDesc = SamplePluginConstants.START_ORDER_EVENT;
bundle = new SampleBundle(lc);
}

public void save(XMLWriter writer, int indent) throws IOException {
writer.saveElement(indent, EVENTDESC_TAG, eventDesc);
}

public List getReferencedPublishables(Map publishables) {
return null;
}

public String getPrintableData() {
return bundle.getString("startOrderLabel");
}

public Object clone() {
return new StartNodeData(bundle.getLocale());
}
}

関連する次のコード例も参照してください。

プラグイン サンプルの詳細については、BPM プラグイン サンプルを参照してください。

ワークフロー テンプレート プロパティの例

次のコード リストで、ワークフロー テンプレート プロパティのために PluginData インタフェースを実装するクラスを定義する方法を示します。このコードは、分岐ダイアログ ボックスへのユーザ応答(yes または no)を読み込み、保存します。重要なコード行は、太字で示します。

注意: このクラスは、プラグイン サンプルには含まれていません。

コード リスト 4-6 ワークフロー テンプレート プロパティのための PluginData インタフェースの実装

package com.bea.wlpi.test.plugin;

import com.bea.wlpi.common.XMLWriter;
import com.bea.wlpi.common.plugin.PluginData;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import org.xml.sax.*;

public class TemplatePropertiesData extends DoneObject implements PluginData {

public TemplatePropertiesData() {
}

public TemplatePropertiesData(String yesOrNo){
super(yesOrNo);
}

public void save(XMLWriter writer, int indent) throws IOException {
writer.saveElement(indent, YESORNO_TAG, yesOrNo);
}

public List getReferencedPublishables(Map publishables) {
return null;
}

public String getPrintableData() {
return null;
}
}

関連する次のコード例も参照してください。

ワークフロー テンプレート定義プロパティの例

次のコード リストで、ワークフロー テンプレート定義プロパティのために PluginData インタフェースを実装するクラスを定義する方法を示します。このコードは、分岐ダイアログ ボックスへのユーザ応答(yes または no)を読み込み、保存します。重要なコード行は、太字で示します。

注意: このクラスは、プラグイン サンプルには含まれていません。

コード リスト 4-7 ワークフロー テンプレート定義プロパティのための PluginData インタフェースの実装

package com.bea.wlpi.test.plugin;

import com.bea.wlpi.common.XMLWriter;
import com.bea.wlpi.common.plugin.PluginData;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import org.xml.sax.*;


public class TemplateDefinitionPropertiesData extends DoneObject implements PluginData
{

public TemplateDefinitionPropertiesData()
{
}

public TemplateDefinitionPropertiesData(String yesOrNo)
{
super(yesOrNo);
}

public void save(XMLWriter writer, int indent) throws IOException
{
writer.saveElement(indent, YESORNO_TAG, yesOrNo);
}

public List getReferencedPublishables(Map publishables) {
return null;
}

public String getPrintableData() {
return null;
}

public Object clone() {
return new TemplateDefinitionPropertiesData(yesOrNo);
}
}

関連する次のコード例も参照してください。

PluginActionData インタフェースの実装

プラグイン アクションが XML フォーマットでデータを保存できるようにするには、com.bea.wlpi.common.plugin.PluginActionData を実装する必要があります。

注意: PluginActionData インタフェースは、PluginData インタフェースを拡張します。PluginData インタフェース メソッドの詳細については、PluginData インタフェース メソッドの表を参照してください。

次の表で、PluginActionData インタフェースにより定義される、実装の必要なメソッドについて説明します。

注意: PluginActionData インタフェース メソッドの内容は、空の場合も、単純にログに対するメッセージを返す場合もありますが、必ず実装する必要があります。

表4-5 PluginActionData インタフェース メソッド

メソッド

説明

public java.lang.String getLabel()

アクション リストに指定されたプラグイン アクションのフォーマット済みラベルを取得する。


 

プラグイン サンプルから抜粋した次のコード リストは、PluginActionData インタフェースを実装するクラスを定義する方法を示しています。この抜粋は、SAMPLES_HOME/integration/samples/bpm_api/plugin/src/com/bea/wlpi/tour/po/plugin ディレクトリの CheckInventoryActionData.java ファイルから取り出したものです。重要なコード行は、太字で示します。

注意: PluginActionData インタフェースを実装するクラスの定義方法を示すその他の例については、SAMPLES_HOME/integration/samples/bpm_api/plugin/src/com/bea/wlpi/tour/po/plugin ディレクトリの SendConfirmationActionData.java ファイルを参照してください。

コード リスト 4-8 PluginActionData インタフェースの実装

package com.bea.wlpi.tour.po.plugin;

import com.bea.wlpi.common.XMLWriter;
import com.bea.wlpi.common.plugin.PluginData;
import com.bea.wlpi.common.plugin.PluginActionData;
import java.io.IOException;
import java.util.ResourceBundle;
import java.util.Locale;
import java.util.List;
import java.util.Map;
import org.xml.sax.*;

public class CheckInventoryActionData extends CheckInventoryActionObject
implements PluginActionData {
private SampleBundle bundle;

public CheckInventoryActionData() {
getBundle(Locale.getDefault());
}

public CheckInventoryActionData(Locale lc) {
getBundle(lc);
}

public CheckInventoryActionData(Locale lc, String inputVariableName,
String outputVariableName) {

super(inputVariableName, outputVariableName);

getBundle(lc);
}

public void save(XMLWriter writer, int indent) throws IOException {
writer.saveElement(indent, INPUTVARIABLE_TAG, inputVariableName);
writer.saveElement(indent, OUTPUTVARIABLE_TAG, outputVariableName);
}

private void getBundle(Locale lc) {
bundle = new SampleBundle(lc);
}

public List getReferencedPublishables(Map publishables) {
return null;
}

public String getPrintableData() {
return bundle.getString("checkInventoryDesc");
}
public Object clone() {

return new CheckInventoryActionData(bundle.getLocale(),
new String(this.inputVariableName),
new String(this.outputVariableName));
}

public String getLabel() {
return bundle.getString("checkInventoryDesc");
}
}

関連する次のコード例も参照してください。

プラグイン サンプルの詳細については、BPM プラグイン サンプルを参照してください。

 


プラグイン GUI コンポーネントの表示

設計クライアントでプラグイン GUI コンポーネントを表示するには、すべてのプラグインがプラグイン パネル クラスを拡張するクラスを定義する必要があります。

たとえば、プラグイン の例 : 開始ノードの図では、ユーザが Start Order イベントを開始ノードのトリガとして選択すると、Plug-in Manager により、プラグイン パネル クラス StartNodePanel がロードされます。このクラスは、引数のないコンストラクタを使用して、Studio クライアントによりインスタンス化されます。次に、Studio クライアントにより、[開始のプロパティ] ダイアログ ボックスにプラグイン GUI コンポーネントが表示されます(リモート クラス ロードの詳細については、プラグイン実装へのアクセスを参照してください)。

注意: KEY_DATAKEY_PANELKEY_RENDERER の各値を介して BPM プラグイン値オブジェクトにより定義されるプラグイン GUI コンポーネント クラスのそれぞれについて、クライアントでのリモート クラス ロードをサポートするために、引数を必要としないパブリック コンストラクタを提供する必要があります。このパブリック コンストラクタを、このクラスにより参照されるプラグイン定義クラスに対して提供する必要はありません。BPM プラグイン値オブジェクトの詳細については、プラグイン開発の基礎を参照してください。

これは、WebLogic Integration リリース 2.1 Service Pack 1 に対する要件です。WebLogic Integration の以前のリリースを使用して生成されたクラスに対して引数のないコンストラクタを提供しない場合、そのクラスはインスタンス化されますが、クライアントとサーバ プラットフォームの間に互換性がない場合、例外が発生することがあります。

次の表で、定義するプラグイン コンポーネントのタイプ別に、拡張の必要なプラグイン パネル クラスについて説明します。

注意: 関数およびメッセージ タイプのプラグイン コンポーネントについては、GUI コンポーネントの表示のためにプラグイン パネル インタフェースを実装する必要はありません。

表4-6 プラグイン パネル クラス

定義するプラグイン

拡張の必要なプラグイン パネル クラス

定義する情報

プラグイン コンポーネント

com.bea.wlpi.common.plugin.PluginPanel

設計クライアントで表示する GUI コンポーネント。

アクション、開始ノード、イベント ノード、または変数タイプが定義される場合、そのために定義されるプラグイン パネル クラス(この表の後段で定義)によりこのクラスは拡張される。

アクション

com.bea.wlpi.common.plugin.PluginActionPanel

プラグイン アクションのための GUI コンポーネント。

このクラスは、Studio の [アクション プラグイン] ダイアログ ボックスで使用され、サブアクションのための汎用サポートを提供する。

注意: PluginActionPanel は、この表の前段で定義されている PluginPanel クラスを拡張します。

開始ノードとイベント ノード

com.bea.wlpi.common.plugin.PluginTriggerPanel

設計クライアントで表示する開始ノードとイベント ノードの GUI コンポーネント。

このクラスは、Studio の [開始のプロパティ] ダイアログ ボックスと [イベントのプロパティ] ダイアログ ボックスで使用される。

注意: PluginTriggerPanel は、この表の前段で定義されている PluginPanel クラスを拡張します。

変数タイプ

com.bea.wlpi.common.plugin.PluginVariablePanel

ユーザがプラグイン変数タイプを編集する際に利用できるように設計クライアントに表示される GUI コンポーネント。

このクラスは、Studio の [変数を設定] ダイアログ ボックスにより使用される。

注意: PluginVariablePanel は、この表の前段で定義されている PluginPanel クラスを拡張します。

com.bea.wlpi.common.plugin.PluginVariableRender

javax.swing.JTable のセルにプラグイン定義の変数タイプの値を表示する GUI コンポーネント。

このクラスは、Studio の [変数を設定] ダイアログ ボックスにより使用される。


 

次の節では、各プラグイン パネル クラスについて、さらに詳しく説明します。

PluginPanel クラスの定義

設計クライアントで表示されるプラグイン GUI コンポーネントを定義するには、com.bea.wlpi.common.plugin.PluginPanel クラスを拡張するクラスを定義する必要があります。

注意: アクション、開始ノード、イベント ノード、または変数タイプを定義する場合、プラグイン パネル クラスの表で定義された対応するプラグイン パネル クラス(これは PluginPanel を拡張する)を拡張します。

次の表で、PluginPanel クラスにより定義されるクラス メソッドについて説明します。

注意: 最終として宣言されていないメソッドはオーバーライドできます。

表4-7 PluginPanel クラス メソッド

メソッド

説明

public void exceptionHandlerRenamed(java.lang.String oldName, java.lang.String newName)

イベント ハンドラの名前を変更する。

このメソッドは、例外ハンドラへの直接参照を更新し、プラグイン パネルにより所有される com.bea.wlpi.evaluator.Expression オブジェクトに情報を伝える必要がある。

サブクラスがワークフロー イベント ハンドラを参照して、これらのハンドラに更新を伝える場合、サブクラスは参照が維持されるようにこのメソッドをオーバーライドする必要がある。

注意: デフォルトでアクションがサポートされるプラグイン ノードでは、Plug-in Manager はこの変更をアクション リスト全体に伝えます。

メソッド パラメータの定義は次のとおり。

public final com.bea.wlpi.common.plugin.PluginPanelContext getContext()

プラグイン パネルが表示される親コンポーネントを取得する。

このメソッドは、親コンポーネントを示す com.bea.wlpi.common.plugin.PluginPanelContext オブジェクトを返す。PluginPanelContext の実装方法の詳細については、プラグイン実行時コンテキストの使い方を参照。

public final com.bea.wlpi.common.plugin.PluginData getData()

プラグイン データを取得する。

このメソッドは、プラグイン データを示す com.bea.wlpi.common.plugin.PluginData オブジェクトを返す。PluginData オブジェクトの実装方法の詳細については、PluginData インタフェースの実装を参照。

public java.lang.String getHelpIDString()

プラグイン パネルのヘルプ トピック ID を取得する。

このメソッドは、ヘルプ トピック ID を示す java.lang.String オブジェクトを返す。

public java.lang.String getString(java.lang.String key)

ローカライズされた表示文字列を取得する。

リソース バンドル名は、setResourceBundle() メソッド(この表の後段で説明)に対する前の呼び出しにより設定されている必要がある。

メソッド パラメータの定義は次のとおり。

key −リソース キーを示す
java.lang.String オブジェクト。

このメソッドは、表示文字列を示す java.lang.String オブジェクトを返す。

public java.lang.String getString(java.lang.String key, java.lang.Object[] args)

ローカライズされた表示文字列を取得する。

リソース バンドル名は、setResourceBundle() メソッド(この表の後段で説明)に対する前の呼び出しにより設定されている必要がある。このメソッドは、オブジェクトの ClassLoader を使用して、plugin-ejb.jar ファイル内の指定されたリソース プロパティ ファイルから文字列リソースを取得する。

メソッド パラメータの定義は次のとおり。

このメソッドは、表示文字列を示す java.lang.String オブジェクトを返す。

public abstract void load()

プラグイン パネルに対して、プラグイン データを使用してユーザ インタフェースを初期化するように指示する。

このメソッドは、getData() を呼び出してプラグイン データにアクセスし、対応するプラグイン クラスに結果を送信し、適切な get メソッドを呼び出して、表示値を取り出す。

Plug-in Manager は、このメソッドがモードの表示サイクルあたり 1 回だけ呼び出されるように管理する。

注意: プラグインは、このメソッドを呼び出してはなりません。

public boolean referencesExceptionHandler(java.lang.String handler)

プラグインが、指定されたイベント ハンドラを参照しているかどうかをチェックする。

このメソッドは、プラグイン パネル クラスが指定された例外ハンドラに対して保持している直接参照を名前でチェックする必要がある。

サブクラスがワークフロー イベント ハンドラを参照する場合、参照されたイベント ハンドラを誤って削除することを防止するため、そのサブクラスはこのメソッドをオーバーライドする必要がある。

注意: デフォルトでアクションがサポートされるプラグイン ノードでは、Plug-in Manager はこの変更をアクション リスト全体に伝えます。

メソッド パラメータの定義は次のとおり。

handler −イベント ハンドラ名を示す
java.lang.String オブジェクト。

このメソッドは、プラグイン パネルが指定されたイベント ハンドラを参照する場合はブール値の true を、参照しない場合は false を返す。

public boolean referencesVariable(java.lang.String variable)

プラグイン パネルが、指定された変数を参照しているかどうかをチェックする。

このメソッドは、プラグイン パネル クラスが指定された変数に対して保持している直接参照を名前でチェックする必要がある。

サブクラスが、名前により直接、または式により間接的に、ワークフロー変数を参照する場合、参照された変数を誤って削除することを防止するため、そのサブクラスはこのメソッドをオーバーライドする必要がある。

注意: デフォルトでアクションがサポートされるプラグイン ノードでは、Plug-in Manager はこの変更をアクション リスト全体に伝えます。

メソッド パラメータの定義は次のとおり。

variable −変数を示す
java.lang.String オブジェクト。

このメソッドは、プラグイン パネルが指定された変数を参照する場合はブール値の true を、参照しない場合は false を返す。

public final void setContext(com.bea.wlpi.common.plugin.PluginPanelContext context, com.bea.wlpi.common.plugin.PluginData data)

プラグイン パネルの操作コンテキストを設定する。

Plug-in Manager は、設計クライアント ダイアログ ボックスにプラグイン パネルを追加する前に、このメソッドを呼び出す。このメソッドは、対応するメンバー変数にオーナ パラメータとデータ パラメータを格納する。

注意: プラグインは、このメソッドを呼び出してはなりません。

メソッド パラメータの定義は次のとおり。

public void setResourceBundle(java.lang.String bundleName)

文字列とメッセージをローカライズするときに使用するリソース バンドルを設定する。

メソッド パラメータの定義は次のとおり。

bundleName −リソース バンドルの名前を示す
java.lang.String オブジェクト。

public abstract boolean validateAndSave()

GUI コントロール値を検証し、その値を保存するように、プラグイン パネルに指示する。

このメソッドは、getData() を呼び出してプラグイン データにアクセスし、対応するプラグイン クラスに結果を送信し、適切な set メソッドを呼び出して、表示値を保存する。

このメソッドは、パネルが検証され、保存された場合はブール値の true を、そうでない場合は false を返す。

public void variableRenamed(java.lang.String oldName, java.lang.String newName)

変数の名前を変更する。

このメソッドは、変数への直接参照を更新し、プラグイン パネルにより所有される com.bea.wlpi.evaluator.Expression オブジェクトに情報を伝える必要がある。これは、variableRenamed() メソッドを呼び出してから、toString() メソッドを呼び出して、更新された式テキストを取得することによって行える。

サブクラスが、名前により直接、または式により間接的に、ワークフロー変数を参照する場合、参照が維持されるように、そのサブクラスはこのメソッドをオーバーライドする必要がある。

注意: デフォルトでアクションがサポートされるプラグイン ノードでは、Plug-in Manager はこの変更をアクション リスト全体に伝えます。

メソッド パラメータの定義は次のとおり。


 

次の節では、PluginPanel クラスの定義方法をコード例で示します。

完了ノードの例

次のコード リストで、完了ノードのために PluginPanel クラスを定義する方法を示します。このコードは、[完了のプロパティ] ダイアログ ボックス内に分岐ダイアログ ボックス(yes または no)を表示します。重要なコード行は、太字で示します。

注意: このクラスは、プラグイン サンプルには含まれていません。

コード リスト 4-9 完了ノードのための PluginPanel クラスの定義

package com.bea.wlpi.test.plugin; 

import java.awt.*;
import javax.swing.*;
import javax.swing.border.TitledBorder;
import javax.swing.border.EtchedBorder;
import java.util.List;
import java.util.Locale;
import com.bea.wlpi.common.plugin.PluginPanel;
import com.bea.wlpi.common.plugin.PluginPanelContext;
import com.bea.wlpi.client.studio.Studio;
import com.bea.wlpi.common.VariableInfo;

public class DoneNodePanel extends PluginPanel
{

JPanel ButtonPanel = new JPanel();
ButtonGroup YesNoButtonGroup = new ButtonGroup();
JRadioButton YesButton = new JRadioButton();
JRadioButton NoButton = new JRadioButton();
TitledBorder titledBorder = new TitledBorder(new EtchedBorder());

public DoneNodePanel()
{
super(Locale.getDefault(), "jackolantern");
setLayout(null);
setBounds(12,12,420,300);
setPreferredSize(new Dimension(420,300));
ButtonPanel.setBorder(titledBorder);
ButtonPanel.setLayout(null);
add(ButtonPanel);
ButtonPanel.setBounds(72,60,300,144);
YesButton.setText("Yes");
YesButton.setSelected(true);
YesNoButtonGroup.add(YesButton);
ButtonPanel.add(YesButton);
YesButton.setBounds(60,36,46,23);
NoButton.setText("No");
YesNoButtonGroup.add(NoButton);
ButtonPanel.add(NoButton);
NoButton.setBounds(60,60,46,23);
titledBorder.setTitle("Yes or No?");
}

public void load() {

DoneNodeData myData = (DoneNodeData)getData();
if(myData != null) {
if(myData.getYesOrNo() != null && myData.getYesOrNo().equals(TestPluginConstants.DONE_NO)) {
NoButton.setSelected(true);
} else {
YesButton.setSelected(true);
}
}
}

public boolean validateAndSave()
{
DoneNodeData myData = (DoneNodeData)getData();
if(myData != null) {
if(YesButton.isSelected()) {
myData.setYesOrNo(TestPluginConstants.DONE_YES);
} else {
myData.setYesOrNo(TestPluginConstants.DONE_NO);
}
}

return true;
}

次の図に、結果のPluginPanel GUI コンポーネントを示します。

図4-1 完了ノードのための PluginPanel GUI コンポーネント


 

関連する次のコード例も参照してください。

ワークフロー テンプレート プロパティの例

次のコード リストで、ワークフロー テンプレート プロパティのために PluginPanel クラスを定義する方法を示します。このコードは、[ワークフロー テンプレート プロパティ] ダイアログ ボックス内に分岐ダイアログ ボックス(yes または no)を表示します。重要なコード行は、太字で示します。

注意: このクラスは、プラグイン サンプルには含まれていません。

コード リスト 4-10 ワークフロー テンプレート プロパティのための PluginPanel クラスの定義

package com.bea.wlpi.test.plugin;

import java.awt.*;
import javax.swing.*;
import javax.swing.border.TitledBorder;
import javax.swing.border.EtchedBorder;
import java.util.List;
import java.util.Locale;
import com.bea.wlpi.common.plugin.PluginPanel;
import com.bea.wlpi.common.plugin.PluginPanelContext;
import com.bea.wlpi.client.studio.Studio;
import com.bea.wlpi.common.VariableInfo;

public class TemplatePropertiesPanel extends PluginPanel
{

JPanel ButtonPanel = new JPanel();
ButtonGroup YesNoButtonGroup = new ButtonGroup();
JRadioButton YesButton = new JRadioButton();
JRadioButton NoButton = new JRadioButton();
TitledBorder titledBorder = new TitledBorder(new EtchedBorder());

public TemplatePropertiesPanel()
{
super(Locale.getDefault(), "stpatty");
setLayout(null);
setBounds(12,12,420,300);
ButtonPanel.setBorder(titledBorder);
ButtonPanel.setLayout(null);
add(ButtonPanel);
ButtonPanel.setBounds(72,60,300,144);
YesButton.setText("Yes");
YesButton.setSelected(true);
YesNoButtonGroup.add(YesButton);
ButtonPanel.add(YesButton);
YesButton.setBounds(60,36,46,23);
NoButton.setText("No");
YesNoButtonGroup.add(NoButton);
ButtonPanel.add(NoButton);
NoButton.setBounds(60,60,46,23);
titledBorder.setTitle("Yes or No?");
}

public void load() {

TemplatePropertiesData myData = (TemplatePropertiesData)getData();
if(myData != null) {
if(myData.getYesOrNo() != null && myData.getYesOrNo().equals(TestPluginConstants.DONE_NO)) {
NoButton.setSelected(true);
} else {
YesButton.setSelected(true);
}
}
}

public boolean validateAndSave()
{
TemplatePropertiesData myData = (TemplatePropertiesData)getData();
if(myData != null) {
if(YesButton.isSelected()) {
myData.setYesOrNo(TestPluginConstants.DONE_YES);
} else {
myData.setYesOrNo(TestPluginConstants.DONE_NO);
}
}

return true;
}

次の図に、結果のPluginPanel GUI コンポーネントを示します。

図4-2 ワークフロー テンプレート プロパティのための PluginPanel GUI コンポーネント


 

関連する次のコード例も参照してください。

ワークフロー テンプレート定義プロパティの例

次のコード リストで、ワークフロー テンプレート定義プロパティのために PluginPanel クラスを定義する方法を示します。このコードは、[ワークフロー テンプレート定義プロパティ] ダイアログ ボックス内に分岐ダイアログ ボックス(yes または no)を表示します。重要なコード行は、太字で示します。

注意: このクラスは、プラグイン サンプルには含まれていません。

コード リスト 4-11 ワークフロー テンプレート定義プロパティのための PluginPanel クラスの定義

package com.bea.wlpi.test.plugin;

import java.awt.*;
import javax.swing.*;
import javax.swing.border.TitledBorder;
import javax.swing.border.EtchedBorder;
import java.util.List;
import java.util.Locale;
import com.bea.wlpi.common.plugin.PluginPanel;
import com.bea.wlpi.common.plugin.PluginPanelContext;
import com.bea.wlpi.client.studio.Studio;
import com.bea.wlpi.common.VariableInfo;

public class TemplateDefinitionPropertiesPanel extends PluginPanel
{

JPanel ButtonPanel = new JPanel();
ButtonGroup YesNoButtonGroup = new ButtonGroup();
JRadioButton YesButton = new JRadioButton();
JRadioButton NoButton = new JRadioButton();
TitledBorder titledBorder = new TitledBorder(new EtchedBorder());

public TemplateDefinitionPropertiesPanel()
{
super(Locale.getDefault(), "valentine");
setLayout(null);
setBounds(12,12,420,300);
ButtonPanel.setBorder(titledBorder);
ButtonPanel.setLayout(null);
add(ButtonPanel);
ButtonPanel.setBounds(72,60,300,144);
YesButton.setText("Yes");
YesButton.setSelected(true);
YesNoButtonGroup.add(YesButton);
ButtonPanel.add(YesButton);
YesButton.setBounds(60,36,46,23);
NoButton.setText("No");
YesNoButtonGroup.add(NoButton);
ButtonPanel.add(NoButton);
NoButton.setBounds(60,60,46,23);
titledBorder.setTitle("Yes or No?");
}

public void load() {

TemplateDefinitionPropertiesData myData = (TemplateDefinitionPropertiesData)getData();
if(myData != null) {
if(myData.getYesOrNo() != null && myData.getYesOrNo().equals(TestPluginConstants.DONE_NO)) {
NoButton.setSelected(true);
} else {
YesButton.setSelected(true);
}
}
}

public boolean validateAndSave()
{
TemplateDefinitionPropertiesData myData = (TemplateDefinitionPropertiesData)getData();
if(myData != null) {
if(YesButton.isSelected()) {
myData.setYesOrNo(TestPluginConstants.DONE_YES);
} else {
myData.setYesOrNo(TestPluginConstants.DONE_NO);
}
}

return true;
}

次の図に、結果の PluginPanel GUI コンポーネントを示します。

図4-3 ワークフロー テンプレート定義プロパティのための PluginPanel GUI コンポーネント


 

関連する次のコード例も参照してください。

PluginActionPanel クラスの定義

プラグイン アクションを定義するときに設計クライアントに表示される GUI コンポーネントを定義するには、com.bea.wlpi.common.plugin.PluginActionPanel クラスを拡張するクラスを定義する必要があります。Studio では、PluginActionPanel クラスは [アクション プラグイン] ダイアログ ボックスにより使用されます。このダイアログ ボックスは、サブアクションに対する汎用サポートを提供します。

PluginActionPanel クラスで定義される追加メソッドはありません。

注意: PluginActionPanel クラスは、PluginPanel クラスを拡張します。PluginPanel クラス メソッドの詳細については、PluginPanel クラス メソッドの表を参照してください。


 

プラグイン サンプルから抜粋した次のコード リストは、PluginActionPanel クラスを定義する方法を示しています。この抜粋は、SAMPLES_HOME/integration/samples/bpm_api/plugin/src/com/bea/wlpi/tour/po/plugin ディレクトリの CheckInventoryActionPanel.java ファイルから取り出したものです。重要なコード行は、太字で示します。

注意: PluginActionPanel クラスの定義方法を示すその他の例については、SAMPLES_HOME/integration/samples/bpm_api/plugin/src/com/bea/wlpi/tour/po/plugin ディレクトリの SendConfirmationActionPanel.java ファイルを参照してください。

コード リスト 4-12 PluginActionPanel クラスの定義

package com.bea.wlpi.tour.po.plugin;

import java.awt.*;
import javax.swing.*;
import java.util.List;
import java.util.Locale;
import com.bea.wlpi.common.VariableInfo;
import com.bea.wlpi.common.plugin.PluginActionPanel;
import com.bea.wlpi.common.plugin.PluginPanelContext;

public class CheckInventoryActionPanel extends PluginActionPanel {
private JLabel inputLabel = new JLabel();
private JLabel outputLabel = new JLabel();
private JComboBox inputComboBox = new JComboBox();
private JComboBox outputComboBox = new JComboBox();
private List variables = null;

public CheckInventoryActionPanel() {
this(Locale.getDefault());
}

public CheckInventoryActionPanel(Locale lc) {

super(lc, "checkinventory");

setLayout(null);
setBounds(12, 12, 420, 210);
setPreferredSize(new Dimension(420, 210));
add(inputLabel);
inputLabel.setBounds(12, 48, 96, 24);
add(outputLabel);
outputLabel.setBounds(12, 108, 166, 24);
add(inputComboBox);
inputComboBox.setBounds(190, 48, 212, 24);
inputComboBox.setEditable(true);
add(outputComboBox);
outputComboBox.setBounds(190, 108, 212, 24);
outputComboBox.setEditable(true);
}

public void load() {

setResourceBundle("com.bea.wlpi.tour.po.plugin.SamplePlugin");
inputLabel.setText(getString("inputLabel"));
outputLabel.setText(getString("outputLabel"));

CheckInventoryActionData myData = (CheckInventoryActionData)getData();

variables = getContext().getVariableList(VariableInfo.TYPE_INT);

// load はこのパネルの表示前に毎回呼び出される。
// 現在定義されている変数を入れる前に、
// コンボ ボックスから必ず項目を削除すること。
inputComboBox.removeAllItems();

String inputVar = myData.getInputVariableName();
int n = variables == null ? 0 : variables.size();

for (int i = 0; i < n; i++) {
VariableInfo varInfo = (VariableInfo)variables.get(i);

inputComboBox.addItem(varInfo.getName());

if (inputVar != null && inputVar.equals(varInfo.getName())) {
inputComboBox.setSelectedIndex(i);
}
}

if (inputVar == null && n > 0)
inputComboBox.setSelectedIndex(0);

outputComboBox.removeAllItems();

String outputVar = myData.getOutputVariableName();

for (int i = 0; i < n; i++) {
            VariableInfo varInfo = (VariableInfo)variables.get(i);

outputComboBox.addItem(varInfo.getName());

if (outputVar != null && outputVar.equals(varInfo.getName())) {
outputComboBox.setSelectedIndex(i);
}
}

if (outputVar == null && n > 0)
outputComboBox.setSelectedIndex(0);
}

public boolean validateAndSave() {

CheckInventoryActionData myData = (CheckInventoryActionData)getData();
String input = (String)inputComboBox.getEditor().getItem();

try {
VariableInfo varInfo = getContext().checkVariable(input,
new String[]{ VariableInfo.TYPE_INT });

if (varInfo == null)
return false;

if (!(varInfo.getType().equals(VariableInfo.TYPE_INT))) {
JOptionPane.showMessageDialog(SwingUtilities.windowForComponent(this),
getString("Message_100"),
getString("variableErrorTitle"),
JOptionPane.ERROR_MESSAGE);

return false;
}

input = varInfo.getName();
} catch (Exception e) {
JOptionPane.showMessageDialog(SwingUtilities.windowForComponent(this),
e.getLocalizedMessage(),
getString("variableErrorTitle"),
JOptionPane.ERROR_MESSAGE);

return false;
}

String output = (String)outputComboBox.getEditor().getItem();

try {
VariableInfo varInfo = getContext().checkVariable(output,
                                       new String[]{ VariableInfo.TYPE_INT });

if (varInfo == null)
return false;

if (!(varInfo.getType().equals(VariableInfo.TYPE_INT))) {
JOptionPane.showMessageDialog(SwingUtilities.windowForComponent(this),
getString("Message_100"),
getString("variableErrorTitle"),
JOptionPane.ERROR_MESSAGE);

return false;
}

output = varInfo.getName();
} catch (Exception e) {
JOptionPane.showMessageDialog(SwingUtilities.windowForComponent(this),
e.getLocalizedMessage(),
getString("variableErrorTitle"),
JOptionPane.ERROR_MESSAGE);

return false;
}

if (input == null || output == null) {
JOptionPane.showMessageDialog(null, getString("Message_101"),
getString("invalidDataTitle"),
JOptionPane.ERROR_MESSAGE);

return false;
}

myData.setInputVariableName(input);
myData.setOutputVariableName(output);

return true;
}
}

次の図に、結果の PluginActionPanel GUI コンポーネントを示します。

図4-4 PluginActionPanel GUI コンポーネント


 

関連する次のコード例も参照してください。

プラグイン サンプルの詳細については、BPM プラグイン サンプルを参照してください。

PluginTriggerPanel クラスの定義

プラグイン開始ノードまたはイベント ノードを定義するときに設計クライアントに表示される GUI コンポーネントを定義するには、com.bea.wlpi.common.plugin.PluginTriggerPanel クラスを拡張するクラスを定義する必要があります。Studio では、開始ノードとイベント ノードの PluginTriggerPanel クラスは、それぞれ [開始のプロパティ] ダイアログ ボックスと [イベントのプロパティ] ダイアログ ボックスで使用されます。

次の表で、PluginTriggerPanel クラスにより定義されるクラス メソッドについて説明します。

注意: PluginTriggerPanel クラスは、PluginPanel クラスを拡張します。PluginPanel クラス メソッドの詳細については、PluginPanel クラス メソッドの表を参照してください。

表4-8 PluginTriggerPanel クラス メソッド

メソッド

説明

public java.lang.String getEventDescriptor()

プラグイン イベント記述子の特性を示す文字列を取得する。

イベント記述子は、プラグイン ノードが監視するデータを定義する。

式エバリュエータは、com.bea.wlpi.common.plugin.FieldInfo オブジェクトにより指定される、関係する com.bea.wlpi.common.plugin.PluginField 実装クラスのインスタンスにイベント記述子を渡す。FieldInfo オブジェクトは、親である com.bea.wlpi.common.plugin.StartInfo オブジェクトまたは com.bea.wlpi.common.plugin.EventInfo オブジェクトにより提供される。

このメソッドは、イベント記述子を示す java.lang.String オブジェクトを返す。デフォルト実装では、このメソッドは null を返す。

プラグイン固有の外部イベントにアクセスするためのプラグイン フィールドを定義する方法については、メッセージ タイプのための実行時コンポーネント クラスの定義を参照。

public java.lang.String[] getFields()

イベントと関連付けられたフィールド名のリストを取得する(既知の場合)。

このリストが null でない場合、関連付けられた [開始のプロパティ] ダイアログ ボックスまたは [イベントのプロパティ] ダイアログ ボックスは、Expression Builder にこのリストを渡す。

このメソッドは、フィールド名を示す java.lang.String オブジェクトの配列を返す。デフォルト実装では、このメソッドは null を返す。

プラグイン固有の外部イベントにアクセスするためのプラグイン フィールドを定義する方法については、メッセージ タイプのための実行時コンポーネント クラスの定義を参照。


 

次の節では、PluginTriggerPanel クラスの定義方法をコード例で示します。

開始ノードの例

プラグイン サンプルから抜粋した次のコード リストは、開始ノードのために PluginTriggerPanel クラスを定義する方法を示しています。この抜粋は、SAMPLES_HOME/integration/samples/bpm_api/plugin/src/com/bea/wlpi/tour/po/plugin ディレクトリの StartNodePanel.java ファイルから取り出したものです。重要なコード行は、太字で示します。

コード リスト 4-13 開始ノードのための PluginTriggerPanel クラスの定義

package com.bea.wlpi.tour.po.plugin;

import java.awt.*;
import javax.swing.*;
import javax.swing.border.TitledBorder;
import javax.swing.border.EtchedBorder;
import java.util.List;
import java.util.Locale;
import com.bea.wlpi.common.plugin.PluginTriggerPanel;
import com.bea.wlpi.common.plugin.PluginPanelContext;
import com.bea.wlpi.common.VariableInfo;

public class StartNodePanel extends PluginTriggerPanel {
private JLabel StartOrderLabel = new JLabel();
private JTextArea StartOrderText = new JTextArea();

public StartNodePanel() {
this(Locale.getDefault());
}

public StartNodePanel(Locale lc) {

super(lc, "startorder");

setLayout(null);
setBounds(12, 12, 420, 240);
setPreferredSize(new Dimension(420, 240));
add(StartOrderLabel);
StartOrderLabel.setFont(new Font("Dialog", Font.BOLD, 16));
StartOrderLabel.setBounds(120, 12, 156, 24);
StartOrderText.setLineWrap(true);
StartOrderText.setWrapStyleWord(true);
StartOrderText.setEditable(false);
add(StartOrderText);
StartOrderText.setBounds(30, 48, 348, 144);
}

public void load() {

setResourceBundle("com.bea.wlpi.tour.po.plugin.SamplePlugin");
StartOrderLabel.setText(getString("startOrderLabel"));
StartOrderText.setText(getString("startOrderText"));
}

public boolean validateAndSave() {
return true;
}

public String[] getFields() {
return SamplePluginConstants.ORDER_FIELDS;
}

public String getEventDescriptor() {
return SamplePluginConstants.START_ORDER_EVENT;
}
}

START_ORDER_EVENT フィールド要素値と ORDER_FIELDS フィールド要素値が、SamplePluginConstants.java クラス ファイル内に含まれます。これらは、プラグイン開始ノードのイベント記述子とフィールド要素値を次のように定義します。

final static String START_ORDER_EVENT = "startOrder";
final static String[] ORDER_FIELDS = {
"CustomerName", "CustomerID", "OrderStatus", "OrderID",
"CustomerEmail", "ItemName", "ItemID", "ItemQuantity",
"CustomerState"
};

プラグイン固有の外部イベントにアクセスするためのプラグイン フィールドを定義する方法については、メッセージ タイプのための実行時コンポーネント クラスの定義 を参照してください。

次の図に、結果のPluginTriggerPanel GUI コンポーネントを示します。

図4-5 開始ノードのための PluginTriggerPanel GUI コンポーネント


 

関連する次のコード例も参照してください。

プラグイン サンプルの詳細については、BPM プラグイン サンプルを参照してください。

イベント ノードの例

プラグイン サンプルから抜粋した次のコード リストは、イベント ノードのために PluginTriggerPanel クラスを定義する方法を示しています。この抜粋は、SAMPLES_HOME/integration/samples/bpm_api/plugin/src/com/bea/wlpi/tour/po/plugin ディレクトリの EventNodePanel.java ファイルから取り出したものです。重要なコード行は、太字で示します。

コード リスト 4-14 イベント ノードのための PluginTriggerPanel クラスの定義

package com.bea.wlpi.tour.po.plugin;

import java.awt.*;
import javax.swing.*;
import java.util.Locale;
import com.bea.wlpi.common.plugin.PluginTriggerPanel;
import com.bea.wlpi.common.plugin.PluginPanelContext;
import com.bea.wlpi.common.VariableInfo;

public class EventNodePanel extends PluginTriggerPanel {
private JLabel confirmOrderLabel = new JLabel();
private JTextArea confirmOrderText = new JTextArea();

/**
* 新しい EventNodePanel を作成する
*/
public EventNodePanel() {
this(Locale.getDefault());
}

public EventNodePanel(Locale lc) {

super(lc, "confirmevent");

setLayout(null);
setBounds(12, 12, 420, 240);
setPreferredSize(new Dimension(420, 240));
add(confirmOrderLabel);
confirmOrderLabel.setFont(new Font("Dialog", Font.BOLD, 16));
confirmOrderLabel.setBounds(144, 12, 120, 24);
confirmOrderText.setRequestFocusEnabled(false);
confirmOrderText.setLineWrap(true);
confirmOrderText.setWrapStyleWord(true);
confirmOrderText.setEditable(false);
add(confirmOrderText);
confirmOrderText.setBounds(30, 48, 348, 144);
}

public void load() {

setResourceBundle("com.bea.wlpi.tour.po.plugin.SamplePlugin");
confirmOrderLabel.setText(getString("confirmOrderLabel"));
confirmOrderText.setText(getString("confirmOrderText"));
}

public boolean validateAndSave() {

// このパネル上には、ユーザ入力を受け取る UI コントロールがない。
// したがって、このメソッドで行うことは何もない。
return true;
}

public String[] getFields() {
return SamplePluginConstants.CONFIRM_FIELDS;
}

public String getEventDescriptor() {
return SamplePluginConstants.CONFIRM_EVENT;
}
}

CONFIRM_EVENTCONFIRM_FIELD が、SamplePluginConstants.java クラス内に含まれます。これらは、プラグイン イベント ノードのイベント記述子とフィールド要素値を次のように定義します。

final static String CONFIRM_EVENT = "confirmOrder";
final static String[] CONFIRM_FIELDS = { "Status", "TotalPrice" };

プラグイン固有の外部イベントにアクセスするためのプラグイン フィールドを定義する方法については、メッセージ タイプのための実行時コンポーネント クラスの定義を参照してください。

次の図に、結果の PluginTriggerPanel GUI コンポーネントを示します。

図4-6 イベント ノードのための PluginTriggerPanel GUI コンポーネント


 

関連する次のコード例も参照してください。

プラグイン サンプルの詳細については、BPM プラグイン サンプルを参照してください。

PluginVariablePanel クラスの定義

ユーザがプラグイン変数タイプを編集できるようにするためのプラグイン変数を定義するときに設計クライアントに表示される GUI コンポーネントを定義するには、com.bea.wlpi.common.plugin.PluginVariablePanel クラスを拡張するクラスを定義する必要があります。Studio では、PluginVariablePanel クラスは [変数を設定] ダイアログ ボックスにより使用されます。

次の表では、PluginVariablePanel クラスにより定義されるクラス メソッドについて説明します。

注意: PluginVariablePanel クラスは、PluginPanel クラスを拡張します。PluginPanel クラス メソッドの詳細については、PluginPanel クラス メソッドの表を参照してください。

表4-9 PluginVariablePanel クラス メソッド

メソッド

説明

public final java.lang.Object getVariableValue()

プラグイン変数の値を取得する。

このメソッドは、変数値を示す java.lang.Object オブジェクトを返す。

public final void setContext(java.lang.Object variableValue)

プラグイン パネルの操作コンテキストを設定する。

Plug-in Manager は、[変数を設定] ダイアログ ボックスにプラグイン変数パネルを追加する前に、このメソッドを呼び出す。

注意: プラグインは、このメソッドを呼び出してはなりません。

メソッド パラメータの定義は次のとおり。

variableValue −変数値を示す
java.lang.Object オブジェクト。この表の前段で説明した getVariableValue() メソッドを使用して、変数値を取得できる。


 

次のコード リストで、PluginVariablePanel クラスの定義方法を示します。重要なコード行は、太字で示します。

注意: このクラスは、プラグイン サンプルには含まれていません。

コード リスト 4-15 PluginVariablePanel クラスの定義

package com.bea.wlpi.test.plugin;

import java.awt.*;
import javax.swing.*;
import javax.swing.border.TitledBorder;
import javax.swing.border.EtchedBorder;
import java.util.List;
import java.util.Locale;
import com.bea.wlpi.client.studio.Studio;
import com.bea.wlpi.common.VariableInfo;
import com.bea.wlpi.common.plugin.PluginVariablePanel;

public class VariablePanel extends PluginVariablePanel {
JTextField highField, lowField;

public VariablePanel() {
super(Locale.getDefault(), "augustus");
setLayout(null);
setBounds(12,12,420,60);
highField = new JTextField();
highField.setLocation(20, 10);
highField.setSize(300, 20);
add(highField);
lowField = new JTextField();
lowField.setLocation(20, 40);
lowField.setSize(300, 20);
add(lowField);
}

public void load() {
if (variableValue != null) {
highField.setText(((MySpecificObject)variableValue).getHigh());
lowField.setText(((MySpecificObject)variableValue).getLow());
} else {
highField.setText("");
lowField.setText("");
}
}

public boolean validateAndSave() {
try {
variableValue = new MySpecificObject(lowField.getText(), highField.getText());
} catch (Exception e) {
return false;
}
return true;
}
}

次の図に、結果のPluginVariablePanel GUI コンポーネントを示します。

図4-7 PluginVariablePanel GUI コンポーネント


 

関連するリスト例として、PluginVariableRenderer クラスの定義を参照してください。javax.swing.JTable のセルにプラグイン定義の変数タイプの値を表示する方法について説明しています。

PluginVariableRenderer クラスの定義

javax.swing.JTable のセルにプラグイン定義の変数タイプの値を表示するには、com.bea.wlpi.common.plugin.PluginVariableRenderer インタフェースを実装します。

注意: このインタフェースを実装するクラスは、java.awt.Component のサブクラスとする必要があります。

次の表で、実装の必要な PluginVariableRenderer インタフェース メソッドについて説明します。

表4-10 PluginVariableRenderer インタフェース メソッド

メソッド

説明

public void setValue(java.lang.Object value)

表示する変数を設定する。

メソッド パラメータの定義は次のとおり。

value −表示する変数値を示す
java.lang.Object オブジェクト。この値は、null、または対応する com.bea.wlpi.common.plugin.VariableTypeInfo オブジェクトで宣言されたクラスのインスタンスのいずれかとすることができる。


 

次のコード リストで、 javax.swing.JTable のセルにプラグイン定義の変数タイプの値を表示する方法を示します。重要なコード行は、太字で示します。

注意: このクラスは、プラグイン サンプルには含まれていません。

コード リスト 4-16 PluginVariableRenderer クラスの定義

package com.bea.wlpi.test.plugin;

import java.io.Serializable;
import javax.swing.JLabel;
import com.bea.wlpi.common.plugin.PluginVariableRenderer;

public class VariableRenderer extends JLabel implements PluginVariableRenderer, Serializable {
public VariableRenderer() {
}

public void setValue(Object value) {
if (value == null)
setText("null");
else
setText(value.toString());
}
}

PluginVariablePanel クラスの定義では、設計クライアントでプラグイン GUI コンポーネントを表示する方法を説明しています。

 


プラグインの実行

プラグインを実行するには、プラグインのための実行時コンポーネントを定義する必要があります。

次の表で、作成するプラグイン コンポーネントのタイプ別に、実装の必要なプラグイン コンポーネント インタフェースについて説明します。プラグインが着信データを読み込む(解析する)ことができるようにするには、実行時コンポーネント クラスが、その親インタフェースである com.bea.wlpi.common.plugin.PluginObjectload() (解析) メソッドを実装する必要があります。

注意: プラグイン コンポーネントのうち、変数タイプ、ワークフロー テンプレート プロパティ、ワークフロー テンプレート定義プロパティについては、実行情報を定義する必要はありません。

表4-11 プラグイン実行時コンポーネント インタフェース

定義するプラグイン

実装の必要なインタフェース

定義する情報

アクション

com.bea.wlpi.server.plugin.PluginAction

プラグイン アクション実行情報。

注意: プラグイン アクションをサポートするには、Studio 内の各種ダイアログ ボックスに表示されるアクション ツリーにリストされるアクションおよびアクション カテゴリもカスタマイズする必要があります。

完了ノード

com.bea.wlpi.server.plugin.PluginDone

プラグイン 完了ノード実行情報。

注意: PluginDone インタフェースは、com.bea.wlpi.server.plugin.PluginTemplateNode インタフェースを拡張します。詳細については、PluginTemplateNode インタフェースを参照してください。

イベント ノード

com.bea.wlpi.server.plugin.PluginEvent

プラグイン イベント ノード実行情報。

関数

com.bea.wlpi.common.plugin.PluginFunction

新しいエバリュエータ関数情報。

メッセージ タイプ

com.bea.wlpi.server.plugin.PluginField

プラグイン固有のメッセージ タイプ。

開始ノード

com.bea.wlpi.server.plugin.PluginStart2

プラグイン開始ノード実行情報。

注意: PluginStart2 インタフェースは、com.bea.wlpi.server.plugin.PluginTemplateNode インタフェースを拡張します。詳細については、PluginTemplateNode インタフェースを参照してください。


 

注意: 実行時に、Plug-in Manager により渡されるコンテキスト インタフェースを使用して、関連付けられたプラグインのための実行時コンテキストとサービスにアクセスできます。コンテキスト インタフェースの詳細については、プラグイン実行時コンテキストの使い方を参照してください。

次の節では、それぞれのプラグイン実行時コンポーネント クラスを定義する方法について説明します。

アクションのための実行時コンポーネント クラスの定義

プラグイン アクションのための実行時コンポーネント クラスを定義する手順は、次のとおりです。

プラグイン アクションのための実行情報の定義

プラグイン アクションのための実行情報を定義するには、次の表で説明するように、com.bea.wlpi.server.plugin.PluginAction インタフェースとそのメソッドを実装する必要があります。

表4-12 PluginAction インタフェース メソッド

メソッド

説明

public int execute(com.bea.wlpi.server.plugin.ActionContext actionContext, com.bea.wlpi.server.common.ExecutionContext execContext) throws com.bea.wlpi.common.WorkflowException

プラグイン アクションとそのビジネス ロジックを実行する。

メソッド パラメータの定義は次のとおり。

アクションと実行コンテキストの詳細については、プラグイン実行時コンテキストの使い方を参照。

このメソッドは、処理を続行するかどうかを指定するリターン コードを示す次のいずれかの com.bea.wlpi.server.common.ExecutionContext 整数値を返す。

public void fixup(com.bea.wlpi.evaluator.ExpressionParser parser) throws com.bea.wlpi.common.WorkflowException

プラグイン アクションが必要な式をコンパイルできるようにする。

Plug-in Manager は、テンプレート定義を解析して、結果をメモリに格納した後、ワークフローを開始する前に、このメソッドを呼び出す。

メソッド パラメータの定義は次のとおり。

parser −式パーサを示す
com.bea.wlpi.evaluator.ExpressionParser オブジェクト。

public void response(com.bea.wlpi.server.plugin.ActionContext actionContext, com.bea.wlpi.server.common.ExecutionContext execContext, java.lang.Object data) throws com.bea.wlpi.common.WorkflowException

このアクションに送られる非同期応答を処理する。

通常、このメソッドは、前の execute() メソッド(この表の前段で説明)に対する呼び出しでアクションにより生成された外部要求への応答として返される。

プラグイン アクションは、このメソッドを使用して、サブアクションの非同期実行などを開始できる。Plug-in Manager は、com.bea.wlpi.server.worklist.Worklist.response() メソッドまたは他のオーバーロード メソッドに対する呼び出しを受け取ったときに、このメソッドを呼び出す。

メソッド パラメータの定義は次のとおり。

アクションと実行コンテキストの詳細については、プラグイン実行時コンテキストの使い方を参照。

public void startedWorkflowDone(com.bea.wlpi.server.plugin.ActionContext actionContext, com.bea.wlpi.server.common.ExecutionContext execContext, com.bea.wlpi.common.VariableInfo[] output) throws com.bea.wlpi.common.WorkflowException

以前に開始されていたサブワークフローが完了したことをプラグイン アクションに通知する。

メソッド パラメータの定義は次のとおり。

アクションと実行コンテキストの詳細については、プラグイン実行時コンテキストの使い方を参照。


 

プラグイン サンプルから抜粋した次のコード リストは、アクションのための実行時コンポーネント クラスを定義する方法を示しています。この抜粋は、SAMPLES_HOME/integration/samples/bpm_api/plugin/src/com/bea/wlpi/tour/po/plugin ディレクトリの CheckInventoryAction.java ファイルから取り出したものです。重要なコード行は、太字で示します。

注意: プラグイン アクション実行時コンポーネント クラスの定義方法を示すその他の例については、SAMPLES_HOME/integration/samples/bpm_api/plugin/src/com/bea/wlpi/tour/po/plugin ディレクトリの SendConfirmationAction.java ファイルを参照してください。

コード リスト 4-17 アクションのための実行時コンポーネント クラスの定義

package com.bea.wlpi.tour.po.plugin;

import java.io.IOException;
import com.bea.wlpi.server.plugin.PluginAction;
import com.bea.wlpi.common.WorkflowException;
import com.bea.wlpi.common.plugin.PluginException;
import com.bea.wlpi.common.Messages;
import com.bea.wlpi.common.VariableInfo;
import com.bea.wlpi.evaluator.Expression;
import com.bea.wlpi.evaluator.EvaluatorException;
import com.bea.wlpi.server.common.ExecutionContext;
import com.bea.wlpi.evaluator.ExpressionParser;
import com.bea.wlpi.server.plugin.ActionContext;
import org.xml.sax.*;

public class CheckInventoryAction extends CheckInventoryActionObject
implements PluginAction {
private Expression inputValueExpression;
static int[] quantities = {
250, 120, 5, 75, 0, 300, 550, 25, 16, 630, 3
};

public CheckInventoryAction() {
}

public void fixup(ExpressionParser parser) {

System.out.println("SamplePlugin: CheckInventoryAction.fixup called");

try {
inputValueExpression =
inputVariableName != null
? new Expression("$" + inputVariableName, parser) : null;
} catch (EvaluatorException ee) {
System.out.println("EvaluationException ocurred in CheckInventoryAction");
}
}

public int execute(ActionContext actionContext, ExecutionContext context)
throws WorkflowException {

System.out.println("SamplePlugin: CheckInventoryAction.execute called");

Object valueObject = inputValueExpression != null
? inputValueExpression.evaluate(context) : null;

if (valueObject == null)
throw new PluginException("Sample Plugin", "itemNo is null");

if (!(valueObject instanceof Long))
throw new PluginException("Sample Plugin", "itemNo not an integer");

int itemNo = ((Long)valueObject).intValue();
int quantity = quantities[itemNo % quantities.length] + itemNo;

System.out.println("CheckInventoryAction: Output = " + quantity);
context.setVariableValue(outputVariableName, new Long(quantity));

return ExecutionContext.CONTINUE;
}

public void response(ActionContext actionContext, ExecutionContext execContext, Object data)
throws WorkflowException {
}

public void startedWorkflowDone(ActionContext actionContext,
ExecutionContext context,
VariableInfo[] output) {
}

関連する次のコード例も参照してください。

プラグイン サンプルの詳細については、BPM プラグイン サンプルを参照してください。

アクション ツリーをカスタマイズする

プラグイン アクションをサポートするには、Studio 内の各種ダイアログ ボックスに表示されるアクション ツリーにリストされるアクションおよびアクション カテゴリをカスタマイズする必要があります。

たとえば、次の図は、アクション ツリーがカスタマイズされたバージョンの [アクションを追加] ダイアログ ボックスです。

図4-8 カスタマイズされたアクション ツリー


 


 

前の図に示したように、BPM アクション ツリーに、新しいアクション カテゴリである Sample Actions が追加されています。これは次のプラグイン アクションを提供します。

アクション ツリーをカスタマイズする手順は、次のとおりです。

  1. com.bea.wlpi.common.plugin.CategoryInfo オブジェクトを定義します。このオブジェクトが、カスタムのプラグイン アクションとアクション カテゴリを定義します。

    CategoryInfo オブジェクトの作成方法については、プラグイン値オブジェクトの定義を参照してください。

  2. com.bea.wlpi.server.plugin.Plugin リモート インタフェースの getPluginCapabilitiesInfo() メソッドを実装して、com.bea.wlpi.common.plugin.PluginCapabilitiesInfo オブジェクトを定義します。

    手順 1 で定義した CategoryInfo オブジェクトを使用して、カスタム アクション ツリー特性を定義します。

Plug-in Manager は、getPluginCapabilitiesInfo() メソッドを呼び出すときに、既存のアクション カテゴリ ツリーを com.bea.wlpi.common.plugin.CategoryInfo オブジェクトとして渡し、プラグインがツリーを調べて、カスタムのアクションやアクション カテゴリを追加する位置を決定できるようにする必要があります。Plug-in Manager は、この有効なツリー構造を取得すると、取得したツリー構造を既存のツリー構造と結合し、新しいカテゴリのそれぞれに新しい systemID を割り当てます。

Plug-in Manager は、getPluginCapabilitiesInfo() メソッドを複数回呼び出すことができますが、毎回新たに初期化されたアクション ツリーを返す必要があります。既存の CategoryInfo オブジェクトを再利用した場合、Plug-in Manager は、setSystemID() メソッドの 2 回目の呼び出し時に IllegalStateException を生成します。

既存のアクション カテゴリのどのレベルでも新しいアクションまたはサブカテゴリを追加できますが、既存のカテゴリからアクションやサブアクションを削除することはできません。

プラグイン サンプルから抜粋した次のコード リストは、次のメソッドを定義する方法を示しています。

この抜粋は、SAMPLES_HOME/integration/samples/bpm_api/plugin/src/com/bea/wlpi/tour/po/plugin ディレクトリの SamplePluginBean.java ファイルから取り出したものです。この例は、Check Inventory アクションと Send Confirmation アクションの 2 つを定義します。重要なコード行は、太字で示します。

コード リスト 4-18 アクション ツリーのカスタマイズ

private CategoryInfo[] getCategoryInfo(SampleBundle bundle) {

ActionInfo checkInventoryAction =
new ActionInfo(SamplePluginConstants.PLUGIN_NAME, 1,
bundle.getString("checkInventoryName"),
bundle.getString("checkInventoryDesc"), ICON_BYTE_ARRAY,
ActionCategoryInfo.ID_NEW,
ActionInfo.ACTION_STATE_ALL,
SamplePluginConstants.CHECKINV_CLASSES);

ActionInfo sendConfirmAction =
new ActionInfo(SamplePluginConstants.PLUGIN_NAME, 2,
bundle.getString("sendConfirmName"),
bundle.getString("sendConfirmDesc"), ICON_BYTE_ARRAY,
ActionCategoryInfo.ID_NEW,
ActionInfo.ACTION_STATE_ALL,
SamplePluginConstants.SENDCONF_CLASSES);

ActionCategoryInfo[] actions =
new ActionCategoryInfo[]{ checkInventoryAction, sendConfirmAction};

CategoryInfo[] catInfo =
new CategoryInfo[]{ new CategoryInfo(SamplePluginConstants.PLUGIN_NAME,
0, bundle.getString("catName"),
bundle.getString("catDesc"),
ActionCategoryInfo.ID_NEW,
actions)};
return catInfo;
}

public PluginCapabilitiesInfo getPluginCapabilitiesInfo(Locale lc,
CategoryInfo[] info) {

PluginInfo pi;
FieldInfo orderFieldInfo;
FieldInfo confirmFieldInfo;
FieldInfo[] fieldInfo;
FunctionInfo fi;
FunctionInfo[] functionInfo;
StartInfo si;
StartInfo[] startInfo;
EventInfo ei;
EventInfo[] eventInfo;
SampleBundle bundle = new SampleBundle(lc);

log("getPluginCapabilities called");

pi = createPluginInfo(lc);

orderFieldInfo =
new FieldInfo(SamplePluginConstants.PLUGIN_NAME, 3,
bundle.getString("orderFieldName"),
bundle.getString("orderFieldDesc"),
SamplePluginConstants.ORDER_FIELD_CLASSES, false);

confirmFieldInfo =
new FieldInfo(SamplePluginConstants.PLUGIN_NAME, 4,
bundle.getString("confirmFieldName"),
bundle.getString("confirmFieldDesc"),
SamplePluginConstants.CONFIRM_FIELD_CLASSES, false);

fieldInfo = new FieldInfo[]{ orderFieldInfo, confirmFieldInfo};

ei = new EventInfo(SamplePluginConstants.PLUGIN_NAME, 6,
bundle.getString("confirmOrderName"),
bundle.getString("confirmOrderDesc"), ICON_BYTE_ARRAY,
SamplePluginConstants.EVENT_CLASSES,
confirmFieldInfo);

eventInfo = new EventInfo[]{ ei};

fi = new FunctionInfo(SamplePluginConstants.PLUGIN_NAME, 7,
bundle.getString("calcTotalName"),
bundle.getString("calcTotalDesc"),
bundle.getString("calcTotalHint"),
SamplePluginConstants.FUNCTION_CLASSES, 3, 3);

functionInfo = new FunctionInfo[]{ fi};

si = new StartInfo(SamplePluginConstants.PLUGIN_NAME, 5,
bundle.getString("startOrderName"),
bundle.getString("startOrderDesc"), ICON_BYTE_ARRAY,
SamplePluginConstants.START_CLASSES, orderFieldInfo);

startInfo = new StartInfo[]{ si};

PluginCapabilitiesInfo pci = new PluginCapabilitiesInfo(pi,
getCategoryInfo(bundle), eventInfo, fieldInfo, functionInfo, startInfo,
null, null, null, null, null);

return pci;
}

関連する次のコード例も参照してください。

プラグイン サンプルの詳細については、BPM プラグイン サンプルを参照してください。

完了ノードのための実行時コンポーネント クラスの定義

完了ノードのための実行時コンポーネント クラスを定義するには、 com.bea.wlpi.server.plugin.PluginDone インタフェースを実装します。

注意: PluginDone インタフェースは、com.bea.wlpi.server.plugin.PluginTemplateNode を拡張します。PluginTemplateNode インタフェースとそのメソッドの詳細については、PluginTemplateNode インタフェースを参照してください。

PluginDone インタフェースにより追加されるメソッドはありません。

次のコード リストで、完了ノードのための実行時コンポーネント クラスを定義する方法を示します。重要なコード行は、太字で示します。

注意: このクラスは、プラグイン サンプルには含まれていません。

コード リスト 4-19 完了ノードのための実行時コンポーネント クラスの定義

package com.bea.wlpi.test.plugin;

import com.bea.wlpi.common.Messages;
import com.bea.wlpi.common.WorkflowException;
import com.bea.wlpi.evaluator.ExpressionParser;
import com.bea.wlpi.server.common.ExecutionContext;
import com.bea.wlpi.server.plugin.PluginDone;
import java.io.IOException;
import java.util.Map;
import org.xml.sax.*;

public class DoneNode extends DoneObject implements PluginDone {
public DoneNode() {
}

public int activate(ExecutionContext context)
throws WorkflowException {

System.out.println("TestPlugin: DoneNode activated");

// プラグイン インスタンス データを初期化する
Map instanceData = (Map)context.getPluginInstanceData(TestPluginConstants.PLUGIN_NAME);
if (instanceData != null) {
Object started = instanceData.get(TestPluginConstants.INST_DATA_STARTED);
System.out.println("instance data = " + started);
}

int stopMode;
if (yesOrNo.equals(TestPluginConstants.DONE_YES)) {
System.out.println("TestPlugin: DoneNode = YES");
stopMode = ExecutionContext.CONTINUE;
} else {
System.out.println("TestPlugin: DoneNode = NO");
stopMode = ExecutionContext.STOP;
}

return stopMode;
}

public void fixup(ExpressionParser parser) {
}

関連する次のコード例も参照してください。

イベント ノードのための実行時コンポーネント クラスの定義

イベント ノードのための実行時コンポーネント クラスを定義するには、com.bea.wlpi.server.plugin.PluginEvent インタフェースを実装します。

次の表で、実行時コンポーネント クラスの一部として実装の必要な PluginEvent インタフェース メソッドについて説明します。

表4-13 PluginEvent インタフェース メソッド

メソッド

説明

public int activate(com.bea.wlpi.server.common.EventContext eventContext, com.bea.wlpi.server.common.ExecutionContext execContext) throws com.bea.wlpi.common.WorkflowException

イベントをアクティブ化する。

Event Processor は、マッチング イベントが前のノードからの着信遷移によりアクティブ化されるときに、このメソッドを呼び出す。

次に、プラグインは、イベント ウォッチを記録して、Event Processor が着信イベントをこの特定のノードとワークフロー インスタンスに対してマッチングできるようにする。プラグインは、com.bea.wlpi.server.plugin.EventContextactivateEvent() メソッドを呼び出すことにより、デフォルトのイベント ウォッチ登録、送信されるメッセージの処理、イベント マッチング機能を使用できる。プラグインでは、必要な情報を記録すること、および定義された基準に基づいて実行時マッチングを実行するイベント ハンドラを提供する必要がある。プラグイン イベントの処理方法の詳細については、プラグイン イベントの処理を参照。

注意: プラグインが BPM JMS イベント リスナに依存していない場合、イベント ハンドラを用意する必要はありません。

メソッド パラメータの定義は次のとおり。

イベントと実行コンテキストの詳細については、プラグイン実行時コンテキストの使い方を参照。

このメソッドは、イベントがアクティブ化された後に処理を続行するかどうかを指定するリターン コードを示す次のいずれかの com.bea.wlpi.server.common.ExecutionContext 整数値を返す。

public void fixup(com.bea.wlpi.evaluator.ExpressionParser parser) throws com.bea.wlpi.common.WorkflowException

プラグイン ノードが必要な式をコンパイルできるようにする。

Plug-in Manager は、テンプレート定義を解析して、結果をメモリに格納した後、ワークフローを開始する前に、このメソッドを呼び出す。

メソッド パラメータの定義は次のとおり。

parser −式パーサを示す
com.bea.wlpi.evaluator.ExpressionParser オブジェクト。

public int trigger(com.bea.wlpi.server.common.EventContext eventContext, com.bea.wlpi.server.common.ExecutionContext execContext) throws com.bea.wlpi.common.WorkflowException

イベントをトリガする。

Event Processor は、このイベント ノードの基準とマッチする着信イベントを検出したときに、このメソッドを呼び出す。デフォルトのイベント ウォッチ登録とマッチング サービスを使用するプラグインは、com.bea.wlpi.server.plugin.EventContextremoveEventWatch() メソッドを呼び出して、イベントを非リスン状態にする必要がある。デフォルトのイベント ウォッチ登録とマッチング サービスを使用しないプラグインは、前の activate() の呼び出し時にこのノードに対してプラグイン提供のイベント ウォッチ レコードが確立されている場合、それらをすべて無効にする必要がある。

プラグインは、BPM JMS イベント リスナを介してイベントが到着する場合、イベント ハンドラを提供する必要がある。そうでない場合は、独自のイベント リスナ サービスを実装する必要がある。イベント ハンドラの定義方法の詳細については、プラグイン イベントの処理を参照。

メソッド パラメータの定義は次のとおり。

イベントと実行コンテキストの詳細については、プラグイン実行時コンテキストの使い方を参照。

このメソッドは、イベントがトリガされた後に処理を続行するかどうかを指定するリターン コードを示す次のいずれかの com.bea.wlpi.server.common.ExecutionContext 整数値を返す。


 

プラグイン サンプルから抜粋した次のコード リストは、イベント ノードのための実行時コンポーネント クラスを定義する方法を示しています。この抜粋は、SAMPLES_HOME/integration/samples/bpm_api/plugin/src/com/bea/wlpi/tour/po/plugin ディレクトリの StartNode.java ファイルから取り出したものです。重要なコード行は、太字で示します。

コード リスト 4-20 イベント ノードのための実行時コンポーネント クラスの定義

package com.bea.wlpi.tour.po.plugin;

import java.io.IOException;
import com.bea.wlpi.server.plugin.PluginEvent;
import com.bea.wlpi.common.WorkflowException;
import com.bea.wlpi.common.Messages;
import com.bea.wlpi.evaluator.Expression;
import com.bea.wlpi.evaluator.EvaluatorException;
import com.bea.wlpi.server.common.ExecutionContext;
import com.bea.wlpi.server.plugin.EventContext;
import com.bea.wlpi.server.workflow.Workflow;
import com.bea.wlpi.server.workflow.Variable;
import com.bea.wlpi.evaluator.ExpressionParser;
import com.bea.wlpi.server.workflow.TemplateNode;
import org.xml.sax.*;

public class EventNode extends EventObject implements PluginEvent {

public EventNode() {
}

public int activate(EventContext eventContext, ExecutionContext execContext)
throws WorkflowException {

System.out.println("SamplePlugin: EventNode activated");
eventContext.activateEvent(execContext,
SamplePluginConstants.CONTENTTYPE,
eventDesc, null, null);

return ExecutionContext.CONTINUE;
}

public int trigger(EventContext context, ExecutionContext execContext)
throws WorkflowException {

System.out.println("SamplePlugin: EventNode triggered");
context.removeEventWatch(execContext);

return ExecutionContext.CONTINUE;
}

public void fixup(ExpressionParser parser) {
}
}

関連する次のコード例も参照してください。

プラグイン サンプルの詳細については、BPM プラグイン サンプルを参照してください。

関数のための実行時コンポーネント クラスの定義

関数のための実行時コンポーネント クラスを定義するには、com.bea.wlpi.common.plugin.PluginFunction インタフェースを実装します。次の表で、実装の必要な PluginFunction インタフェース メソッドについて説明します。

表4-14 PluginFunction インタフェース メソッド

メソッド

説明

public java.lang.Object evaluate(com.bea.wlpi.evaluator.EvaluationContext context, java.lang.Object[] args
) throws com.bea.wlpi.common.plugin.PluginException

関数を評価する。

式エバリュエータは、この関数呼び出しを評価する必要がある場合に、このメソッドを呼び出す。プラグイン関数は、コンテキスト パラメータにより提供されるコンテキスト情報から戻り値を計算できる。このパラメータは、イベント データとワークフロー インスタンス状態へのアクセスを提供する(該当する場合)。

メソッド パラメータの定義は次のとおり。

このメソッドは、関数評価結果を示す java.lang.String オブジェクトを返す。


 

プラグイン サンプルから抜粋した次のコード リストは、関数のための実行時コンポーネント クラスを定義する方法を示しています。この抜粋は、SAMPLES_HOME/integration/samples/bpm_api/plugin/src/com/bea/wlpi/tour/po/plugin ディレクトリの CalculateTotalPriceFunction.java ファイルから取り出したものです。重要なコード行は、太字で示します。

コード リスト 4-21 関数のための実行時コンポーネント クラスの定義

package com.bea.wlpi.tour.po.plugin;

import com.bea.wlpi.common.Messages;
import com.bea.wlpi.common.plugin.PluginFunction;
import com.bea.wlpi.common.plugin.PluginException;
import com.bea.wlpi.evaluator.*;
import com.bea.wlpi.tour.po.BadStateException;
import java.lang.NumberFormatException;

/**
* このサンプル関数は、受注合計額を計算する。
* 金額は、品目 ID、数量、および出荷先を使用して計算される。
* 出荷先は、売上税率を調べるために使用される。
*/
public class CalculateTotalPriceFunction implements PluginFunction {
static StateTax[] stateTax = {
new StateTax("AB", 0.07), new StateTax("AK", 0.06),
new StateTax("AL", 0.06), new StateTax("AR", 0.03),
new StateTax("AZ", 0.05), new StateTax("BC", 0.05),
new StateTax("CA", 0.04), new StateTax("CO", 0.08),
new StateTax("CT", 0.03), new StateTax("DC", 0.05),
new StateTax("DE", 0.05), new StateTax("FL", 0.00),
new StateTax("GA", 0.06), new StateTax("HI", 0.07),
new StateTax("IA", 0.07), new StateTax("ID", 0.08),
new StateTax("IL", 0.06), new StateTax("IN", 0.03),
new StateTax("KS", 0.05), new StateTax("KY", 0.07),
new StateTax("LA", 0.06), new StateTax("MA", 0.05),
new StateTax("MB", 0.05), new StateTax("MD", 0.04),
new StateTax("ME", 0.04), new StateTax("MI", 0.03),
new StateTax("MN", 0.05), new StateTax("MO", 0.06),
new StateTax("MS", 0.07), new StateTax("MT", 0.07),
new StateTax("NB", 0.08), new StateTax("NC", 0.07),
new StateTax("ND", 0.08), new StateTax("NE", 0.03),
new StateTax("NF", 0.06), new StateTax("NH", 0.09),
new StateTax("NJ", 0.03), new StateTax("NM", 0.06),
new StateTax("NV", 0.03), new StateTax("NY", 0.06),
new StateTax("NS", 0.08), new StateTax("NT", 0.07),
new StateTax("OH", 0.07), new StateTax("OK", 0.02),
new StateTax("ON", 0.08), new StateTax("OR", 0.08),
new StateTax("PA", 0.07), new StateTax("PE", 0.07),
new StateTax("PQ", 0.05), new StateTax("RI", 0.05),
new StateTax("SC", 0.05), new StateTax("SD", 0.04),
new StateTax("SK", 0.04), new StateTax("TN", 0.06),
new StateTax("TX", 0.06), new StateTax("UT", 0.07),
new StateTax("VA", 0.07), new StateTax("VT", 0.08),
new StateTax("WA", 0.07), new StateTax("WI", 0.07),
new StateTax("WV", 0.08), new StateTax("WY", 0.05),
new StateTax("YT", 0.07)
};
static double[] prices = {
29.95, 524.79, 33.21, 9.99, 12.28, 152.50, 43.55, 32.90, 328.55, 72.50,
87.50
};

public CalculateTotalPriceFunction() throws EvaluatorException {
System.out.println("CalculateTotalPriceFunction: constructor called");
}

public Object evaluate(EvaluationContext context, Object[] args)
throws PluginException {

int itemNo;
int quantity;
String state;

System.out.println("CalculateTotalPriceFunction: evaluate called");

try {
itemNo = ((Long)args[0]).intValue();
} catch (Exception e) {
throw new PluginException(SamplePluginConstants.PLUGIN_NAME,
"Invalid ItemID argument");
}

try {
quantity = ((Long)args[1]).intValue();
} catch (Exception e2) {
e2.printStackTrace();

throw new PluginException(SamplePluginConstants.PLUGIN_NAME,
"Invalid Quantity argument");
}

if (!(args[2] instanceof String)) {
throw new PluginException(SamplePluginConstants.PLUGIN_NAME,
"Invalid State argument");
}

state = (String)args[2];

int i;

// stateTax 配列で出荷先を検索する
for (i = 0; i < stateTax.length; ++i) {
if (stateTax[i].equals(state))
                break;
}

if (i == stateTax.length)
throw new PluginException(new BadStateException("Invalid state abbreviation: "
+ state));

double total = (prices[itemNo % prices.length] + itemNo / prices.length)
* quantity * (1 + stateTax[i].getTax());

return new Double(total);
}
}

class StateTax {
String abbrev;
double tax;

public boolean equals(String abbrev) {
return this.abbrev.equalsIgnoreCase(abbrev);
}

public double getTax() {
return tax;
}

public StateTax(String abbrev, double tax) {
this.abbrev = abbrev;
this.tax = tax;
}
}

プラグイン サンプルの詳細については、BPM プラグイン サンプルを参照してください。

メッセージ タイプのための実行時コンポーネント クラスの定義

メッセージ タイプのための実行時コンポーネントを定義するには、com.bea.wlpi.common.plugin.PluginField インタフェースを実装して、プラグイン フィールドを定義する必要があります。プラグイン フィールドにより、開始ノードまたはイベント ノードで受信した外部イベントと関連付けられているカスタム プラグイン データを解析できます。その後、エバリュエータ式からこのデータを参照することができます。プラグインは、関連付けられたイベント記述子にアクセスすることにより、外部イベントのコンテンツ タイプを判別します。

プラグイン フレームワークは、プラグイン フィールド データを使用して、[Expression Builder] ダイアログ ボックスを表示します。たとえば、次の図に示す [Expression Builder] ダイアログ ボックスでは、プラグインの [Fields] カテゴリが選択され、その結果である有効なフィールド要素のリストが表示されています。

図4-9 [Expression Builder] ダイアログ ボックスに表示されたプラグイン フィールド


 

プラグイン フィールドを定義するには、com.bea.wlpi.common.plugin.PluginField インタフェースを実装します。次の表で、実装の必要な PluginField インタフェース メソッドについて説明します。

表4-15 PluginField インタフェース メソッド

メソッド

説明

public java.lang.Object evaluate(com.bea.wlpi.evaluator.EvaluationContext context) throws com.bea.wlpi.common.plugin.PluginException

フィールドを評価する。

式エバリュエータは、このオブジェクトにより参照される値を、評価コンテキスト パラメータに含まれるイベントから取得する必要がある場合に、このメソッドを呼び出す。

その値を計算する際、プラグイン フィールドはフィールド修飾子を考慮する必要がある。

メソッド パラメータの定義は次のとおり。

context −評価コンテキストを示す
com.bea.wlpi.evaluator.EvaluationContext オブジェクト。

このメソッドは、フィールド評価結果を示す java.lang.Object オブジェクトを返す。

public void init(java.lang.String name, java.lang.String eventDescriptor) throws com.bea.wlpi.common.plugin.PluginException

フィールド名とイベント記述子の値を初期化する。

Plug-in Manager は、イベント記述子のコンテキストで値が要求されているフィールドの名前を使用する。

1 つのフィールド タイプは、1 つまたは複数のメッセージ タイプをサポートできる。複数のメッセージ タイプがサポートされている場合、フィールド タイプは、イベント記述子を使用してタイプを区別する。

メソッド パラメータの定義は次のとおり。

public void setQualifier(com.bea.wlpi.server.plugin.PluginField qualifier) throws com.bea.wlpi.common.plugin.PluginException

フィールド修飾子を設定する。

Plug-in Manager は、修飾されたフィールド参照を式パーサが検出したときに、このメソッドを呼び出す。

このメソッドは、プラグイン フィールドが、外部データ ディクショナリ情報にアクセスし、コンパイルされた式の一部として保存されている列詳細を取得できるようにする。

メソッド パラメータの定義は次のとおり。

qualifier −このオブジェクトと同じクラスのフィールド修飾子を示す
com.bea.wlpi.common.plugin.PluginField オブジェクト。


 

プラグイン サンプルから抜粋した次のコード リストは、メッセージ タイプのための実行時コンポーネント クラスを定義する方法を示しています。このプラグイン フィールドは、顧客の注文と関連付けられたデータの入っている 1 つのメッセージ タイプを処理します。データは、String フォーマットであり、各データ要素はセミコロンで区切られています。プラグイン フィールドには、セミコロンで区切られた値の入っている文字列バッファとして外部イベント データを提供することになっています。execute() メソッドでは、このクラスはイベント データについて単純な検証をいくつか実行し、要求されたフィールド名として String オブジェクトを返します。この抜粋は、SAMPLES_HOME/integration/samples/bpm_api/plugin/src/com/bea/wlpi/tour/po/plugin ディレクトリの OrderField.java ファイルから取り出したものです。重要なコード行は、太字で示します。

コード リスト 4-22 メッセージ タイプのための実行時コンポーネント クラスの定義

package com.bea.wlpi.tour.po.plugin;

import com.bea.wlpi.common.plugin.PluginException;
import com.bea.wlpi.common.plugin.PluginField;
import com.bea.wlpi.evaluator.EvaluationContext;
import com.bea.wlpi.server.eventprocessor.EventData;
import java.util.StringTokenizer;

/*
* このサンプル フィールド タイプは、セミコロンで区切られたフィールド値の入った
* 文字列バッファを予想している。フィールドの順序は固定である。.
*/

public final class OrderField implements PluginField {
private String docType;
private String name;

public void init(String name, String eventDescriptor)
throws PluginException {
this.name = name;
docType = eventDescriptor;
}

public void setQualifier(PluginField qualifier) throws PluginException {

System.out.println("OrderField.setQualifier(" + qualifier + ')');

throw new PluginException(SamplePluginConstants.PLUGIN_NAME,
"Qualifiers are not supported");
}

public Object evaluate(EvaluationContext context) throws PluginException {

// イベント データを取得し、それが String オブジェクトであることを確認する
EventData eventData = context.getEventData();

if (eventData == null)
throw new PluginException(SamplePluginConstants.PLUGIN_NAME,
"The event data is null.");

docType = eventData.getEventDescriptor();

if (!docType.equals(SamplePluginConstants.START_ORDER_EVENT))
throw new PluginException(SamplePluginConstants.PLUGIN_NAME,
"The event descriptor is invalid.");

Object object = eventData.getContent();

if (!(object instanceof String))
throw new PluginException(SamplePluginConstants.PLUGIN_NAME,
"The event data is invalid.");

// フィールド名が有効であるかチェックする
int i;

for (i = 0; i < SamplePluginConstants.ORDER_FIELDS.length; i++) {
if (SamplePluginConstants.ORDER_FIELDS[i].equals(name))
                break;
}

// 有効なフィールド名のリストにフィールド名があるか?
if (i == SamplePluginConstants.ORDER_FIELDS.length)
throw new PluginException(SamplePluginConstants.PLUGIN_NAME,
"The field name " + name
+ " is invalid.");

String data = (String)object;
StringTokenizer st = new StringTokenizer(data, ";");
String token = null;

while (st.hasMoreTokens() && i >= 0) {
token = st.nextToken();

i--;
}

// 必要なフィールドの検索が終了する前に、その中のデータがなくなったか?
if (i >= 0) {
throw new PluginException(SamplePluginConstants.PLUGIN_NAME,
"The event data is invalid.");
}

String value = token;

System.out.println("OrderField: name = " + name + ", value = " + value);

// テキスト値を返す
return value;
}
}

The ORDER_FIELDS value is defined within the SamplePluginConstants.java class file as follows:

final static String[] ORDER_FIELDS = {
"CustomerName", "CustomerID", "OrderStatus", "OrderID",
"CustomerEmail", "ItemName", "ItemID", "ItemQuantity",
"CustomerState"
};

[Expression Builder] ダイアログ ボックスに表示されたプラグイン フィールドの図に、[Expression Builder] ダイアログ ボックス内に表示されるフィールド要素を示してあります。

プラグイン サンプルの詳細については、BPM プラグイン サンプルを参照してください。

開始ノードのための実行時コンポーネント クラスの定義

開始ノードのための実行時コンポーネント クラスを定義するには、com.bea.wlpi.server.plugin.PluginStart2 インタフェースを実装します次の表で、実装の必要な PluginStart2 インタフェース メソッドについて説明します。

注意: PluginStart2 インタフェースは、com.bea.wlpi.server.plugin.PluginTemplateNode インタフェースからのメソッドを継承します。詳細については、PluginTemplateNode インタフェースを参照してください。

表4-16 PluginStart2 インタフェース メソッド

メソッド

説明

public void setTrigger(com.bea.wlpi.server.plugin.EventContext context, java.lang.String orgExpr, boolean orgIsExpression
) throws com.bea.wlpi.common.WorkflowException

この開始ノードのためのイベント ウォッチを設定する。

テンプレート定義は、テンプレート定義がアクティブ化され、保存されるときに、このメソッドを呼び出す。

プラグインは、このメソッドを使用してイベント ウォッチを記録する。Event Processor は、記録されたイベント ウォッチを使用して、着信イベントをこの特定のノードとテンプレート定義に対してマッチングできる。プラグインは、 com.bea.wlpi.server.plugin.EventContext.postStartWatch() メソッドを呼び出すことにより、デフォルトのイベント ウォッチ登録、送信されるメッセージの処理、イベント マッチング機能を使用できる。プラグインは、実行時マッチングを実行するためにイベント ハンドラを提供する必要がある。

注意: プラグインが BPM JMS イベント リスナに依存していない場合、イベント ハンドラを用意する必要はありません。

メソッド パラメータの定義は次のとおり。

プラグイン イベントを処理するイベント ハンドラの定義方法の詳細については、プラグイン イベントの処理を参照。


 

プラグイン サンプルから抜粋した次のコード リストは、開始ノードのための実行時コンポーネント クラスを定義する方法を示しています。この抜粋は、SAMPLES_HOME/integration/samples/bpm_api/plugin/src/com/bea/wlpi/tour/po/plugin ディレクトリの StartNode.java ファイルから取り出したものです。重要なコード行は、太字で示します。

コード リスト 4-23 開始 ノードのための実行時コンポーネント クラスの定義

package com.bea.wlpi.tour.po.plugin;

import java.io.IOException;
import com.bea.wlpi.server.plugin.PluginStart2;
.
.
.
public class StartNode extends StartObject implements PluginStart2 {

public StartNode() {
}
.
.
.
public void setTrigger(EventContext context, String orgExpr,
boolean orgIsExpr)
throws WorkflowException {

System.out.println("SamplePlugin: StartNode - setTrigger called");
context.postStartWatch(SamplePluginConstants.CONTENTTYPE, eventDesc,
null, null);
}

public void fixup(ExpressionParser parser) {
}
}

関連する次のコード例も参照してください。

プラグイン サンプルの詳細については、BPM プラグイン サンプルを参照してください。

PluginTemplateNode インタフェース

com.bea.wlpi.server.plugin.PluginTemplateNode インタフェースは、完了ノードと開始ノードをアクティブ化するメソッドと、これらの式をコンパイルするためのメソッドを提供します。

PluginTemplateNode インタフェースは、次のインタフェースにより拡張されます。

次の表で、完了ノードまたは開始ノードを定義するときに実行時コンポーネント クラスの一部として実装の必要な PluginTemplateNode インタフェース メソッドについて説明します。

表4-17 PluginTemplateNode インタフェース メソッド

メソッド

説明

public void activate(com.bea.wlpi.server.common.ExecutionContext context) throws com.bea.wlpi.common.WorkflowException

ノードをアクティブ化する。

プラグイン フレームワークは、マッチング ノードが前のノードからの着信遷移によりアクティブ化されるときに、このメソッドを呼び出す。

メソッド パラメータの定義は次のとおり。

execContext −実行コンテキストを示す
com.bea.wlpi.server.common.ExecutionContext オブジェクト。実行コンテキストは、テンプレート ID、テンプレート定義 ID、ワークフロー インスタンス ID、イベント データ、ワークフロー実行に関係する各種サービスなどの実行時コンテキストへのアクセスを提供する。

実行コンテキストの詳細については、プラグイン実行時コンテキストの使い方を参照。

public void fixup(com.bea.wlpi.evaluator.ExpressionParser parser) throws com.bea.wlpi.common.WorkflowException

プラグイン ノードが必要な式をコンパイルできるようにする。

Plug-in Manager は、テンプレート定義を解析して、結果をメモリに格納した後、ワークフローを開始する前に、このメソッドを呼び出す。プラグインの開始ノードと完了ノードは、負荷のかかる初期化手順をすべてこの時点で実行する必要がある。

メソッド パラメータの定義は次のとおり。

parser −式パーサを示す
com.bea.wlpi.evaluator.ExpressionParser オブジェクト。


 

PluginTemplateNode インタフェースの詳細については、com.bea.wlpi.server.plugin.PluginTemplateNode Javadoc を参照してください。

 


プラグイン実行時コンテキストの使い方

プラグインに関する実行時実行情報を定義するには、プラグインの実行に説明されているように、プラグイン コンポーネントのための実行時インタフェースを実装する必要があります。実行時には、プラグインはコンテキスト引き渡しと呼ばれるプロセスを使用して、プロセス エンジンと通信します。このプロセスで、Plug-in Manager はプラグイン コンポーネント実行時インタフェースのインスタンスを取得し、そのインスタンスにコンテキストを渡します。

次の図に、コンテキスト引き渡しの仕組みを示します。

図4-10 コンテキスト引き渡し


 

各コンテキスト インタフェースは、Plug-in Manager の機能に対して限定的アクセスを提供することにより、プラグインが独自のアプリケーション ロジックの実行と管理を行い、BPM 実行時環境にプラグイン インスタンス データを導入できるようにします。

次の表で、プラグイン実行時コンテキスト インタフェースについて説明します。

表4-18 プラグイン実行時コンテキスト インタフェース

コンテキスト

提供される要素

com.bea.wlpi.server.plugin.ActionContext

実行時コンテキスト、およびアクションと関連付けられたサービス。

com.bea.wlpi.evaluator.EvaluationContext

式の要素のための実行時評価パラメータ。

com.bea.wlpi.server.plugin.EventContext

実行時コンテキスト、およびイベントと関連付けられたサービス。

com.bea.wlpi.server.common.ExecutionContext

実行中のワークフロー インスタンスの実行コンテキスト。

com.bea.wlpi.common.plugin.PluginPanelContext

BPM 設計クライアントのためのクライアント側コンテキスト。


 

次の節では、コンテキスト インタフェースについて更に詳しく説明します。

アクション コンテキスト

com.bea.wlpi.server.plugin.ActionContext インタフェースは、プラグイン アクションのための実行時コンテキストとサービスを提供します。このコンテキストは、com.bea.wlpi.server.plugin.PluginAction インタフェースの execute() を介して渡されます。

次の表で、アクション コンテキストに関する情報にアクセスするために使用できる ActionContext インタフェース メソッドについて説明します。

表4-19 ActionContext インタフェース メソッド

メソッド

説明

public int executeSubActionList(int index, com.bea.wlpi.server.common.ExecutionContext context) throws com.bea.wlpi.common.WorkflowException

リスト上の各サブアクションを実行する。

メソッド パラメータの定義は次のとおり。

このメソッドは、処理を続行するかどうかを指定するリターン コードを示す次のいずれかの com.bea.wlpi.server.common.ExecutionContext 整数値を返す。

実行コンテキストの詳細については、実行コンテキストを参照。

public java.lang.String getActionId() throws com.bea.wlpi.common.WorkflowException

このアクションをユニークに定義する ID を取得する。

この ID は、プラグイン アクションに対して非同期的に実行されるコールバックをサポートするために必要となる。この ID は、com.bea.wlpi.server.worklist.Worklist インタフェースの response() メソッドに渡す必要がある。

このメソッドは、アクション ID を示す java.lang.String オブジェクトを返す。

public java.lang.String instantiateWorkflow(com.bea.wlpi.server.common.ExecutionContext context, java.lang.String orgID, java.lang.String templateID, com.bea.wlpi.common.VariableInfo[] initialValues, java.util.Map pluginData) throws com.bea.wlpi.common.WorkflowException


public java.lang.String instantiateWorkflow(com.bea.wlpi.server.common.ExecutionContext context, java.lang.String orgID, java.lang.String templateID, com.bea.wlpi.common.VariableInfo[] initialValues, java.util.Map pluginData, boolean start) throws com.bea.wlpi.common.WorkflowException

新しいワークフロー インスタンスを作成する。

メソッド パラメータの定義は次のとおり。

このメソッドは、『BPM クライアント アプリケーション プログラミング ガイド』の「DTD フォーマット」に説明されているように、クライアント要求 DTD である ClientReq.dtd に準拠する XML ドキュメントを返す。この XML ドキュメントには、インスタンス ID やテンプレート定義 ID など、実行中のインスタンスについての情報が入っている。この情報には、SAX (Simple API for XML) パーサなどの XML パーサを使用してドキュメントを解析することによりアクセスできる。

public java.lang.String startWorkflow(com.bea.wlpi.server.common.ExecutionContext context, java.lang.String istanceID, com.bea.wlpi.server.eventprocessor.EventData eventData) throws com.bea.wlpi.common.WorkflowException

前にインスタンス化されたワークフローを開始する。ワークフローは、サスペンド状態でインスタンス化されている必要がある。

メソッド パラメータの定義は次のとおり。

このメソッドは、『BPM クライアント アプリケーション プログラミング ガイド』の「DTD フォーマット」に説明されているように、クライアント要求 DTD である ClientReq.dtd に準拠する XML ドキュメントを返す。この XML ドキュメントには、インスタンス ID やテンプレート定義 ID など、実行中のインスタンスについての情報が入っている。この情報には、SAX (Simple API for XML) パーサなどの XML パーサを使用してドキュメントを解析することによりアクセスできる。


 

評価コンテキスト

com.bea.wlpi.evaluator.EvaluationContext インタフェースは、式の要素のための実行時評価パラメータを提供します。このコンテキストは、com.bea.wlpi.server.plugin.PluginField インタフェースと com.bea.wlpi.server.plugin.PluginFunction インタフェースの evaluate() メソッドを介して渡されます。

次の表で、評価コンテキストに関する情報にアクセスするために使用できる EvaluationContext インタフェース メソッドについて説明します。

表4-20 EvaluationContext インタフェース メソッド

メソッド

説明

public final int getCalendarType()

日付演算を実行するときに使用するカレンダーのタイプを取得する。

このメソッドは、com.bea.wlpi.evaluator.ExecutionContext インタフェースにより定義されているように、次のいずれかのカレンダー タイプを示す整数値を返す。

public final com.bea.wlpi.server.eventprocessor.EventData getEventData()

現在のイベントのためのデータを取得する。

このメソッドは、現在のイベント データを示す com.bea.wlpi.server.eventprocessor.EventData オブジェクトを返す。

public final com.bea.wlpi.server.common.ExecutionContext getExecutionContext()

式を評価する実行コンテキストを取得する。

このメソッドは、実行コンテキストを示す com.bea.wlpi.server.common.ExecutionContext オブジェクトを返す。実行コンテキストの詳細については、実行コンテキストを参照。

public final java.lang.String getTaskID()

現在のタスクのユーザ ID があれば、それを取得する。

このメソッドは、タスク ID を示す java.lang.String オブジェクトを返す。

public final java.lang.String getUserID()

現在のトップ レベル API 呼び出しを行ったユーザ ID を取得する。

このメソッドは、ユーザ ID を示す java.lang.String オブジェクトを返す。


 

イベント コンテキスト

com.bea.wlpi.server.plugin.EventContext インタフェースは、プラグイン イベントに対して実行時コンテキストとサービスを提供します。このコンテキストは、次のメソッドを介して渡されます。

次の表で、イベント コンテキストに関する情報にアクセスするために使用できる EventContext インタフェース メソッドについて説明します。

表4-21 EventContext インタフェース メソッド

メソッド

説明

public void activateEvent(com.bea.wlpi.server.common.ExecutionContext context, java.lang.String contentType, java.lang.String eventDescriptor, java.lang.String keyValue, java.lang.String condition) throws com.bea.wlpi.common.WorkflowException

デフォルトのイベント アクティブ化を実行する。

Event Processor がこのワークフロー インスタンスまたはテンプレートに送信されるメッセージを受信し、保持しているかどうかを確認する。

メッセージが存在しない場合、イベント ウォッチ レコードがポストされる。メッセージが存在する場合、次の基準を満たしていれば、マッチング イベントが消費され、イベント ノードがトリガされる。

text/xml 以外のコンテンツ タイプを渡す場合、プラグインは、マッチング イベント キー式をイベント キー テーブルに登録しておく必要がある。これは、com.bea.wlpi.server.admin.Admin インタフェースの addEventKey() メソッドを使用することで行える。プラグインは、このコンテンツ タイプとフォーマットの着信データからのキー値を評価するためのプラグイン フィールドも提供する必要がある。プラグイン フィールドの定義方法の詳細については、メッセージ タイプのための実行時コンポーネント クラスの定義を参照。

メソッド パラメータの定義は次のとおり。

public void checkEventKey(java.lang.String contentType, java.lang.String eventDescriptor, java.lang.String keyExpr) throws com.bea.wlpi.common.WorkflowException

適切なイベント キーが存在することを確認する。

このメソッドは、その親である com.bea.wlpi.common.plugin.StartInfo オブジェクトまたは com.bea.wlpi.common.plugin.EventInfo オブジェクトの getFieldInfo() メソッドを呼び出す。このメソッドは、FieldInfo オブジェクトを使用して、適切なイベント キーの存在を確認し、必要であれば、イベント キーの作成または更新を行う。

メソッド パラメータの定義は次のとおり。

keyExpr が null でない場合、メソッドは、イベント・キーが存在しなければ新しいイベント キーを作成し、既存のイベント キーの keyExpr がプラグインにより提供されたものと一致しなければイベント キーを更新する。keyExpr が null であり、マッチング イベント キーが存在しない場合、メソッドは、コード Messages#EVENT_KEY_MISSINGWorkflowException を生成する。このメソッドを呼び出すことができるのは、com.bea.wlpi.server.plugin.PluginStart2 ノードまたは com.bea.wlpi.server.plugin.PluginEvent ノードのみである。

注意: これは負荷の高い呼び出しであるので、プラグインは、その使用を最小限にとどめるように手順を組む必要があります。通常は、静的フラグを維持することにより、イベント キーごとに 1 回だけ呼び出すようにします。

public java.lang.String getNodeId()

イベント ノードまたは開始ノードの ID を取得する。

この ID は、プラグイン アクションに対して非同期的に実行されるコールバックをサポートするために必要となる。この ID は、com.bea.wlpi.server.worklist.Worklist インタフェースの response() メソッドに渡す必要がある。

このメソッドは、アクション ID を示す java.lang.String オブジェクトを返す。

public java.lang.String getTemplateDefinitionID()

ワークフロー テンプレート定義の ID を取得する。

このメソッドは、テンプレート定義 ID を示す java.lang.String オブジェクトを返す。

public java.lang.String getTemplateID()

ワークフロー テンプレートの ID を取得する。

このメソッドは、テンプレート ID を示す java.lang.String オブジェクトを返す。

public void postStartWatch(java.lang.String contentType, java.lang.String eventDescriptor, java.lang.String keyValue, java.lang.String condition)

指定されたメッセージに関する Event Processor ウォッチ レコードを登録する。

注意: このメソッドを呼び出すことができるのは、開始ノードのみです。

text/xml 以外のコンテンツ タイプを渡す場合、プラグインは、マッチング イベント キー式がイベント キー テーブルに登録されていることを確認する必要がある。これは、com.bea.wlpi.server.admin.Admin インタフェースの addEventKey() メソッドを使用することで行える。プラグインは、このコンテンツ タイプとフォーマットの着信データからのキー値を評価するためのプラグイン フィールドも提供する必要がある。プラグイン フィールドの定義方法の詳細については、メッセージ タイプのための実行時コンポーネント クラスの定義を参照。

メソッド パラメータの定義は次のとおり。

public void removeEventWatch(com.bea.wlpi.server.common.ExecutionContext context)

指定されたメッセージに関する Event Processor ウォッチ レコードの登録を解除する。

注意: このメッセージを呼び出せるのはイベント ノードのみです。

メソッド パラメータの定義は次のとおり。

context −呼び出し側により渡される実行コンテキストを示す
com.bea.wlpi.server.common.ExecutionContext オブジェクト。実行コンテキストの詳細については、実行コンテキストを参照。

public void removeStartWatch()

指定されたメッセージに関する Event Processor ウォッチ レコードの登録を解除する。

注意: このメッセージを呼び出せるのは 開始ノードのみです。


 

実行コンテキスト

com.bea.wlpi.server.common.ExecutionContext インタフェースは、実行中のワークフロー インスタンスのための実行時コンテキストとサービスを提供します。このコンテキストは、次のメソッドを介して渡されます。

次の表で、アクション コンテキストに関する情報にアクセスするために使用できる ExecutionContext インタフェース メソッドについて説明します。

表4-22 ExecutionContext インタフェース メソッド

メソッド

説明

public void addClientResponse(java.lang.String xml)

API メソッド戻り値に XML ドキュメントを付加する。

メソッド パラメータの定義は次のとおり。

xml −付加するXML ドキュメントを示す
java.lang.String オブジェクト。

public java.lang.String getErrorHandler() throws com.bea.wlpi.common.WorkflowException

現在のエラー ハンドラの名前を取得する。

このメソッドは、現在のエラー ハンドラを示す java.lang.String オブジェクトを返す。

public com.bea.wlpi.server.eventprocessor.EventData getEventData()

現在のイベントと関連付けられたデータがあれば、それを取得する。

このメソッドは、イベント データを示す com.bea.wlpi.server.eventprocessor.EventData オブジェクト、またはシステム イベント ハンドラを示す空の文字列を返す。

public int getExceptionNumber()

イベント ハンドラにより処理されるエラーのメッセージ番号を取得する。

このメソッドは、メッセージ番号を示す整数値を返す。

public java.lang.Exception getExceptionObject()

イベント ハンドラにより処理される例外オブジェクトを取得する。

このメソッドは、例外オブジェクトを示す java.lang.Exception オブジェクトを返す。

public int getExceptionSeverity()

イベント ハンドラにより処理されるエラーの例外重大度コードを取得する。

このメソッドは、次のいずれかの com.bea.wlpi.common.WorkflowException 重大度コードを示す整数値を返す。

public java.lang.String getExceptionText()

イベント ハンドラにより処理される例外のメッセージ テキストを取得する。

このメソッドは、メッセージ テキストを示す java.lang.String オブジェクトを返す。

public java.lang.String getExceptionType()

イベント ハンドラにより処理される例外のメッセージ タイプを取得する。

このメソッドは、メッセージ タイプを示す java.lang.String オブジェクトを返す。

public java.lang.String getInstanceID()

現在のワークフロー インスタンスの ID を取得する。

このメソッドは、ID を示す java.lang.String オブジェクトを返す。

public java.lang.String getOrg() throws com.bea.wlpi.common.WorkflowException

現在のインスタンスが実行されているオーガニゼーションの ID を取得する。

このメソッドは、オーガニゼーションの ID を示す java.lang.String オブジェクトを返す。

public java.lang.Object getPluginInstanceData(java.lang.String pluginName) throws com.bea.wlpi.common.WorkflowException

名前付きプラグインにより提供されるワークフロー インスタンス データを取得する。

メソッド パラメータの定義は次のとおり。

pluginName −プラグイン名を示す
java.lang.String オブジェクト。

このメソッドは、プラグイン インスタンス データを示す java.lang.Object オブジェクトを返す。

public java.lang.String getRequestor()

現在の API 要求を行ったユーザの ID を取得する。

このメソッドは、要求者の ID を示す java.lang.String オブジェクトを返す。

public boolean getRollbackOnly()

現在のユーザ トランザクションがロールバック専用としてマークされているかどうかを調べる。

このメソッドは、トランザクションがロールバック専用として設定されている場合は true を、そうでない場合は false を返す。

public java.lang.String getTemplateDefinitionID()

現在のテンプレート定義の ID を取得する。

このメソッドは、テンプレート定義 ID を示す java.lang.String オブジェクトを返す。

public com.bea.wlpi.common.plugin.PluginObject getTemplateDefintionPluginData(java.lang.String pluginName)

指定されたプラグインに関するテンプレート定義データを取得する。

メソッド パラメータの定義は次のとおり。

pluginName −プラグイン名を示す
java.lang.String オブジェクト。

このメソッドは、テンプレート定義データを示す com.bea.wlpi.common.plugin.PluginObject オブジェクトを返す。

public java.lang.String getTemplateID()

現在のテンプレートの ID を取得する。

このメソッドは、テンプレート ID を示す java.lang.String オブジェクトを返す。

public com.bea.wlpi.common.plugin.PluginObject getTemplatePluginData(java.lang.String pluginName)

指定されたプラグインに関するテンプレート データを取得する。

メソッド パラメータの定義は次のとおり。

pluginName −プラグイン名を示す
java.lang.String オブジェクト。

このメソッドは、テンプレート データを示す com.bea.wlpi.common.plugin.PluginObject オブジェクトを返す。

public com.bea.wlpi.common.VariableInfo getVariableInfo(java.lang.String name)

指定されたプラグイン変数に関する情報を取得する。

メソッド パラメータの定義は次のとおり。

name −
変数名を示す
java.lang.String オブジェクト。

このメソッドは、変数情報を示す com.bea.wlpi.common.VariableInfo オブジェクトを返す。

public java.lang.Object getVariableValue(java.lang.String name) throws com.bea.wlpi.common.WorkflowException

指定されたプラグイン変数に関する変数値を取得する。

メソッド パラメータの定義は次のとおり。

name −
変数名を示す
java.lang.String オブジェクト。

このメソッドは、変数情報を示す java.lang.Object オブジェクトを返す。

BPM クライアント アプリケーション プログラミング ガイド』の「実行時の変数のモニタリング」に説明されているように、com.bea.wlpi.server.admin.Admin インタフェースの getInstanceVariable() メソッドも参照。

public java.lang.String instantiate(java.lang.String orgID, java.lang.String initialNode, java.lang.String parentTemplateDefinitionID, java.lang.String parentID, java.lang.String parentNodeID, com.bea.wlpi.server.eventprocessor.EventData eventData, java.util.List lVariableValues, java.util.Map pluginData) throws com.bea.wlpi.common.WorkflowException

新しいワークフロー インスタンスを作成する。

メソッド パラメータの定義は次のとおり。

このメソッドは、新しいワークフロー インスタンスの ID を示す java.lang.String オブジェクトを返す。

BPM クライアント アプリケーション プログラミング ガイド』の「手動によるワークフローの開始」に説明されているように、com.bea.wlpi.server.worklist.Worklist インタフェースの instantiateWorkflow() メソッドも参照。

public int invokeErrorHandler(java.lang.String handlerName, java.lang.Exception e)

指定されたイベント ハンドラを呼び出す。

メソッド パラメータの定義は次のとおり。

このメソッドは、呼び出しのステータスを示す整数値を返す。

public boolean isAuditEnabled()

現在のワークフローに対して監査が有効かどうかを調べる。

このメソッドは、監査が有効な場合は true を、そうでない場合は false を返す。

public void setErrorHandler(java.lang.String handlerName) throws com.bea.wlpi.common.WorkflowException

現在のイベント ハンドラを設定する。

メソッド パラメータの定義は次のとおり。

handlerName −設定するイベント ハンドラの名前、null(前のイベント ハンドラを復元する場合)、または空の文字列(システム イベント ハンドラに設定する場合)のいずれかを示す
java.lang.String オブジェクト。

public void setPluginInstanceData(java.lang.String pluginName, java.lang.Object data) throws com.bea.wlpi.common.WorkflowException

指定されたプラグインに関するワークフロー インスタンス データを設定する。

メソッド パラメータの定義は次のとおり。

BPM クライアント アプリケーション プログラミング ガイド』の「実行時の変数のモニタリング」に説明されているように、com.bea.wlpi.server.admin.Admin インタフェースの setInstanceVariable() メソッドも参照。

public void setRollbackOnly()

ユーザ トランザクションをロールバック専用として設定する。

public void setVariableValue(java.lang.String name, java.lang.Object value) throws com.bea.wlpi.common.WorkflowException

変数の値を設定する。

メソッド パラメータの定義は次のとおり。

BPM クライアント アプリケーション プログラミング ガイド』の「実行時の変数のモニタリング」に説明されているように、com.bea.wlpi.server.admin.Admin インタフェースの setInstanceVariable() メソッドも参照。

public java.lang.String taskAssign(java.lang.String instanceID, java.lang.String taskID, java.lang.String assigneeID, boolean bRole, boolean bLoadBalance) throws com.bea.wlpi.common.WorkflowException

参加コンポーネントにワークフロー タスクを割り当てる。

メソッド パラメータの定義は次のとおり。

このメソッドは、『BPM クライアント アプリケーション プログラミング ガイド』の「DTD フォーマット」に説明されているように、クライアント要求 DTD である ClientReq.dtd に準拠する XML ドキュメントを返す。この XML ドキュメントには、インスタンス ID やテンプレート定義 ID など、実行中のインスタンスについての情報が入っている。この情報には、SAX (Simple API for XML) パーサなどの XML パーサを使用してドキュメントを解析することによってアクセスできる。

BPM クライアント アプリケーション プログラミング ガイド』の「実行時タスクの管理」に説明されているように、com.bea.wlpi.server.worklist.Worklist インタフェースの taskAssign() メソッドも参照。

public java.lang.String taskDoIt(java.lang.String instanceID, java.lang.String taskID) throws com.bea.wlpi.common.WorkflowException

ワークフロー タスクを実行する。

メソッド パラメータの定義は次のとおり。

このメソッドは、『BPM クライアント アプリケーション プログラミング ガイド』の「DTD フォーマット」に説明されているように、クライアント要求 DTD である ClientReq.dtd に準拠する XML ドキュメントを返す。この XML ドキュメントには、インスタンス ID やテンプレート定義 ID など、実行中のインスタンスについての情報が入っている。この情報には、SAX (Simple API for XML) パーサなどの XML パーサを使用してドキュメントを解析することによってアクセスできる。

BPM クライアント アプリケーション プログラミング ガイド』の「実行時タスクの管理」に説明されているように、com.bea.wlpi.server.worklist.Worklist インタフェースの taskExecute() メソッドも参照。

public java.lang.String taskMarkDone(java.lang.String instanceID, java.lang.String taskID) throws com.bea.wlpi.common.WorkflowException

ワークフロー タスクを完了してマークする。

メソッド パラメータの定義は次のとおり。

このメソッドは、『BPM クライアント アプリケーション プログラミング ガイド』の「DTD フォーマット」に説明されているように、クライアント要求 DTD である ClientReq.dtd に準拠する XML ドキュメントを返す。この XML ドキュメントには、インスタンス ID やテンプレート定義 ID など、実行中のインスタンスについての情報が入っている。この情報には、SAX (Simple API for XML) パーサなどの XML パーサを使用してドキュメントを解析することによってアクセスできる。

BPM クライアント アプリケーション プログラミング ガイド』の「実行時タスクの管理」に説明されているように、com.bea.wlpi.server.worklist.Worklist インタフェースの taskMarkDone() メソッドも参照。

public java.lang.String taskSetProperties(java.lang.String instanceID, java.lang.String taskID, int priority, boolean doneWithoutExecute, boolean executeIfDone, boolean unmarkDone, boolean modifiable, boolean reassignment) throws com.bea.wlpi.common.WorkflowException

ワークフロー タスクのプロパティを設定する。

メソッド パラメータの定義は次のとおり。

このメソッドは、『BPM クライアント アプリケーション プログラミング ガイド』の「DTD フォーマット」に説明されているように、クライアント要求 DTD である ClientReq.dtd に準拠する XML ドキュメントを返す。この XML ドキュメントには、インスタンス ID やテンプレート定義 ID など、実行中のインスタンスについての情報が入っている。この情報には、SAX (Simple API for XML) パーサなどの XML パーサを使用してドキュメントを解析することによってアクセスできる。

BPM クライアント アプリケーション プログラミング ガイド』の「実行時タスクの管理」に説明されているように、com.bea.wlpi.server.worklist.Worklist インタフェースの taskSetProperties() メソッドも参照。

public java.lang.String taskUnassign(java.lang.String instanceID, java.lang.String taskID) throws com.bea.wlpi.common.WorkflowException

ワークフロー タスクの割り当てを解除する。

メソッド パラメータの定義は次のとおり。

このメソッドは、『BPM クライアント アプリケーション プログラミング ガイド』の「DTD フォーマット」に説明されているように、クライアント要求 DTD である ClientReq.dtd に準拠する XML ドキュメントを返す。この XML ドキュメントには、インスタンス ID やテンプレート定義 ID など、実行中のインスタンスについての情報が入っている。この情報には、SAX (Simple API for XML) パーサなどの XML パーサを使用してドキュメントを解析することによってアクセスできる。

BPM クライアント アプリケーション プログラミング ガイド』の「実行時タスクの管理」に説明されているように、com.bea.wlpi.server.worklist.Worklist インタフェースの taskUnassign() メソッドも参照。

public java.lang.String taskUnmarkDone(java.lang.String instanceID, java.lang.String taskID) throws com.bea.wlpi.common.WorkflowException

ワークフロー タスクを未完了としてマークする。

メソッド パラメータの定義は次のとおり。

このメソッドは、『BPM クライアント アプリケーション プログラミング ガイド』の「DTD フォーマット」に説明されているように、クライアント要求 DTD である ClientReq.dtd に準拠する XML ドキュメントを返す。この XML ドキュメントには、インスタンス ID やテンプレート定義 ID など、実行中のインスタンスについての情報が入っている。この情報には、SAX (Simple API for XML) パーサなどの XML パーサを使用してドキュメントを解析することによってアクセスできる。

BPM クライアント アプリケーション プログラミング ガイド』の「実行時タスクの管理」に説明されているように、com.bea.wlpi.server.worklist.Worklist インタフェースの taskUnmarkdone() メソッドも参照。


 

詳細については、com.bea.wlpi.server.common.ExecutionContext Javadoc を参照してください。

PluginPanelContext

com.bea.wlpi.common.plugin.PluginPanelContext インタフェースは、設計クライアント(Studio など)のために次のような実行時コンテキストとサービスを提供します。

注意: すべてのメソッドを、すべてのダイアログ ボックス コンテキストで使用できるとは限りません。プラグインが無効なコンテキストでメソッドを呼び出した場合、java.lang.UnsupportedOperationException 例外が発生します。

プラグイン パネル コンテキストには、PluginPanel クラス メソッドの表に定義されている com.bea.wlpi.common.plugin.PluginPanel の get メソッドと set メソッドを使用してアクセスできます。

次の表で、アクション コンテキストに関する情報にアクセスするために使用できる PluginPanelContext インタフェース メソッドについて説明します。

表4-23 PluginPanelContext インタフェース メソッド

メソッド

説明

public int checkEventKey(java.lang.String contentType, java.lang.String keyExpr, boolean update) throws com.bea.wlpi.common.WorkflowException

適切なイベント キーが存在することを確認する。

このメソッドは、親である com.bea.wlpi.common.plugin.PluginTriggerPanel オブジェクトの eventDescriptor メソッド、または親である com.bea.wlpi.common.plugin.StartInfo オブジェクトまたは com.bea.wlpi.common.plugin.EventInfo オブジェクトの getFieldInfo() メソッドを呼び出す。このメソッドは、戻り値を使用して、適切なイベント キーの存在を確認し、必要であればイベント キーを作成する。

メソッド パラメータの定義は次のとおり。

update が true であり、keyExpr が null の場合、ユーザは値を提供するように求められる。そうでない場合、メソッドは新しいイベント キーを作成し、それが有効になったことを示す通知を表示する。

イベント キーがすでに存在するが、keyExpr がプラグインにより提供された null でない keyExpr と一致しない場合、メソッドはそのイベント キーを更新し、そのことをユーザに通知する。

注意: このメソッドに対する呼び出しは、PluginTriggerPanel が表示されている間に限り有効です。

このメソッドは、次のいずれかの値を返す。

public com.bea.wlpi.common.VariableInfo checkVariable(java.lang.String name, java.lang.String[] validTypes) throws com.bea.wlpi.common.WorkflowException

変数が存在するかどうかを調べる。変数が存在しない場合、このメソッドは [変数を追加] ダイアログ ボックスを呼び出して、呼び出し側により指定される有効なタイプの新しいワークフロー変数をユーザが作成できるようにする。

メソッド パラメータの定義は次のとおり。

このメソッドは、既存の変数情報または新しい変数情報を示す com.bea.wlpi.common.VariableInfo オブジェクト、または null を返す。

public java.util.Set getEventDescriptors()

既存のイベント キーにより参照されるイベント記述子の設定を取得する。

このメソッドは、指定されたコンテンツ タイプに関して現在定義されているイベント記述子文字列のセットで構成される java.util.Set オブジェクトを返す。このメソッドは、リストとボックスを表示することを目的としている。

public javax.naming.Context getInitialContext()

設計クライアントの JNDI コンテキストを取得する。

このメソッドは、JNDI コンテキストを示す javax.naming.Context オブジェクトを返す。このコンテキストには、設計クライアントにより使用されるものと同じセキュリティ コンテキストが入っている。

注意: 呼び出し側はこのコンテキストを閉じてはなりません。

public com.bea.wlpi.common.PluginData getPluginTemplateData(java.lang.String pluginName)

指定されたテンプレートと関連付けられたテンプレートに関するプラグイン データを取得する。

メソッド パラメータの定義は次のとおり。

pluginName −プラグイン名を示す
java.lang.String オブジェクト。

このメソッドは、プラグイン テンプレートを示す com.bea.wlpi.common.plugin.PluginData オブジェクトを返す。

public com.bea.wlpi.common.PluginData getPluginTemplateDefinitionData(java.lang.String pluginName)

指定されたテンプレートと関連付けられたテンプレート定義に関するプラグイン データを取得する。

メソッド パラメータの定義は次のとおり。

pluginName −
プラグイン名を示す
java.lang.String オブジェクト。

このメソッドは、プラグイン テンプレート定義を示す com.bea.wlpi.common.plugin.PluginData オブジェクトを返す。

public int getTemplateDefinitionID()

テンプレート定義のオーナの ID を取得する。

このメソッドは、テンプレート定義 ID を示す java.lang.String オブジェクトを返す。

public int getTemplateID()

テンプレートのオーナの ID を取得する。

このメソッドは、テンプレート ID を示す java.lang.String オブジェクトを返す。

public java.util.List getVariableList()

変数とそのタイプのリストを取得する。

このメソッドは、変数を記述する com.bea.wlpi.common.VariableInfo オブジェクトのリストの入った java.util.List オブジェクトを返す。

public java.util.List getVariableList(java.lang.String type)

指定したタイプの変数のリストを取得する。

このメソッドは、指定したタイプの変数を記述する com.bea.wlpi.common.VariableInfo オブジェクトのリストの入った java.util.List オブジェクトを返す。

public com.bea.wlpi.common.VariableInfo invokeAddVariableDialog() throws com.bea.wlpi.common.WorkflowException

ユーザが新しいワークフロー変数を定義できるように、[変数を追加] ダイアログ ボックスを呼び出す。

このメソッドは、新しい変数情報を示す com.bea.wlpi.common.VariableInfo オブジェクト、または null を返す。null は、変数を作成するための [OK] ボタンが選択されなかったことを示す。

public com.bea.wlpi.common.VariableInfo invokeAddVariableDialog(java.lang.String name, java.lang.String[] validTypes) throws com.bea.wlpi.common.WorkflowException

ユーザが呼び出し側により指定された有効なタイプの新しいワークフロー変数を定義できるように、[変数を追加] ダイアログ ボックスを呼び出す。

メソッド パラメータの定義は次のとおり。

このメソッドは、新しい変数情報を示す com.bea.wlpi.common.VariableInfo オブジェクト、または null を返す。null は、変数を作成するための [OK] ボタンが選択されなかったことを示す。

public void invokeExpressionBuilder(javax.swing.text.JTextComponent txtInput, boolean condition, com.bea.wlpi.common.plugin.FieldInfo fieldInfo, java.lang.String[] fields, java.lang.String eventDescriptor)

[Expression Builder] ダイアログ ボックスを呼び出す。

現在の式は、javax.swing.text.JTextComponent オブジェクト、または関連付けられたサブクラスに表示する必要があり、クライアントはこのテキスト コンポーネントから Expression Builder を初期化する。

ユーザが [Expression Builder] ダイアログ ボックスで [OK] ボタンを選択すると、クライアントは式を検証し、ダイアログ ボックスを閉じ、修正された式によりテキスト コンポーネントを更新する。

メソッド パラメータの定義は次のとおり。

public boolean isVariableInExpression(java.lang.String expr, java.lang.String var) throws com.bea.wlpi.evaluator.EvaluatorExpression

指定した変数を式が参照するかどうかを調べる。

メソッド パラメータの定義は次のとおり。

このメソッドは、変数が参照されている場合は true を、そうでない場合は false を返す。

public java.lang.String renameVariableInExpression(java.lang.String expr, java.lang.String oldName, java.lang.String newName) throws com.bea.wlpi.evaluator.EvaluatorExpression

名前が変更された変数への式の参照を更新する。

メソッド パラメータの定義は次のとおり。

このメソッドは、更新された式テキストを示す java.lang.String オブジェクトを返す。

public java.lang.String validateExpression(java.lang.String expression, boolean allowVariables, com.bea.wlpi.common.plugin.FieldInfo fieldInfo, java.lang.String eventDescriptor) throws com.bea.wlpi.evaluator.EvaluatorExpression

名前が変更された変数への式の参照を更新する。

メソッド パラメータの定義は次のとおり。

このメソッドは、更新された式テキストを示す java.lang.String オブジェクトを返す。


 

詳細については、com.bea.wlpi.server.plugin.PluginPanelContext Javadoc を参照してください。

 


プラグイン コンポーネント値オブジェクトの定義

最後の手順として、さらにコンポーネント データを定義するため、プラグイン コンポーネントの値オブジェクトを定義します。プラグイン コンポーネント値オブジェクトを定義するには、関連付けられているコンストラクタを使用します。プラグイン値オブジェクトの表に記載されているプラグイン値オブジェクトは、それぞれ、オブジェクト データを作成する 1 つまたは複数のコンストラクタを提供します。値オブジェクトを作成するためのコンストラクタの詳細については、B-1 ページの「プラグイン値オブジェクトのまとめ」を参照してください。

リモート インタフェース プラグイン情報メソッドの表の getPluginCapabilities() メソッドの説明で定義されているように、com.bea.wlpi.common.plugin.PluginCapabilitiesInfo オブジェクトを定義する場合、プラグイン コンポーネントのそれぞれについてプラグイン値オブジェクトを渡す必要があります。

プラグイン サンプルから抜粋した次のコード リストは、getPluginCapabilitiesInfo() メソッドを実装する方法を示しています。この抜粋は、SAMPLES_HOME/integration/samples/bpm_api/plugin/src/com/bea/wlpi/tour/po/plugin ディレクトリの SamplePluginBean.java ファイルから取り出したものです。重要なコード行は、太字で示します。

コード リスト 4-24 getPluginCapabilitiesInfo() メソッドの実装

    public PluginCapabilitiesInfo getPluginCapabilitiesInfo(Locale lc,
CategoryInfo[] info) {

PluginInfo pi;
FieldInfo orderFieldInfo;
FieldInfo confirmFieldInfo;
FieldInfo[] fieldInfo;
FunctionInfo fi;
FunctionInfo[] functionInfo;
StartInfo si;
StartInfo[] startInfo;
EventInfo ei;
EventInfo[] eventInfo;
SampleBundle bundle = new SampleBundle(lc);

log("getPluginCapabilities called");

pi = createPluginInfo(lc);
orderFieldInfo =
new FieldInfo(SamplePluginConstants.PLUGIN_NAME, 3,
bundle.getString("orderFieldName"),
bundle.getString("orderFieldDesc"),
SamplePluginConstants.ORDER_FIELD_CLASSES, false);
confirmFieldInfo =
new FieldInfo(SamplePluginConstants.PLUGIN_NAME, 4,
bundle.getString("confirmFieldName"),
bundle.getString("confirmFieldDesc"),
SamplePluginConstants.CONFIRM_FIELD_CLASSES, false);
fieldInfo = new FieldInfo[]{ orderFieldInfo, confirmFieldInfo };
ei = new EventInfo(SamplePluginConstants.PLUGIN_NAME, 6,
bundle.getString("confirmOrderName"),
bundle.getString("confirmOrderDesc"), ICON_BYTE_ARRAY,
SamplePluginConstants.EVENT_CLASSES,
confirmFieldInfo);
eventInfo = new EventInfo[]{ ei };
fi = new FunctionInfo(SamplePluginConstants.PLUGIN_NAME, 7,
bundle.getString("calcTotalName"),
bundle.getString("calcTotalDesc"),
bundle.getString("calcTotalHint"),
SamplePluginConstants.FUNCTION_CLASSES, 3, 3);
functionInfo = new FunctionInfo[]{ fi };
si = new StartInfo(SamplePluginConstants.PLUGIN_NAME, 5,
bundle.getString("startOrderName"),
bundle.getString("startOrderDesc"), ICICON_BYTE_ARRAYON,
SamplePluginConstants.START_CLASSES, orderFieldInfo);
startInfo = new StartInfo[]{ si };

PluginCapabilitiesInfo pci = new PluginCapabilitiesInfo(pi,
getCategoryInfo(bundle), eventInfo,
fieldInfo, functionInfo, startInfo,
null, null, null, null, null);

return pci;
}

 

ページの先頭 前 次