使用业务流程编排器资源管理器的“命令栏”组件来显示带有按钮的栏。这些按钮代表作用于对象详细视图或列表中的所选对象的命令。
在 <h:form> 标记中添加 bpe:commandbar 标记。bpe:commandbar 标记必须包含 model 属性。
以下示例说明如何添加“命令栏”组件以显示任务实例的某些属性。
<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™ 对象。“命令栏”组件通常与同一个 JSP 文件中的“列表”组件或“详细信息”组件配合使用。通常,该标记中指定的 model 与同一页面中的“列表”组件或“详细信息”组件中指定的 model 相同。因此,对于“列表”组件,命令将对该列表中的所选项执行操作。
在本示例中,model 属性引用了名为 TaskInstanceList 的受管 Bean。这个 Bean 提供了 Java 对象的属性,它必须实现 ItemProvider 接口。此接口是由 BPCListHandler 类和 BPCDetailsHandler 类实现的。它还包含一个定制的声明命令。
如果“命令栏”组件的 model 属性引用了已配置的受管 Bean(例如列表或详细信息处理程序的受管 Bean),则不需要进行进一步的配置工作。如果更改了这些处理程序中任何一个的配置,或者使用了另一个受管 Bean,则必须在 JSF 配置文件中添加实现了 ItemProvider 接口的受管 Bean。
以下代码段说明如何编写扩展命令栏的命令类。JSP 文件中的 bpe:command 标记引用了此命令类(MyClaimCommand)。
此命令将检查前置条件以及任何其他先决条件,例如所选项的数目是否正确。然后,它检索对名为 HumanTaskManagerService 的人员任务 API 的引用。此命令对所选对象进行迭代并尝试处理它们。任务是 HumanTaskManagerService API 使用标识声明的。如果未发生异常,就会更新相应 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 } }