Skip to main content

Task user interface

Introduction

To define the user interface for a task, a .zul file must be located at the ui directory, and the corresponding task tag should be located at ui.xml file.

The user interface must be a ZK .zul page. This zul page must contain a task tag. This custom ZK tag is needed to properly manage the user interface behaviour.

Attributes

The task component extends es.caib.bpm.ui.WorkflowWindow and it has the following custom attributes:

Attribute
Description
canAddAttachmentsa true value enables the user to upload files attached to the process instance
canDeleteAttachmentsa true value enables the user to delete attached files from the process instance
taskread only attribute that exposes current task information
processInstanceread only attribute that exposes current process information
signatureHandlerread only handler responsible for recognized signature generation.
engineread only BPM engine handler

The task component will receive some custom events:

Event
Description
onLoadThe task information has been loaded on the task component
onSaveThe task information is going to be persisted
onPrepareTransition

A transition is going to be performed. The transition name is sent as event data

If the event launches a UserWorkflowException, the transition will be cancelled

onCompleteTransitionA transition is performed. The transition name is sent as event data
onTabSelectedThe task tab has been selected or deselected. The tab id is sent as event data

In order to show or modify task attributes, the task tag is included in a data model context that eases components data binding.

See ZK Data Binding  for details.

Example

Here is a sample zul page used to authorize synchronization servers connection.

<zk xmlns="http://www.zkoss.org/2005/zul"
    xmlns:h="http://www.w3.org/1999/xhtml"
    xmlns:zk="http://www.zkoss.org/2005/zk"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul/zul.xsd">
    <task id="window" width="600px">
        <attribute name="onPrepareTransition">
            item = lb.selectedItem;
            if (item == null || item.value.length() == 0) {
                throw new es.caib.bpm.toolkit.exception.UserWorkflowException("Request must be approved or denied");
            }
        </attribute>
        <grid fixedLayout="true">
            <columns visible="false">
                <column width="180px">Attribute</column>
                <column>Value</column>
            </columns>
            <rows>
                <row>
                    <label value="User" />
                    <hbox width="100%">
                        <!-- Display task's attribute user -->
                        <textbox width="98%"
                            readonly="true" bind="/user" /> 
                    </hbox>
                </row>
                <row>
                    <label value="Name" />
                    <hbox width="100%">
                        <!-- Display task's attribute name -->
                        <textbox width="98%"
                            readonly="true" bind="name" />
                    </hbox>
                </row>
                <row>
                    <label value="Surname" />
                    <hbox width="100%">
                        <!-- Display task's attribute surname -->
                        <textbox width="98%"
                            readonly="true" bind="/surname" />
                    </hbox>
                </row>
                <row>
                    <label value="Server name" />
                    <hbox width="100%">
                        <!-- Display task's attribute hostname -->
                        <textbox width="98%"
                            bind="/hostname" readonly="true" />
                    </hbox>
                </row> <row>
                    <label value="Approve" />
                    <hbox width="100%">
                        <!-- Listbox bound to task's attribute aprove.
                            Any change will be stored on the task -->
                        <listbox id="lb" width="98%" mold="select" bind="/approve">
                            <listitem value="">
                                <listcell label="Select an action to do"/>
                            </listitem>
                            <listitem value="yes">
                                <listcell label="Approve"/>
                            </listitem>
                            <listitem value="no">
                                <listcell label="Reject"/>
                            </listitem>
                        </listbox>
                    </hbox>
                </row>
            </rows>
        </grid>
    </task>
</zk>