|
ワークフローガイド |
この章では、自動アクティビティのJavaクラスを作成する方法と、アクティビティおよびリンクのランタイム動作をカスタマイズする方法について説明します。 この章は、次の節から構成されています。
自動アクティビティは、プロセス内での不在タスク/ステップを表します。 ワークフローデザイナでは、自動アクティビティノードを作成し、このタスクのエンジンとキューを設定するプロパティを指定できます。 詳細については、 同期化マージアクティビティを参照してください。
アクティビティの論理を実行するJavaクラスを生成するには、Activityウィザードを使用します。 生成された自動アクティビティクラスは、ランタイム時にのみ使用されます。 設計時クラスは生成されません。
ウィザードによって、自動アクティビティスタブクラスが生成されます。
生成されたクラスは、EbiActivityインタフェースを実装します。 このインタフェースは、ワークフローデザイナでアクティビティプロパティを編集する場合に選択する自動アクティビティクラスをワークフローデザイナで検出する方法です。
public void invoke() public void timeout(int retries) public void restart() public void terminate()
このメソッドは、自動アクティビティのワークフローキューで作業が表示される場合に呼び出されます。 キューから作業を要求することは、自動アクティビティの責任です。 これは、キュー委任インタフェースを使用して実行されます。 ワークアイテムは、変更する前にロックされている必要があります。 すべての変更を行ったら、次のアクティビティに作業を転送します。
詳細については、『APIリファレンス』のEbiQueueDelegateおよびEbiWorkitem Delegateを参照してください。
public void invoke(){
try
{
//Get the queue delegate for requesting work
EbiQueueDelegate queueDelegate = EboFactory.getQueueDelegate();
//Get the next workitem
EbiWorkitemDelegate workitemDelegate =
queueDelegate.getNextWorkitem(this.getClass().getName());
//lock workitem
workitemDelegate.lockDocument("Document1",
this.getClass().getName());
//Do the logic for the activity, for example..
EbiProperty prop = (EbiProperty) new EboProperty("Document1",
"DocProp1", "Hello world!", EbiProperty.TYPE_STRING, false);
workitemDelegate.setDocumentProperty(prop, this.getClass().getName());
//Forward to next workitem -- this automatically unlocks it
queueDelegate.forward(workitemDelegate2);
}
catch (Exception e)
{
e.printStackTrace();
}
}
このメソッドは、作業を実行するためのアクションを再開するよう、自動アクティビティに通知します。 通常、これは、invokeメソッドで行われるものと同じアクションになりますが、追加のアクションが含まれる場合もあります。
このメソッドは、タイムアウトが発生したことを自動アクティビティに通知し、int引数は、再試行の回数(タイムアウトの後でアクティビティがアクティブな状態を保つことのできる回数)を表します。 カウントがゼロの場合、自動アクティビティでは、この偶発性に対して開発者が指示したアクションを実行します。 この時点では、ワークフローシステムによって強制される特定のアクションはありません。
このメソッドは、この偶発性に対して開発者が指示した適切なアクションに従うよう、自動アクティビティに通知します。 restart()メソッドの場合と同様に、ワークフローサブシステムでは、特定のアクションを強制しません。
カスタムアクティビティでは、作業を実行させるためにワークアイテムがワークフローキューに送信される前に、カスタマイズしたランタイム動作を追加できます。また、作業が実行された後でも、カスタマイズした動作を追加できます。 onPreprocess()およびonPostprocess()という2つのメソッドは、それぞれワークアイテム処理前と処理後を表しています。
カスタムアクティビティのクラステンプレートを作成するには、Custom Activityウィザード( カスタムアクティビティのJavaクラスを生成するの説明を参照)を使用します。 生成されたクラスは、EboProcessNodeを拡張します(次を参照)。
import com.sssw.wf.activity.*;
import com.sssw.wf.api.*;
import com.sssw.wf.message.EbiDispatch;
import com.sssw.wf.exception.*;
import com.sssw.wf.core.*;
import com.sssw.wf.client.EboFactory;
import com.sssw.wf.client.EbiQueueDelegate;
import com.sssw.wf.client.EbiWorkitemDelegate;
import org.w3c.dom.*;
/**
This class is a sample runtime activity.
*/
public class UntitledActivity1 extends EboProcessNode {
public UntitledActivity1() {
}
}
カスタムポストプロセスアクションの形式を示す例は、次のとおりです。
/**
This class is a sample runtime activity.
*/
public class UntitledActivity1 extends EboProcessNode {
public UntitledActivity1() {
}
public void onPostprocess (EbiDispatch dispatch) throws
EboActivityException
{
EbiWorkitem wi = dispatch.getMessage().getWorkitem();
//Logic goes here
}
}
dispatch引数は、getMessage()呼び出しを使用して、ワークアイテムに対して照会できます。 その後、ワークアイテムは、EbiWorkitemDelegateから、プロパティまたはドキュメント、あるいはその両方に対して照会できます。
同様に、ワークフローキューにワークアイテムが送信される前にカスタムアクションのカスタムアクティビティで使用可能なメソッドは、次のとおりです。
public void OnPreprocess (EbiDispatch dispatch) throws EboActivityException
使用方法は、前に説明したOnPostprocess()メソッドの場合と同じです。
カスタムリンクは、リンクパスのセットが選択される方法を完全に制御します。 カスタムリンクのクラステンプレートを作成するには、リンクウィザード(次を参照)を使用します。 生成されたクラスは、EbiLinkを実装します。 カスタムリンクコードでは、EbiLink.getDestinations()を実装することによって、ワークアイテムリンクプロパティにアクセスできます。
|
パネル項目 |
説明 |
|---|---|
|
Class name |
Javaクラスファイルの名前 |
|
Package |
(オプション)クラスのパッケージ名 |
|
Resource Set |
ランタイム配備クラスを保存するためのリソースセット |
|
Include logging code |
生成されたテンプレートにログ出力コードを含める |
ウィザードパネルを完了します。
結果のコードテンプレートは、次のようになります。
import java.util.List;
import com.sssw.wf.core.EbiWorkitem;
import com.sssw.wf.api.EbiLink;
import com.sssw.wf.exception.EboLinkException;
/**
* UntitledLink1
*/
public class UntitledLink1 implements EbiLink {
public UntitledLink1() {
}
public List getDestinations(EbiWorkitem workitem) throws
EboLinkException {
// This method should return a List of objects of type EbiDestination
return null;
}
}
getDestinations()は、リンクに対して使用可能なすべてのワークアイテムのリストを返します。 ワークアイテムは、取得後、プロパティ値に対して照会できます。
public List getDestinations(EbiWorkitem workitem) throws EboLinkException
{
List dests = (List) new Vector();
// call Ebolink.getDestinations()to get ALL available destinations
List availDests = getDestinations();
Iterator destIt = dests.iterator();
while(destIt.hasNext())
{
EbiDestination d = destIt.next();
/*
Get link properties and do logic ...
*/
}
return dests;
}
ほとんどの場合、プロパティは、リンクパスが選択されるコンテキストを提供します。 アクティビティによってプロパティが設定され、リンクによってプロパティが読み込まれるというのが、ワークフローサブシステムのパターンです。 カスタムリンクプロパティがワークフローデザイナで定義されている場合は、次のメソッドを呼び出すことができます。
protected NodeList getProperties ()
次に、特定の項目にアクセスするために、リストを解析します。 返されたプロパティの要素スキーマは、次のとおりです。
<!ELEMENT property EMPTY> <!ATTLIST property name CDATA #REQUIRED type (int | double | long | boolean | timestamp | string) #REQUIRED value CDATA #IMPLIED immutable (true | false) #IMPLIED >
|
ワークフローガイド |
Copyright © 1997, 1998, 1999, 2000, 2001, 2002, 2003 SilverStream Software, LLC, a wholly owned subsidiary of Novell, Inc. All rights reserved.