使用业务流程编排器资源管理器的“列表”组件来显示客户机模型对象(例如业务流程实例或任务实例)的列表。
在 h:form 标记中添加 bpe:list 标记。bpe:list 标记必须包含 model 属性。在 bpe:list 标记中添加 bpe:column 标记,以添加列表每一行所要显示的对象的属性。
以下示例说明如何添加“列表”组件以显示任务实例。
<h:form> <bpe:list model="#{TaskPool}"> <bpe:column name="name" action="taskInstanceDetails" /> <bpe:column name="state" /> <bpe:column name="kind" /> <bpe:column name="owner" /> <bpe:column name="originator" /> </bpe:list> </h:form>
model 属性引用了名为 TaskPool 的受管 Bean。该受管 Bean 提供了一系列 Java™ 对象,列表将对那些对象执行迭代,然后在各行中显示那些对象。
对于“列表”组件,这个受管 Bean 必须是 com.ibm.bpe.jsf.handler.BPCListHandler 类的实例。
以下示例说明如何在配置文件中添加 TaskPool 受管 Bean。
<managed-bean> <managed-bean-name>TaskPool</managed-bean-name> <managed-bean-class>com.ibm.bpe.jsf.handler.BPCListHandler</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> <managed-property> <property-name>query</property-name> <value>#{TaskPoolQuery}</value> </managed-property> <managed-property> <property-name>type</property-name> <value>com.ibm.task.clientmodel.bean.TaskInstanceBean</value> </managed-property> </managed-bean> <managed-bean> <managed-bean-name>htmConnection</managed-bean-name> <managed-bean-class>com.ibm.task.clientmodel.HTMConnection</managed-bean-class> <managed-bean-scope>application</managed-bean-scope> <managed-property> <property-name>jndiName</property-name> <value>java:comp/env/ejb/LocalHumanTaskManagerEJB</value> </managed-property>
此示例显示 TaskPool 有两个可配置的属性:query 和 type。query 属性值引用了另一个受管 Bean,即 TaskPoolQuery。type 属性值指定了 Bean 类,该类的属性将显示在所显示的列表的列中。相关联的查询实例也可以带有 type 属性。如果指定了 type 属性,则它必须与您对列表处理程序指定的 type 相同。
为了连接到人员任务管理器,TaskPool 受管 Bean 是使用 htmConnection 受管 Bean 实现的。
以下示例说明如何添加 TaskPool 受管 Bean 的定制代码。
public class MyTaskQuery implements Query { public List execute throws ClientException { // Examine the faces-config file for a managed bean "htmConnection". // FacesContext ctx = FacesContext.getCurrentInstance(); Application app = ctx.getApplication(); ValueBinding htmVb = app.createValueBinding("#{htmConnection}"); htmConnection = (HTMConnection) htmVb.getValue(ctx); HumanTaskManagerService taskService = htmConnection.getHumanTaskManagerService(); // Then call the actual query method on the Human Task Manager service. // QueryResultSet queryResult = taskService.query( "DISTINCT TASK.TKIID, TASK.NAME, TASK.KIND, TASK.STATE, TASK.TYPE," + "TASK.STARTED, TASK.ACTIVATED, TASK.DUE, TASK.EXPIRES, TASK.PRIORITY" , "TASK.KIND IN(101,102,105) AND TASK.STATE IN(2) AND WORK_ITEM.REASON IN (1)", null, null, null); List applicationObjects = transformToTaskList ( queryResult ); return applicationObjects ; } private List transformToTaskList(QueryResultSet result) { ArrayList array = null; int entries = result.size(); array = new ArrayList( entries ); // Transforms each row in the QueryResultSet to a task instance beans. for (int i = 0; i < entries; i++) { result.next(); array.add( new TaskInstanceBean( result, connection )); } return array ; } }
TaskPoolQuery Bean 查询 Java 对象的属性。此 Bean 必须实现 com.ibm.bpc.clientcore.Query 接口。当列表处理程序刷新其内容时,它将调用该查询的 execute 方法。此调用将返回 Java 对象列表。getType 方法必须返回那些 Java 对象的类名。