Business Process Choreographer Explorer CommandBar コンポーネントを使用して、ボタンを含むバーを表示します。これらのボタンは、オブジェクトの詳細ビューまたはリスト内の選択されたオブジェクトで作動するコマンドを表します。
bpe:commandbar タグを <h:form> タグに追加します。 bpe:commandbar タグには、モデル属性が含まれていなければなりません。
以下の例では、CommandBar コンポーネントを追加して、タスク・インスタンスのプロパティーのいくつかを表示する方法を示します。
<h:form> <bpe:commandbar model="#{TaskInstanceList}"> <bpe:command commandID="Refresh" > action="#{TaskInstanceList.refreshList}" label="Refresh"/> <bpe:command commandID="MyClaimCommand" > label="Claim" > commandClass="<customcode>"/> </bpe:commandbar> </h:form>
model 属性は、管理対象 Bean を参照します。 この Bean は、ItemProvider インターフェースをインプリメントし、選択された Java™ オブジェクトを提供する必要があります。CommandBar コンポーネントは、通常、同一の JSP ファイル内の List コンポーネントまたは Details コンポーネントのいずれかと共に使用されます。一般に、タグで指定されたモデルは、同一ページの List コンポーネントまたは Details コンポーネントで指定されたモデルと同じです。そのため、例えば List コンポーネントの場合、コマンドはリスト内の選択された項目に対して作動します。
この例では、 model 属性は TaskInstanceList 管理対象 Bean を参照します。 この Bean は、Java オブジェクトのプロパティーを提供しており、ItemProvider インターフェースをインプリメントしなければなりません。 このインターフェースは、BPCListHandler クラスおよび BPCDetailsHandler クラスによってインプリメントされます。また、カスタム要求コマンドも含まれています。
CommandBar モデル属性が、例えばリスト・ハンドラーまたは詳細ハンドラー用に既に構成済みの管理対象 Bean を参照する場合、それ以上の構成は必要ありません。 これらのハンドラーのいずれかの構成を変更した場合、または異なる管理対象 Bean を使用した場合は、ItemProvider インターフェースをインプリメントする管理対象 Bean を JSF 構成ファイルに追加してください。
以下のコード断片は、コマンド・バーを拡張するコマンド・クラスの作成方法を示します。このコマンド・クラス (MyClaimCommand) は、JSP ファイル内の bpe:command タグで参照されます。
このコマンドは、正しい数の項目が選択されていることなどの前提条件を検査します。次に、ヒューマン・タスク API の HumanTaskManagerService への参照を検索します。コマンドは、選択されたオブジェクトに対して操作を繰り返し、それらの処理を試みます。HumanTaskManagerService API を通じて、ID によってタスクが要求されます。例外が発生しなければ、対応する TaskInstanceBean オブジェクトの状態が更新されます。このアクションでは、オブジェクトの値を再度サーバーから検索することが避けられます。
public class MyClaimCommand implements Command { public String execute(List selectedObjects) throws ClientException { if( selectedObjects != null && selectedObjects.size() > 0 ) { try { // Determine HumanTaskManagerService from an HTMConnection bean. // Configure the bean in the faces-config.xml for easy access // in the JSF application. FacesContext ctx = FacesContext.getCurrentInstance(); ValueBinding vb = ctx.getApplication().createValueBinding("{htmConnection}"); HTMConnection htmConnection = (HTMConnection) htmVB.getValue(ctx); HumanTaskManagerService htm = htmConnection.getHumanTaskManagerService(); Iterator iter = selectedObjects.iterator() ; while( iter.hasNext() ) { try { TaskInstanceBean task = (TaskInstanceBean) iter.next() ; TKIID tiid = task.getID() ; htm.claim( tiid ) ; task.setState( new Integer(TaskInstanceBean.STATE_CLAIMED ) ) ; } catch( Exception e ) { ; // Error while iterating or claiming task instance. // Ignore for better understanding of the sample. } } } catch( Exception e ) { ; // Configuration or communication error. // Ignore for better understanding of the sample } } return null; } // Default implementations public boolean isMultiSelectEnabled() { return false; } public boolean[] isApplicable(List itemsOnList) {return null; } public void setContext(Object targetModel) {; // Not used here } }