14 Human Workflow

This chapter describes issues associated with human workflow. It includes the following topics:

14.1 General Issues and Workarounds

This section describes general issue and workarounds. It includes the following topics:

14.1.1 Must Create Separate ADF Task Flows If Both Contain the Same Element with Different Meta-attributes

You must create separate ADF task flows if both contain the same element, but with different meta-attributes specified (for example, editable and noneditable).

For example, assume you perform the following tasks.

  1. Create two task form applications for a SOA composite application:

    • Task form application one (for example, named EnterBankDetails.task) has one editable payload (for example, named BankDetails) and one noneditable payload (for example, named Employee).

    • Task form application two (for example, named ValidatePersonalInformation.task) has one editable payload (for example, also Employee).

    While creating the task form, the wizard provides you with the option to define the ADF table for payload Employee.

  2. Complete the wizard, then deploy the process.

  3. Invoke the process.

  4. Log in to Oracle BPM Worklist.

    There is a Validate Personal Information task (for ValidatePersonalInformation.task).

  5. Select the task.

    Employee details are available for modification, as expected.

  6. Add a new record, then approve the task.

  7. Select the Enter Bank Details task (for EnterBankDetails.task). In the task form, note that the Insert New and Delete buttons are still present for Employee data, even though it is a noneditable payload.

  8. Click Delete, then select Approve. The payload gets deleted.

Ensure that you create two separate ADF task flow applications because both contain the Employee element, but with different meta-attributes specified (editable and noneditable).

14.1.2 Specifying the Template Version When Moving Human Workflow Data from Test to Production Environments

Section "Moving Human Workflow Data from Test to Production Environments" of Chapter "Managing Human Workflow Service Components and Engines" of the Oracle Fusion Middleware Administrator's Guide for Oracle SOA Suite describes how to use the migration.properties file to move your data from a test to a production environment. In addition to the migration.properties file properties described in this section, you must also add the template.version property to this file. For example:

operationType = EXPORT
objectType = VIEW
name = name of VIEW
user = username of VIEW
grantPermission = true
migrateAttributeLabel = true
override = true
skip = true
migrateToActiveVersion = true
template.version = 2009-June-11

Not adding the template.version property results in the occurrence of an exception error when you execute the ant-t2p-worklist.xml script.

14.1.3 Editing Visibility Rules Invokes a Feedback Dialog with an Exception Error

If you make changes to the visibility rules in the Access page of the Human Task Editor (for example, set assignees to have no access to task history), save your changes, switch to Source view, and then switch back to Designer view, a feedback dialog is displayed with an exception error.

Close this dialog. There is no loss of functionality.

14.1.4 Intermittent Error When Executing the Remote EJB API for Human Workflow

When executing the remote EJB API for human workflow, you can intermittently receive the following error:

javax.naming.ServiceUnavailableException

As a workaround, perform the following steps.

  1. Open the DOMAIN_HOME/config/fmwconfig/jps-config.xml file.

  2. Add the connection pooling size:

    change:

    <!-- JPS WLS LDAP Identity Store Service Instance --> 
      <serviceInstance name="idstore.ldap" provider="idstore.ldap.provider"> 
        <property name="idstore.config.provider" 
    value="oracle.security.jps.wls.internal.idstore.WlsLdapIdStoreConfigProvider"/>
        <property name="CONNECTION_POOL_CLASS" 
    value="oracle.security.idm.providers.stdldap.JNDIPool"/> 
      </serviceInstance> 
    

    to:

    <!-- JPS WLS LDAP Identity Store Service Instance --> 
      <serviceInstance name="idstore.ldap" provider="idstore.ldap.provider"> 
        <property name="idstore.config.provider" 
    value="oracle.security.jps.wls.internal.idstore.WlsLdapIdStoreConfigProvider"/>
        <property name="CONNECTION_POOL_CLASS" 
    value="oracle.security.idm.providers.stdldap.JNDIPool"/> 
        <property name="CONNECTION_POOL_MAX_CONNECTIONS" value="30"/> 
      </serviceInstance>
    

14.1.5 Approve and Reject Actions in Actions Tab of Human Task Editor for Admin User Should Be Disabled

In the Actions tab of the Access page of the Human Task Editor, the Admin user is incorrectly assigned the actions Approve and Reject by default. These checkboxes should be disabled. During runtime, if you log in to Oracle BPM Worklist as the Admin user, the actions Approve and Reject are not in the Actions dropdown list. This is the expected behavior.

14.1.6 Must Explicitly Save an Attachment Removal

