Intermediate Event

The Intermediate Event element is located in the Event & Gateway drawer of the process editor palette.

Element Details

This element is one of Xpert.ivy facilities to integrate custom-made software, legacy systems, proprietary applications or any other external system through an Xpert.ivy Java interface. At an Intermediate Event element the process execution is interrupted and waits for an external event to occur. Technically spoken the current task will be ended and a new system task is created that waits for the intermediate event. If the intermediate event is fired the new task and therefore the process after the intermediate event will be executed.

You provide a listener for the external event by implementing a Java class that implements the IProcessIntermediateEventBean interface. The Intermediate Event Element instantiates the Java class and can then trigger the intermediate event by calling the method fireProcessIntermediateEventEx on the Xpert.ivy runtime engine IProcessIntermediateEventBeanRuntime . The common way to implement an Intermediate Event bean is to extend the abstract base class AbstractProcessIntermediateEventBean . The interface also includes an inner editor class to parametrize the bean. You will find the documentation of the interface and the abstract class in the Java Doc of the Xpert.ivy Public API.

Inscription

Name Tab

This tab is included in the mask of all process elements and contains the name and a description of the element. See Name Tab for a more detailed description.

Event Tab

On this tab you define the Java class that the IntermediateEvent should instantiate, the identifier of the event to wait for and the timeout behaviour.

Java Class to execute

Fully qualified name of the Java class that implements the IProcessIntermediateEventBean interface. Use the New Bean Class Wizard () to create a new Java source file with an example implementation of the bean class.

Event ID

Because multiple cases (process instances) can wait on the same intermediate event you must specify which event belongs to which waiting case. Here you specify the identifier of the event the current case should wait for.

Warning

The event identifier as a String must be unique. Do not use a static string like "myID". A good practice is to integrate the case identifier (ivy.case.getIdentifier()) into the event id.

Timeout

Here you can specify a time (Duration) how long the current case should wait for an intermediate event and what should happen if no event has been received after this time. You can optionally start an exception process, delete the waiting task or continue the waiting task without receiving an intermediate event.

Tab Editor

This tab displays the editor, that can be integrated in the external Java bean of the process element. The editor is implemented as an inner public static class of the Java bean class and must have the name Editor. Additionally the editor class must implement the IProcessExtensionConfigurationEditorEx interface. The common way to implement the editor class is to extend the abstract base class AbstractProcessExtensionConfigurationEditor and to override the methods createEditorPanelContent, loadUiDataFromConfiguration and saveUiDataToConfiguration. The method createEditorPanelContent can be used to build the UI components of the editor. You can add any AWT/Swing component to the given editorPanel parameter. With the given editorEnvironment parameter, which is of the type IProcessExtensionConfigurationEditorEnvironment , you can create text fields that support ivyScript and has smart buttons which provide access to the process data, environment functions and Java classes.

Here is an example of such an editor:

As you can see, the editor provides you access to any process relevant data, which can be used by your own process elements. For instance, you can easily transfer process data to your legacy system.

