Program Start

image0 The Program Start element is located in the Event & Gateway drawer of the process editor palette.

Element Details

The program start element allows to start a process by a trigger from embedded external Java code. This opens a possibility to integrate an Axon.ivy application into other applications and systems. The program start element will instantiate a Java class that must implement the IProcessStartEventBean interface. The Java class can then start the process by calling the method fireProcessStartEventRequest on the Axon.ivy runtime engine IProcessStartEventBeanRuntime. The common way to implement a Start Event Bean is to extend the abstract base class AbstractProcessStartEventBean. The interface also includes an inner editor class to parametrize the bean. You will find the documentation of the interfaces and abstract class in the Java Doc of the Axon.ivy Public API.

Note

An Axon.ivy Engine Enterprise Edition consists of multiple engine instances (nodes) that are running on different machines.

Normally process start event beans are instantiated on every node but only started on the master node. This guarantees that for each Program Start process element only one bean is running, no matter what the total number of nodes in the Engine Enterprise Edition is.

However, if you need your process start event bean to be started on all cluster nodes, you may instruct the engine to do so. Just have your bean class implement the (empty) marker interface IMultiNodeCapable and the above restriction will no longer apply.

Please be aware of the fact that having multiple running instances of the same bean may lead to race conditions.

Inscription

Name Tab

The Name Tab is included in the mask of all process elements and contains the name and a description of the element.

Tab Start

On this tab you define the Java class to execute.

Start tab

Start tab

Java Class to execute

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

Responsible role

Defines the role that is required to be able to start a process. The bean will set up an authorised session that calls the fireProcessStartEventRequest() from the eventRuntime to trigger a process.

Editor Tab

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 have smart buttons that provide access to the process data, environment functions and Java classes.

Here is an example on how an editor could look like:

../../../_images/program-interface-activy-sample.png

As you can see, the editor provides access to any process relevant data that 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 above editor. As mentioned earlier Axon.ivy provides the IIvyScriptEditor that 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 show within 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 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;
}