Adding an attachment to a task does not require you to select Actions > Save. The task is automatically updated and the full history shows the attachment was added. However, when you remove the attachment, the task is not automatically updated. You must explicitly select Actions > Save. Otherwise, the attachment is not removed, even though it is displayed as removed. This is the expected behavior.

14.1.7 Task Form Uses the Less Secure Port If Both the HTTP and HTTPS Ports Are Enabled

If you enable both the front end HTTP (non-SSL) and HTTPS (SSL) ports in Oracle WebLogic Server, deploy a SOA composite application and task form, invoke an instance, and attempt to access the task form, the less secure port is used.

For example, if you click the invoked task, the Oracle BPM Worklist URL is correctly displayed with the HTTPS port.

https://host:https_port/integration/worklistapp

However, the task form URL displays the less secure port:

http://host:http_port/workflow/taskflow

If the HTTPS port is enabled, it must use the more secure port, especially if the request is made on the HTTPS port. To use the HTTPS port, follow the task flow deployment instructions described in section "Deploying a Composite Application with a Task Flow" of the Oracle Fusion Middleware Developer's Guide for Oracle SOA Suite for details.

14.1.8 URL Files Attachments Are Not Being Sent to the Next Task Assignee

For a task using a serial participant type, when the first assignee approves the task in Oracle BPM Worklist and adds a URL attachment to it (for example, http://www.mycompany.com/technology/products/oem/management_partners/snmpwp6.gif), the attachment is not sent along with the e-mail notification to the next participant. However, if a desktop file is added as an attachment (for example, just snmpwp6.gif), then the attachment is sent with the e-mail notification to the next assignee.

14.1.9 Pushback Action Overrides All Other Actions

The pushback action overrides all other actions. For example, if a task is pushed back and then reassigned, after the reassignee approves it, the task goes to the user who performed the pushback. This is the expected behavior.

14.1.10 Tasks Can Be Pushed Back to an Owner or Creator Who Was Not in the Past Approvers List

A task owner or creator who was not a previous task approver displays in the list of approvers to whom the task can be pushed back. For example, perform the following tasks:

  1. Create the Vacation Request SOA composite application in which you set the Owner field of the Human Task Editor with an XPath expression.

  2. Set the creator from the payload as the owner of the task.

  3. Deploy and create an instance with the creator as jcooper.

  4. Log in as jstein to Oracle BPM Worklist.

  5. Select Actions > Request Information.

  6. In the Request More Information dialog in Oracle BPM Worklist, the task owner jcooper is shown as a past approver in the Past Approvers dropdown list. Since jcooper is not in the original list of approvers, if you select this user, a validation error similar to the following is correctly displayed:

    Invalid action on workflow task or user does not have privilege to 
    perform this action. Action PUSH_BACK on task 
    89f227cd-7ea2-4fcf-83ff-845082e01416 cannot be performed by jstein. Make 
    sure that the action is valid with respect to the current state of the task or
    ensure that the user has  privilege to perform this action on the workflow
    task.
    

14.1.11 Task Flow Created with Notification Drop Handler Displays a Code Line in Oracle BPM Worklist

When you create the task flow for a human workflow task by dragging the Task object from the Application Navigator and selecting Human Task > Task details for email from the menu, then after task flow deployment, the following code line precedes the task details in Oracle BPM Worklist.

font {font-family: Tahoma, Verdana, Helvetica, sans-serif} H1 { font-size:
14px; color:#000000; margin-left: 5px} td {font-size: 11px;color:#000000}
label {font-size:11px;color:#704A00;margin-right:10px}

This does not effect any functionality. In Oracle BPM Worklist and in the e-mail notification, task details display correctly.

14.1.12 Specifying Values for Both the Date From and Date To Fields on the Notification Management Page

You must specify values for both the Date From and Date To fields in the Search sections on the Notification Management page in Oracle Enterprise Manager Fusion Middleware Control Console to receive the correct search results. These fields do not work independently. Specifying values for only one of these fields does not display the correct search results. To access these fields:

  1. Right-click soa-infra in the navigation tree, and select Service Engines > Human Workflow > Notification Management.

  2. Expand the Search icon in the Outgoing Notifications section or Incoming Notifications section to display the Date From or Date To fields.

14.1.13 Oracle BPM Worklist Does Not Support a JNDI Connection Pool

The worklist engine uses a user and role connection pool. It does not support a JNDI connection pool.

14.1.14 Displaying Details for Stale Tasks on the Evidence Search Tab

Many of the task details for a stale task are not displayed, because stale tasks are typically purged. For this reason, content on the page is not aligned correctly and clicking a stale task results in an error message.

14.1.15 Undeploying a Task Flow Does Not Remove the Database Entry for the URL

When a task flow Web application is deployed, the task flow URL is registered in the database. This URL is displayed in Oracle BPM Worklist when a task is clicked and the task details are displayed. If the task flow Web application is later undeployed or stopped, the task flow URL in the database is not removed as part of the undeployment. Consequently, when you click the task in the worklist to see the task details, a 404 Not Found error is displayed rather than the message Details not available for task. To avoid the 404 Not Found error, use Oracle Enterprise Manager Fusion Middleware Control Console to undeploy the task flow application from the application home page.

14.1.16 Changing the Task Display URL to Use the Correct Protocol and Port Number

If the SOA Server is SSL enabled or disabled, then you must manually enable or disable SSL for any already deployed workflow task detail applications. Use Oracle Enterprise Manager Fusion Middleware Control Console to change the workflow task display URL to use the correct protocol and port number. To enable the use of the SSL (HTTPS) URL, ensure that the HTTP port setting is left blank. See Oracle Fusion Middleware Administrator's Guide for Oracle SOA Suite for more information.

14.1.17 Creating Custom Identity Store Providers

Oracle Fusion Middleware supports providers that enable the User and Role API to interact with custom identity stores. For more information, visit the following URL:

http://www.oracle.com/technology/products/id_mgmt/opss/index.html

14.1.18 Some Fields Do Not Appear After Updating and Saving a ToDo Task in a Worklist Portlet

After you update and save a ToDo task or a ToDo subtask for a business task in a Worklist Portlet, the following fields should appear, but do not: Assignee, Status, and Search options.

14.1.19 Notifications for ToDo Tasks are Not Supported

Notifications for ToDo tasks are not supported. If you create a ToDo task with a notification in Oracle BPM Worklist, you receive a 404 Not Found error message.

14.1.20 Best Practice Recommendation for Task Detail Deployment

It is recommended that task detail applications associated with a human workflow composite be deployed only to servers that have SOA configured on them, as well as the required ADF libraries.

14.1.21 History Section of a Task Details Page Does Not Display Correctly in an E-mail Notification

The task details page for e-mail notifications does not support the listing of the History section. If this section is included in the task details to be rendered for e-mails, then it does not display correctly in the e-mail notification.

14.1.22 Admin Users Can Add and Update Comments and Attachments

In Oracle BPM Worklist, Admin users can add and update comments and attachments with this release.

14.1.23 Do Not Include Spaces in a Custom Outcome ACTION Name

When creating a custom outcome for a task form, ensure that valid characters are used in the ACTION name. Spaces are not permitted.

14.1.24 Stuck Java Threads in com.sun.jndi.ldap.Connection.readReply in Workflow on AIX

When multiple LDAP calls to the Oracle WebLogic Embeded LDAP Server are made from Workflow on the IBM AIX platform using the IBM JDK, the client making the LDAP request may hang and errors like the following may be seen in the SOA managed server logs:

Jun 15, 2009 9:47:01 PM PDT Error WebLogicServer BEA-000337 [STUCK] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)' has been busy for "606" seconds working on the request "oracle.bpel.services.workflow.query.ejb.TaskQueryService_oz1ipg_EOImpl", which is more than the configured time (StuckThreadMaxTime) of "600" seconds. Stack trace:

java.lang.Object.wait(Native Method)
java.lang.Object.wait(Object.java:196)
com.sun.jndi.ldap.Connection.readReply(Connection.java:442)
com.sun.jndi.ldap.LdapClient.getSearchReply(LdapClient.java:623)
com.sun.jndi.ldap.LdapClient.search(LdapClient.java:546)
com.sun.jndi.ldap.LdapCtx.doSearch(LdapCtx.java:1960)
com.sun.jndi.ldap.LdapCtx.doSearchOnce(LdapCtx.java:1909)
com.sun.jndi.ldap.LdapCtx.c_getAttributes(LdapCtx.java:1302)
com.sun.jndi.toolkit.ctx.ComponentDirContext.p_getAttributes(ComponentDirContext.java:225)
com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.getAttributes(PartialCompositeDirContext.java:133)

Oracle recommends using Oracle Internet Directory (OID) as the LDAP server for Workflow to avoid this error.

14.2 Documentation Errata

This section describes documentation errata. It includes the following topics:

14.2.1 Withdraw Button in Task Details Page Displays for the Administrator

Section "Acting on Tasks: The Task Details Page" of Chapter "Using Oracle BPM Worklist" of Oracle Fusion Middleware Developer's Guide for Oracle SOA Suite includes the following description for the Action buttons on the task details page:

Action buttons—Displays buttons for custom actions that are defined in the human task, such as setting task outcomes (for example, Resolved and Unresolved for a help desk request or Approve and Reject for a loan request). For the task initiator or a manager, Withdraw may also appear.

This description should also state that in addition to the task initiator or manager, Withdraw may also appear for the administrator.

14.2.2 Clarification of the Example Showing How To Initiate a Vacation Request Task Programmatically

In Example 28-8, "Initiating a Vacation Request Task Programmatically," the following change is required.

Replace this:

// set taskDefinitionId
  task.setTaskDefinitionId("/VacationRequestApp/
  VacationRequest!1.0*2007-04-26-10-49-50/
  VacationRequest");  (Your task definition ID will be different.)

With this:

// set taskDefinitionId. taskDefinitionId is the target
// namespace of the task 
// If namespace is used, the active version of the composite corresponding 
// to that of the namespace will be used.
task.setTaskDefinitionId("http://xmlns.oracle.com/VacationRequest/
Project1/Humantask1");  (Your task definition ID will be different.)

Example 14-1 shows the entire corrected example.

Example 14-1 Initiating a Vacation Request Task Programmatically

  // create task object
  ObjectFactory objectFactory = new ObjectFactory();
  Task task = objectFactory.createTask();

  // set title
  task.setTitle("Vacation request for jcooper"); 

  // set creator
  task.setCreator("jcooper");
 
// set taskDefinitionId. taskDefinitionId is the target
// namespace of the task 
// If namespace is used, the active version of the composite corresponding 
// to that of the namespace will be used.
task.setTaskDefinitionId("http://xmlns.oracle.com/VacationRequest/
Project1/Humantask1");  (Your task definition ID will be different.)

  // create and set payload 
  Document document = XMLUtil.createDocument();
  Element payloadElem = document.createElementNS(TASK_NS, "payload"); 
  Element vacationRequestElem = document.createElementNS(VACATION_REQUEST_NS,
    "VacationRequestProcessRequest");
 
  Element creatorChild = document.createElementNS(VACATION_REQUEST_NS, "creator");
  creatorChild.appendChild(document.createTextNode("jcooper")); 
  vacationRequestElem.appendChild(creatorChild);
  
  Element fromDateChild = document.createElementNS(VACATION_REQUEST_NS, "fromDate");
  fromDateChild.appendChild(document.createTextNode("2006-08-05T12:00:00")); 
  vacationRequestElem.appendChild(fromDateChild);
  
  Element toDateChild = document.createElementNS(VACATION_REQUEST_NS, "toDate");
  toDateChild.appendChild(document.createTextNode("2006-08-08T12:00:00"));
  vacationRequestElem.appendChild(toDateChild);
  
  Element reasonChild = document.createElementNS(VACATION_REQUEST_NS, "reason");
  reasonChild.appendChild(document.createTextNode("Hunting")); 
  vacationRequestElem.appendChild(reasonChild);
  
  payloadElem.appendChild(vacationRequestElem);
  document.appendChild(payloadElem);
  
  task.setPayloadAsElement(payloadElem);
 
  IWorkflowServiceClient workflowServiceClient =
    WorkflowServiceClientFactory.getWorkflowServiceClient
    (WorkflowServiceClientFactory.SOAP_CLIENT);
  ITaskService taskService = workflowServiceClient.getTaskService(); 
  IInitiateTaskResponse iInitiateTaskResponse = taskService.initiateTask(task); 
  Task retTask = iInitiateTaskResponse.getTask(); 
  System.out.println("Initiated: " + retTask.getSystemAttributes().getTaskNumber() + " - " +
    retTask.getSystemAttributes().getTaskId());
  return retTask;

14.2.3 Task Actions and Approvers Table in Oracle Fusion Middleware Developer's Guide for Oracle SOA Suite

Section 27.5, "Approving Tasks" of Oracle Fusion Middleware Developer's Guide for Oracle SOA Suite contains the following discrepancies on the types of actions that can be performed on tasks by the various task approvers.

  • The owner and creator are listed as being unable to perform the purge task action. This is incorrect. Both of these approvers can perform the purge task action.

  • The Admin is listed as being unable to perform the withdraw task action. This is incorrect. This approver can perform the withdraw task action.

14.2.4 Classpath for the workflow-120-SQLIdentityProvider Sample Must Be Replaced

The classpath in the README.txt file for the workflow-120-SQLIdentityProvider sample is incorrectly listed as org.sample.providers.ff.DBIdentityStoreFactory. Replace this value with org.sample.providers.db.DBIdentityStoreFactory in the jps-config.xml file for this sample to correctly work.

This and other human workflow samples are available from the following location on the Oracle Technology Network:

http://www.oracle.com/technology/sample_code/products/hwf/index.html