The following part shows the implementation of the editor shown above. As mentioned above Xpert.ivy provides the IIvyScriptEditor which represents a text field with ivyScript support and smart buttons. Inside createEditorPanelContent use the method createIvyScriptEditor from the editorEnvironment parameter to create an instance of such an editor. Use the loadUiDataFromConfiguration method to read the bean configuration and set them to the UI components. Inside this method you can use the methods getBeanConfiguration or getBeanConfigurationProperty to read the bean configuration. Use the method saveUiDataToConfiguration to save the data in the UI components to the bean configuration. Inside this method you can use the methods setBeanConfiguration or setBeanConfigurationProperty to save the bean configuration.

  public static class Editor extends AbstractProcessExtensionConfigurationEditor
  {
    private IIvyScriptEditor editorUser;
    private IIvyScriptEditor editorEventTyp;
    private IIvyScriptEditor editorLinkId;
    private IIvyScriptEditor editorFieldValue;
    
    @Override
    protected void createEditorPanelContent(Container editorPanel,
            IProcessExtensionConfigurationEditorEnvironment editorEnvironment)
    {
      editorPanel.setLayout(new GridLayout(4,2));
      editorUser = editorEnvironment.createIvyScriptEditor(null,null, "String");
      editorEventTyp = editorEnvironment.createIvyScriptEditor(null,null, "String");
      editorLinkId = editorEnvironment.createIvyScriptEditor(null, null, "String");
      editorFieldValue = editorEnvironment.createIvyScriptEditor(null, null);
      
      editorPanel.add(new JLabel("User"));
      editorPanel.add(editorUser.getComponent());
      editorPanel.add(new JLabel("Event Typ"));
      editorPanel.add(editorEventTyp.getComponent());
      editorPanel.add(new JLabel("Link-Id"));
      editorPanel.add(editorLinkId.getComponent());
      editorPanel.add(new JLabel("Feldwert"));
      editorPanel.add(editorFieldValue.getComponent());        
    }

    @Override
    protected void loadUiDataFromConfiguration()
    {
      editorUser.setText(getBeanConfigurationProperty("User"));
      editorEventTyp.setText(getBeanConfigurationProperty("EventTyp"));
      editorLinkId.setText(getBeanConfigurationProperty("LinkId"));
      editorFieldValue.setText(getBeanConfigurationProperty("Feldwert"));
    }

    @Override
    protected boolean saveUiDataToConfiguration()
    {
      setBeanConfigurationProperty("User", editorUser.getText());
      setBeanConfigurationProperty("EventTyp", editorEventTyp.getText());
      setBeanConfigurationProperty("LinkId", editorLinkId.getText());
      setBeanConfigurationProperty("Feldwert", editorFieldValue.getText());
      return true;
    }
  }    

At runtime you have to evaluate the IvyScript the user have entered into the ivy script editors. If you implement for example the AbstractUserProcessExtension class there is a perform method which is executed at runtime. At this point you want to access the configured data in the editor. The following code snippet show how you can evaluate the value of an IIvyScriptEditor . If you use the IIvyScriptEditor you only get the value by calling the executeIvyScript method of the AbstractUserProcessExtension .

  public CompositeObject perform(IRequestId requestId, CompositeObject in,
     IIvyScriptContext context) throws Exception
  {
    IIvyScriptContext ownContext;
    CompositeObject out;
    out = in.clone();
    ownContext = createOwnContext(context);

    String eventtyp = "";
    String linkId = "";
    String fieldValue = "";
    String user= "";

    user = (String)executeIvyScript(ownContext, getConfigurationProperty("User"));
    eventtyp = (String)executeIvyScript(ownContext, getConfigurationProperty("Event Typ"));
    linkId = (String)executeIvyScript(ownContext, getConfigurationProperty("Link-Id"));
    fieldValue = (String)executeIvyScript(ownContext, getConfigurationProperty("Feldwert"));
    
    // add your call here
    
    return out;
  }           

Task Tab

On this tab you configure the parameters of the awaited event which is handled as an Intermediate Event Task. Thus it can be displayed in a task list with a filter applied to the task kind parameter. The task kind code is the internally used identifier to sort and order the processes. The task kind name is a human readable description of the code. The Business milestone usually sets the current DateTime for process activity analysis and reports.

You can set the name of the business calendar that should be used for the task. In the context of the task ivy.cal will return this business calendar regardless of what you've set for the case.

For more information about business calendar administration see the server guide.

For more information about business calendar usage see the Public API of ch.ivyteam.ivy.application.calendar.IDefaultBusinessCalendar.

Output Tab

On this tab you can configure the output of the element (i.e. the data that leaves the element). You can use the variable result that holds additional information about the event received by the Java class.

See Output Tab for a more detailed description.

Note

For each incoming connection you have a separate inX object available which carries the data of the Xth input. Hover with the mouse over the incoming connections of the element to learn which input connection corresponds to which variable.