C Customizing Applications in Process Workspace and BPM Worklist

This appendix explains how, for Oracle Business Process Management Workspace (Process Workspace), you can create customized external applications and links that become available in the Favorites list of the Views, Applications, and Favorites pane. It also explains how, for both Process Workspace and BPM Worklist, you can specify the columns that appear in the inbox.


Create a temporary directory at any location, for example, /scratch/jstein/sharedLib. This contains all the individual JAR files as well as the shared library JAR file, custom.client.applib.jar. Do this step before doing any of the following steps.

How to Customize an Application

To customize and application:

  1. Create an Oracle Application Development Framework Project in Oracle JDeveloper.

    Figure C-1 shows the Create Fusion Web Application (ADF) dialog box.

    Figure C-1 Creating an ADF Project in JDeveloper

    Description of Figure C-1 follows
    Description of "Figure C-1 Creating an ADF Project in JDeveloper"
  2. Create a Java class and name it WorkspaceCustomisationImpl.
  3. Include Worklist Application JAR files.

    Figure C-2 shows the BPM Worklist Components library being added.

    Figure C-2 Including Worklist Application in the Library

    Description of Figure C-2 follows
    Description of "Figure C-2 Including Worklist Application in the Library"
  4. Create a customization class. This sample class modifies the inbox columns and customize external application and links.

    WorkspaceCustomisationImpl and its contents are as follows:

    package view.customisationimpl;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import oracle.bpel.services.workflow.client.IWorkflowServiceClient;
    import oracle.bpel.services.workflow.runtimeconfig.IRuntimeConfigService;
    import oracle.bpel.services.workflow.runtimeconfig.model.AttributeLabelType;
    import oracle.bpel.services.workflow.runtimeconfig.model.AttributeLabelUsageList;
    import oracle.bpel.services.workflow.runtimeconfig.model.AttributeLabelUsages;
    import oracle.bpel.services.workflow.verification.IWorkflowContext;
    import oracle.bpm.ui.customization.CustomLink;
    import oracle.bpm.ui.customization.IBPMUICustomizations;
    public class WorkspaceCustomisationImpl implements IBPMUICustomizations {
      private static Map displayNameMap = new HashMap();
      public WorkspaceCustomisationImpl() {
        displayNameMap.put("instanceId", "Instance Id");
        displayNameMap.put("protectedTextAttribute1", "Business Status");
      public List<CustomLink> getCustomGlobalLinks() {
        CustomLink globalLink1 =
          new CustomLink("Oracle Home Page", "www.oracle.com", null);
        CustomLink globalLink2 =
          new CustomLink("Self Services Application", "http://global-ebusiness.example.com/",
        CustomLink globalLink3 =
          new CustomLink("BUG DB", "https://bug.example.com/", null);
        List<CustomLink> globalLinks = new ArrayList<CustomLink>();
        return globalLinks;
      public String getColumnNames() {
        return "title,taskNumber,instanceId,creator,protectedTextAttribute1";
      private static void initDisplayMap(IWorkflowServiceClient client,
                                         IWorkflowContext context) {
        // u can use service to load all label name for text attributes
        if (displayNameMap == null) {
          synchronized (String.class) {
            if (displayNameMap == null) {
              displayNameMap = new HashMap();
              try {
                IRuntimeConfigService service = client.getRuntimeConfigService();
                AttributeLabelUsageList list =
                  service.getAttributeLabelUsages(context, "Text");
                List<AttributeLabelUsages> list1 = list.getAttributeLabelUsages();
                for (AttributeLabelUsages usage : list1) {
                  AttributeLabelType type = usage.getLabel();
                  displayNameMap.put(type.getTaskAttribute(), type.getLabelName());
              } catch (Exception exc) {
      public String getColumnDisplayName(IWorkflowServiceClient client,
                                         IWorkflowContext context,
                                         java.lang.String colName) {
        initDisplayMap(client, context);
        return (String)displayNameMap.get(colName);
  5. Create a JAR deployment profile. Create a JAR file and name it customer-impl.jar.
  6. Deploy it as a part of the shared library, custom.client.applib.jar.

    To do this, update the MANIFEST.MF file and update the shared library as explained in Deploying Images and JAR files as Part of a Shared Library JAR file.

Depending on your customization, you can now see its effects. If your customization is for Process Workspace and involves either creating an external application or specifying inbox columns in the Task Details pane or both, you see the following: