Skip to Content

How often do you deal with business processes that require human interaction in their very first step?

Typically they follow this pattern:

Figure 1: Standard BPMN process with a human activity at the beginning

The downside of this model is that the process starts off with a message start event. This means that somehow the process needs to be invoked before the user can interact with the first task. This can either be through the Process Repository (part of the SAP NetWeaver Administrator) for test purposes or directly by invoking the web service (WS) endpoint that is exposed by the process model.

Another disadvantage of this approach is that the process needs to be kicked off and the user has to go to the Universal Worklist in order to open the task. When talking about a smooth user experience that is typically not what you want to achieve. To bypass this I also happen to see such patterns:

Figure 2: Standard BPMN process with an upstream human activity

Here the user interface got removed from the process model and put before. That way, the user can directly invoke the user interface, enter the data and thereby, kick-off the process under the hood (by invoking the WS endpoint again).

In my opinion, the problem with this approach is that you lost a substantial part of information, namely the user triggering the process. Of course, this could be compensated by modeling different actors/pools and documenting that a user interaction sent the message to the system.

But is not the BPMS promise in the end that you could model business processes that could directly be executed? So I would put something like this onto my personal BPMS wish list:

Figure 3: BPMN process with ‘human start event’ extension

Let’s call this a human start event.

Similar to human activities one could attach a user interface behind that and as a result receives an endpoint URL that could directly be invoked.

Figure 4: Fictive properties sheet for a human start event

Entering data and completing the task at runtime will implicitly invoke the business process. Thus, no indirection through the worklist is needed. Furthermore, the information about the human interaction is preserved and exactly at the point one would expect it in the process model.

Of course, one could now argue if the notation above is the correct. I personally like it as the event of some human activity kicked off the process. Alternatively, it could also be expressed this way to comply with standard BPMN semantics:

Figure 5: Standard BPMN process that does not define the trigger for the start event

The model does not define how the process is started, but the first activity will be executed by a human.

At the current state SAP NetWeaver BPM does not allow this to be built and executed as an event needs to have a trigger. So this means that we are left with the pattern from the start:

Figure 6: Standard BPMN process with a human activity at the beginning

The good news is that the BPM Public API allows us to bypass the indirection through the worklist: One could start the process implicitly and directly forward the user to the first human activity.

In an easy example – without input for the process and only one human activity at the beginning – this could look like follows:

final String vendor = "sap.com";
final String dcName = "my~human~centric~dc";
final String processName = "MyProcess";
final ProcessDefinitionManager processDefinitionManager = BPMFactory.getProcessDefinitionManager();
final ProcessStartManager processStartManager = BPMFactory.getProcessStartManager();
final TaskInstanceManager taskInstanceManager = BPMFactory.getTaskInstanceManager();
final ProcessDefinition processDefinition = processDefinitionManager.getActiveProcessDefinition(vendor, dcName, processName);
final Set<ProcessStartEvent> startEvents = processStartManager.getProcessStartEvents(processDefinition.getId());
if (startEvents.size() != 1) {
     throw new IllegalStateException(“Exactly one start event is needed.”);
}
final ProcessStartEvent startEvent = startEvents.iterator().next();
final DataObject dataObject = processStartManager.createDataObjectForStartEvent(startEvent);
final URI processInstanceURI = processStartManager.startProcess(startEvent, dataObject);
waitForProcessInactivity(processInstanceURI);
final Set<TaskAbstract> taskAbstracts = taskInstanceManager.getTaskAbstractsByParent(processInstanceURI, Collections.<Status> emptySet());
if (taskAbstracts.isEmpty()) {
     throw new IllegalStateException(“First task was not found.”);
}
final TaskAbstract taskAbstract = taskAbstracts.iterator().next();
final URL generatedTaskExecutionUrl = taskInstanceManager.generateTaskExecutionUrl(taskAbstract.getId());
response.sendRedirect(generatedTaskExecutionUrl.toExternalForm());

Finally, by putting this in a custom web application it gets addressable by URL (e.g. http://server:port/CreateRequestAndStartProcess). This way, it can easily be included in a portal or bookmarked by users on their PC, their tablet or mobile.

So even without human start events SAP NetWeaver BPM allows putting your users first in human centric processes.

Looking forward to your feedback,
Martin

Update:

For your convenience I published the sample project at SAP Code Exchange: https://code.sdn.sap.com/spaces/bpm

To report this post you need to login first.

11 Comments

You must be Logged on to comment or reply to a post.

  1. Mariana Mihaylova

    It’s a full blown BPMS, mature and robus and with an open API can work miracles for customers. Now when SAP NetWeaver BPM and PI have come close together and can be used in a combined stack a.k.a. Process Orchestration the benefits are countless.

    (0) 
  2. Shahram Shadmani

    Hi Martin,

    I agree with you in your points. I am relatively new in the NW BPM adventure. But, one thing that I realized, e.g. going through many of the tutorials, was that almost all the BPM processes had to be initiated from the Process repository by the BPM administrator (or someone with the required roles). The BPM user would have to go to the UWL and start the human task in order to fill in data or submit the task. Nonesense! In a real organization that would be very cumbersome and not realistic. However, I believe with a nice tool like the Visual Composer, the first human task can be elegantly replaced with an VC UI that would launch the BPM process. It is nice and easy to model w/o any coding.

    (0) 
    1. Martin Möller Post author

      Hi,

      Thanks a lot for your valuable feedback.

      Of course you have the free choice when it comes down to picking the UI technology. In older releases WD Java, VC, WD ABAP CHIPs or Adobe Offline Forms are supported, cf.

      http://help.sap.com/saphelp_nw73ehp1/helpdata/en/9d/f22b87282e4abd8f156192bba26be0/content.htm

      Recently ‘Custom UI Integration’ has been introduced which gives you even more flexibility, cf.

      http://help.sap.com/saphelp_nw73ehp1/helpdata/en/75/5af4cc186441009a75fd660adc0617/content.htm

      Last, but not least there is the BPM Public API in case you want to kick of processes in a completely other way, cf.

      http://help.sap.com/saphelp_nw73ehp1/helpdata/en/9a/eebbdf59b94c3c82af598db638b0d0/content.htm

      Best regards,

      Martin

      (0) 
  3. Gareth Ryan

    Brilliant.  Completely agree that a “human start event” would be a brilliant addition to the NW BPM capabilities.  Typically, I end up building a Java WD application as a starting point for BPM’s but this just feels ‘clunky’ – I’ll definitely be trying out your suggestion and code above…

    Thanks,

    Gareth.

    (0) 

Leave a Reply