Wednesday, January 19, 2011
Top 10 wish list for BOP4 fix pack 1.
One of the reasons is the expected major release for Cordys BOP4: Fix Pack 1! (Maybe already in Q1?)
Though already am a “fan” of the current product (See my blog: Why Cordys BOP4) I have my top 10 wish list ready:
1. BPMN 2.0
As the formal release of BPMN 2.0 is due soon, and 99 percent of the standard is stable I hope for a solid support of this standard in FP1.
Especially extension of the event- and signaling mechanisms, and the addition of compensation constructs would be valuable features!
2. Data modeling
Currently it is possible to define data structures in BOP4. Additional UML class diagram-like modeling would greatly support the process of defining and communicating the business object model in a graphical way. Obviously MDM would profit too.
3. BAM Usability
As I already wrote in an earlier BLOG BAM Imperfections there are several possibilities to improve usability and flexibility of BAM. The good news is that Cordys already committed to these improvements, so expectations are high!
4. Document support BPM
Case Management already supports a kind of out-of-the-box document management. It seems little investment to allow documents to be attached to BPM Instances as well. This would prevent the need for a custom solution based on an external DMS or database solution.
5. Simulation
A fair simulation environment would be a welcome extension to the BOP4 stack. It should allow for defining the expected loads and spread, and the characteristics of the resource capacity. Reports over the simulation runs should allow for proper analysis and process optimization.
6. Complex Event Processing (CEP)
In automated environments where decision making is depending on the combination of several (types of) events Complex Event Processing (CEP) is a must-have. Addition of a CEP module would greatly increase the applicability of BOP4.
7. “Hot” business rules
BOP4 offers great facilities of defining business rules and decision tables. The feature of allowing business to “hot modify” the (values/business parameters of) rules without having to republish or redeploy them would increase the flexibility of the concerned business processes.
8. User interface: modeling versus scripting
For some fairly basic UI functions it takes java scripting in BOP4 (Example: the invocation of a business process). It would improve development efficiency to allow developers to model such behavior instead of scripting it.
9. BPM Complex Mapping
The BPM data mapping possibilities in BOP4 are quiet sophisticated. However certain types of mappings are not yet supported in the BPM mapping tool, where the underlying technology XSLT would allow so. Example: the mapping of two lists onto each other. One of the work arounds is to model these mappings in the BPM itself, obscuring the intended business functionality. Extension of the mapping functionality would prevent this necessity.
10. Reporting
Where BOP4 offers fairly advanced BAM functionality, plain reporting functionality is missing.
As the Cordys Process Factory (CPF) offers reporting functionality it should also not be rocket science to get it available for BOP4 too.
As Cordys claims the BOP4 product itself is the most valuable marketing instrument I have great expectations and I hope that (a late Santa) will generously fill my sock!
Harald van der Weel
Tuesday, August 3, 2010
Event-state modeling in Cordys
Case
It’s functionality is mainly to receive, validate and route messages between parties in a specific business segment over different channels.
Implementation
- Monitor-process: A process that describes the state model
- HandleMessage-process: A process that is started on new receives new messages and that triggers events.
- WaitForEvent-process: A process that actually waits for an event to be triggered by HandleMessage, where the message is passed
- StateTransitions-decision table: A decision table containing all valid state transions that can be triggered by a message.
- InstanceCorrelation- database table: A database table for storage of the instance id and correlation id
Monitor-process
WaitForEvent-process
Monitor specifies two main parameters to the WaitForEvent-sub process: The current state of Monitor and the Correlation Id that belongs to the conversation.
The first step in the WaitForEvent is to store its Instance Id in a “InstanceCorrelation” table, together with the Correlation Id before invoking the “Receive Message” step. (See also my previous blog “Events in Cordys”).
If a message is received that is not an expected successor of the current state, an exception occurs that ought to be handled. (In our case we simply log an “Unexpected Message” error). After this the process waits for a next event to be triggered.
If the message that is received is expected however, the decision table returns the “new state”, which is returned to the monitoring process. Before returning to the monitor however first the InstanceCorrelation table is cleaned up by removing the record that was inserted at the beginning of the process.
HandleMessage-process
HandleMessage is triggered at reception of a new message. It first uses the correlation id in the message to look up a corresponding Instance Id of a waiting process in the InstanceCorrelation table. If no such record is found, we use the decision table to check if the event is an start-event for a new conversation. If so, a new process instance of Monitor is started -via the invokation of a generated Web Service on Monitor- and passing the message.
Regards,
Monday, August 2, 2010
Events in Cordys
In certain occassions BPM processes need to able to process events.
Consider the example of a sales process (e.g. CloseDeal) that sends a quote to a customer and waits for the response.
Handling client responses may be the task of a separate process (e.g. ReceiveQuotationResponse) which listens to a specific channel (e.g. SMTP) for customer messages. Once a response (e.g. a reply on a quote) is received it simply should be passed on to the waiting process (CloseDeal), to allow it to process the response and continue.
The good news is that BPMN provides an event mechanism via “Send Message” and “Receive Message” steps. Though implementation of a case similar to the one above in Cordys BOP-4 (CU9) is a bit more complicated than one would expect. The issue is that Cordys supports only the Send Message step for child-processes to trigger an event in a parent process.
In our case this is not sufficient, as ReceiveQuotationResponse is not an child but an independent process.
Fortunately Cordys offers a work-around:
It allows to start new and to continue existing (waiting) process instances by using an “ExecuteProcess” webservice.
The process to be notified of the event (CloseDeal in our example case) should include a “Receive Message” step at the position where the notification event is expectewd (e.g. just after sending the quotation).
In the properties of the “Receive Message” step the input message must be set. This is the (Process Specific defined) message that is expected with the notification.
This invocation has 3 mandatory input parameters to be set:
- The field “type” must contain (the literal) “instance”
- The field “message” must contain a correct (and complete) message instance of the type that is expected by the waiting process (and hence is having the same definition as the one in the “Receive Message).
- The field “receiver” should contain the correct instance id of the waiting process. The instance id can be obtained from the instance properties (instance:identifier) of the waiting process.
The solution I developed requires a correlation id. The correlation id is an identifying field that is available in both processes and equal in instances of of these processes that are related in this context. In case of the sales process the Quotation Id may be used for instance.
The waiting process stores the instance id together with the correlation id in a database table. The notifying process may use the correlation id (e.g. received in the customer message) to retrieve the instance id, and use pass this with the ExecuteProcess invocation.
In concrete the solution requires:
- A database table, consisting of (at least) two fields: CorrelationId (primary key) and InstanceId (and an access web services)
- Two steps (at least) in de the process that should receive the notification:
o The step is to store the instance id with in de database together with the correlation id
o The second is a “Receive Message” step
- Two steps (at least) in the notifying process
o The first to read the instance id based on the correlation id
o The second to invoke the ExecuteProcess