Starting a long-running process that contains a non-unique starting service

Why and when to perform this task

A long-running process can be started through multiple initiating receive or pick activities. You can use the initiate method to start the process. If the starting service is not unique, for example, the process starts with multiple receive or pick activities, or a pick activity that has multiple onMessage definitions, then you must identify the service to be called.

Steps for this task

  1. Optional: List the process templates to find the name of the process you want to start.

    This step is optional if you already know the name of the process.

    ProcessTemplateData[] processTemplates = process.queryProcessTemplates
      ("PROCESS_TEMPLATE.EXECUTION_MODE =
           PROCESS_TEMPLATE.EXECUTION_MODE.EXCECUTION_MODE_LONG_RUNNING",
       "PROCESS_TEMPLATE.NAME",
        new Integer(50),
        null); 
    The results are sorted by name. The query returns an array containing the first 50 sorted templates that can be started as long-running processes.
  2. Determine the starting service to be called.
    ProcessTemplateData template = processTemplates[0];
    ActivityServiceTemplateData[] startActivities = 
            process.getStartActivities(template.getID());
  3. Start the process with an input message of the appropriate type.

    When you create the message, you must specify its message type name so that the message definition is contained. If you specify a process-instance name, it must not start with an underscore. If a process-instance name is not specified, the process instance ID (PIID) in String format is used as the name.

    ActivityServiceTemplateData activity = startActivities[0];
    //create a message for the service to be called
    ClientObjectWrapper input = process.createMessage
                                (activity.getServiceTemplateID(),
                                 activity.getActivityTemplateID(),
                                 activity.getInputMessageTypeName()); 
    DataObject myMessage = null;
    if ( input.getObject()!= null && input.getObject() instanceof DataObject )
    {
      myMessage = (DataObject)input.getObject();
      //set the strings in the message, for example, a customer name
      myMessage.setString("CustomerName", "Smith");
    }
    //start the process
    PIID piid = process.initiate(activity.getServiceTemplateID(),
                                 activity.getActivityTemplateID(),
                                 null,
                                 input); 

    This action creates an instance and passes some customer data. When the process starts, the operation returns the object ID of the new process instance to the caller.

    The starter of the process instance is set to the caller of the request and receives a work item for the process instance. The process administrators, readers, and editors of the process instance are determined and receive work items for the process instance. The follow-on activity instances are determined. These are started automatically or, if they are staff, receive, or pick activities, work items are created for the potential owners.

Related concepts
Queries on business-process and task-related objects

Terms of use |

Last updated: Thu Apr 27 14:54:58 2006

(c) Copyright IBM Corporation 2006.
This information center is powered by Eclipse technology (http://www.eclipse.org)