tag:blogger.com,1999:blog-62917758631151382922024-02-21T01:20:04.723+01:00BPM and Cordys BOP4This BLOG address Cordys BOP4 (BOP-4) and other BPM related articles.Harald van der Weelhttp://www.blogger.com/profile/13352602368388711191noreply@blogger.comBlogger15125tag:blogger.com,1999:blog-6291775863115138292.post-63024810958276748402011-09-18T22:50:00.000+02:002011-09-18T22:50:58.157+02:00Cordys BOP4.1 to be releasedOk, we have been waiting for it for quite some time now...<br />
However -at last- on Cordial 2011 Cordys announced that Fix Pack 1 for BOP4 (commercial name: BOP4.1) is to be released before the end of this month!<br />
<br />
Those who are familiar with my blogs will understand that I was very eager to find out all about the new “goodies” packed in this new release.<br />
<br />
At Cordial11 we were presented a brief overview of the new features of BOP4.1 and the roadmap for future capabilities. Though it was not completely clear to me what exactly is in scope for 4.1 and what not I would like to share the global picture of my perception of the new features of BOP4.1.<br />
<br />
<b>BAM KPI-s simplified<br />
</b>In BOP4 implementing BAM is fairly cumbersome. To have an idea: it involves five different kinds artifacts in BOP4 to report on KPI-s. <br />
In BOP4.1 Cordys allows to define a KPI right where it belongs: in the BPM itself. This KPI is directly usable in dashboards. This is a big improvement for productivity, maintainability and transparency.<br />
<br />
<b>Document support in BPM-s<br />
</b>In BOP4 extensive document handling was only offered in Case Management. <br />
BOP4.1 supports this now for BPM-s as well by allowing users to attach documents to process instances. Design time It will be possible to control (per activity) the types of documents that are allowed and the according access rights for the documents for different roles and users.<br />
<br />
<b>Multi language support<br />
</b>BOP4 offered very limited language support. <br />
This should drastically improve in BOP4.1. Every language sensitive element in Cordys will be candidate subject to multi language support. Integration of BOP4.1 with Google Translate ensures that only a minimum of effort is required to create the required language tables. <br />
<br />
<b>Social Collaboration <br />
</b>BOP4.1 allows multiple developers on remote locations to simultaneously alter or review artifacts, like BPM-s and User Screens. Changes will be immediately visible available to all participants. During this process they can interact with each other, e.g. through real time messaging. <br />
<br />
<b>Document Generation<br />
</b>BOP4.1 supports documentation generation on BPM-s.<br />
To be honest the demonstrated documentation looked rather plain and technical in my eyes, so I expect the intended audience is development. I am not really convinced if this will add much value. In my opinion models and structure should be “self explanatory” anyway (according to the agile paradigm), and all information is available in a structured way in the Cordys repository.<br />
<br />
<b>Multi browser support<br />
</b>Cordys claims that BOP4.1. will be supported by all widely accepted web browsers, like Safire, Google Chrome and Firefox. This is simply good news, as we already have seen customer requirements on browser support!<br />
<br />
<b>MDM modeling<br />
</b>BOP4.1 has improved MDM modeling capabilities. <br />
In BOP4 I have used MDM hub and spoke only because it was required for BAM. Therefore it is hard to value this enhancement. <br />
<br />
<b>Process Instance Management (PIM) improvements<br />
</b>BOP4.1 will offer enhancements in PIM. One of the demonstrated capabilities is that it is possible to have BAM-like overviews on the status for specific users: What is their current work load, what is their productivity etc. <br />
In the roadmap session I saw a demo of social capabilities as well, like being able to obtain all kind of information of participants in work lists and the possibility to interact with them though different social media. It is unclear to me to which extent this functionality will be in scope for BOP4.1.<br />
<br />
<b>Integration CPF-BOP4.1<br />
</b>BOP4.1 will provide integration with Cordys’ PaaS solution “Cordys Process Factory” (CPF): A logical step to improve the cloud capabilities of BOP4.1. Unfortunately we did not see a demo of this, so I cannot value this enhancement at this moment.<br />
<br />
<b>Deployment features <br />
</b>BOP4.1 will offer deployment enhancements by changing the ISV Package structure.<br />
This should allow for easier, safer and better controlled deployments. It should improve productivity for administration and reduce the risk of errors.<br />
<br />
<b>Other enhancements and improvements:<br />
</b>A number of enhancements in BOP4.1 will likely increase development productivity to some extend:<br />
- Context sensitive options for constructs in the BPM models (like I have already seen in e.g. SAP BPM). This means that when selecting e.g. an activity the developer can immediately see what the possible connectable constructs are and the required one can be selected. <br />
- Zoom functionality (Handy for larger models. On the other hand: Do we want models to be large?)<br />
- Improved process messaging (In BOP4 this was a bit cumbersome -having to use process instance ids-, as I wrote on in my earlier Blogs)<br />
- E-Mail integration (E.g. easier to make mail templates)<br />
<br />
Overall BOP4.1 looks like indeed it will offer some significant enhancements. <br />
Currently I am personally most happy with multi browser support, multi language support, the new BAM and document management. I would really like to lay my hands on those.<br />
<br />
I will address my next blog to the features that I am still missing in BOP4.1 and the roadmap of Cordys.<br />
<br />
Regards, Harald van der WeelHarald van der Weelhttp://www.blogger.com/profile/13352602368388711191noreply@blogger.com0tag:blogger.com,1999:blog-6291775863115138292.post-39412020974418015092011-01-19T14:48:00.000+01:002011-01-19T14:48:45.021+01:00Top 10 wish list for BOP4 fix pack 1.2011 will be an exciting year!<br />
<br />
One of the reasons is the expected major release for Cordys BOP4: Fix Pack 1! (Maybe already in Q1?)<br />
<br />
Though already am a “fan” of the current product (See my blog: <a href="http://cordysupdate.blogspot.com/2010/10/why-cordys-bop4.html">Why Cordys BOP4</a>) I have my top 10 wish list ready:<br />
<br />
<br />
<b>1. BPMN 2.0<br />
</b>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.<br />
<br />
Especially extension of the event- and signaling mechanisms, and the addition of compensation constructs would be valuable features!<br />
<br />
<b>2. Data modeling<br />
</b>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. <br />
<br />
<b>3. BAM Usability<br />
</b>As I already wrote in an earlier BLOG <a href="http://cordysupdate.blogspot.com/2010/09/bop-4-bam-inperfections.html">BAM Imperfections</a> 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! <br />
<br />
<b>4. Document support BPM<br />
</b>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.<br />
<br />
<b>5. Simulation<br />
</b>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.<br />
<br />
<b>6. Complex Event Processing (CEP)<br />
</b>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.<br />
<br />
<b>7. “Hot” business rules<br />
</b>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.<br />
<br />
<b>8. User interface: modeling versus scripting<br />
</b>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.<br />
<br />
<b>9. BPM Complex Mapping<br />
</b>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.<br />
<br />
<b>10. Reporting<br />
</b>Where BOP4 offers fairly advanced BAM functionality, plain reporting functionality is missing. <br />
As the Cordys Process Factory (CPF) offers reporting functionality it should also not be rocket science to get it available for BOP4 too.<br />
<br />
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! <br />
<br />
<br />
<i>Harald van der Weel<br />
</i>Harald van der Weelhttp://www.blogger.com/profile/13352602368388711191noreply@blogger.com5tag:blogger.com,1999:blog-6291775863115138292.post-86034004869876965682011-01-14T12:48:00.004+01:002011-01-14T13:10:30.593+01:00Getting started with BOP4: Cordys Academy self study Training <br><span id="internal-source-marker_0.813569466265932" style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">I have received several requests to inform people on “how to start off with BOP4”:</font></font></font></span><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Where to begin, how to learn about the features and how to get hands-on experience?</font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">The good news: Cordys has recognized this need!</font></font></font></span><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">One of the reasons I have become eager to adopt Cordys BOP4 is the simple fact that Cordys Academy offers high quality training facilities.</font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Not just the conventional classroom courses: Also a great computer based BOP4 fundamentals! For free, and it can be taken anytime, anywhere!</font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">The Cordys Academy is offering basically a complete package, consisting of the following:</font></font></font></span><br><br><p style="margin-left:20pt"><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">-</font></font></font></span><span style="font-style:normal;vertical-align:baseline"> </span><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000"><b>Self study environment </b></font></font></font></span></p><p><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Link:</font></font></font></span><a href="https://wiki.cordys.com/display/acorg/Cordys+BOP-4+Self+Study+Training+Environment"> <span style="font-style:normal;vertical-align:baseline"><font size="2"><font face="calibri"><font color="#800080"><u>https://wiki.cordys.com/display/acorg/Cordys+BOP-4+Self+Study+Training+Environment</u></font></font></font></span></a></p><p style="margin-left:20pt"><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">-</font></font></font></span><span style="font-style:normal;vertical-align:baseline"> </span><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000"><b>Fundamentals Tutorial</b></font></font></font></span></p><p><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Link:</font></font></font></span><a href="https://wiki.cordys.com/display/acorg/Cordys+Fundamentals+BOP-4"> <span style="font-style:normal;vertical-align:baseline"><font size="2"><font face="calibri"><font color="#800080"><u>https://wiki.cordys.com/display/acorg/Cordys+Fundamentals+BOP-4</u></font></font></font></span></a></p><p style="margin-left:20pt"><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">-</font></font></font></span><span style="font-style:normal;vertical-align:baseline"> </span><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000"><b>Several advanced topics (“Training extensions”)</b></font></font></font></span></p><p><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Link:</font></font></font></span><a href="https://wiki.cordys.com/display/acorg/Training%20extensions"> <span style="font-style:normal;vertical-align:baseline"><font size="2"><font face="calibri"><font color="#800080"><u>https://wiki.cordys.com/display/acorg/Training%20extensions</u></font></font></font></span></a></p><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Access to these sites only requires registration.</font></font></font></span><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">This can be arranged instantly through any of the links above. Each will result in the login screen below:</font></font></font></span><br><br><img height="283" src="https://lh3.googleusercontent.com/SR6TlUzp7EXiWlDtGkaOJofQ7MIMdNeaY9k4_4GG7gRYh3vpJYmAiwhj_Anvi0WHHz7IvDV7dRswdp_dLHK-cWSdxI6WTyl8WktRKJ8uH_kBAjB8qw" width="436"><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Selecting “New User? Register here” will show the form below.</font></font></font></span><br><img height="365" src="https://lh3.googleusercontent.com/9tQh2qM6Zb2RS9AhMbUDmVi_bU_gGPKTcEx8vihvlV4pnXuD6Pu15n3vqGmbEqaAaNK_YyO0Y8CzEFqtvgpSLKGdBNr2yfRqbXNazBR3kpcyEVuHSg" width="437"><br><span style="font-style:normal;vertical-align:baseline"> </span><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Complete the form and follow further instructions to register.</font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Once done… you are ready to “play”!</font></font></font></span><br><span style="font-style:normal;vertical-align:baseline"> </span><br><span style="font-style:normal;vertical-align:baseline"><font size="4"><font face="calibri"><font color="#000000"><b>Self study environment</b></font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">The self study environment (I’ll call it “sandbox”) is nothing but a single downloadable VM-ware image!</font></font></font></span><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">It is configured as a complete Cordys server the provides all main functionality.</font></font></font></span><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Apart from allowing “students” to do all practical exercises in the tutorials, it even would allow you to do a complete project (for the 3 months license period at least)</font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Provided you have a VM Ware player (free downloadable at</font></font></font></span><a href="http://www.vmware.com/"> <span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#800080"><u>http://www.vmware.com/</u></font></font></font></span></a><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000"> ), setting it up simply requires the following steps:</font></font></font></span><br><p style="margin-left:20pt"><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">1.</font></font></font></span><span style="font-style:normal;vertical-align:baseline"> </span><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Download the zipped VM Ware environment (It is rather big: Zipped about 2Gb, unzipped about 6Gb)</font></font></font></span></p><p style="margin-left:20pt"><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">2.</font></font></font></span><span style="font-style:normal;vertical-align:baseline"> </span><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Unzip the VM environment</font></font></font></span></p><p style="margin-left:20pt"><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">3.</font></font></font></span><span style="font-style:normal;vertical-align:baseline"> </span><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Run the VM image</font></font></font></span></p><p style="margin-left:20pt"><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">4.</font></font></font></span><span style="font-style:normal;vertical-align:baseline"> </span><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Start a browser session (for the moment IE7 or IE8)</font></font></font></span></p><p style="margin-left:20pt"><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">5.</font></font></font></span><span style="font-style:normal;vertical-align:baseline"> </span><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Go to the startup URL (Specified in the Setup and User guide)</font></font></font></span></p><p style="margin-left:20pt"><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">6.</font></font></font></span><span style="font-style:normal;vertical-align:baseline"> </span><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Start using Cordys BOP4, provided a default Student1</font></font></font></span></p><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">(If still more info is required: The steps above are well explained in a “Setup and User guide”, that can be downloaded from the “self study environment” page)</font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">This sandbox allows to manage users and provide them with the necessary roles to develop, test, deploy, execute and monitor almost any Cordys work product. The sandbox even allows to use an external SVN version control system to store and version all work products externally from the VM Environment.</font></font></font></span><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">The sandbox even provides an example MySQL database with content and web services.</font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">The link to the Self Study Environment is:</font></font></font></span><a href="https://wiki.cordys.com/display/acorg/Cordys+BOP-4+Self+Study+Training+Environment"> <span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#800080"><u>https://wiki.cordys.com/display/acorg/Cordys+BOP-4+Self+Study+Training+Environment</u></font></font></font></span></a><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">, which invokes the page below.</font></font></font></span><br><img height="327" src="https://lh4.googleusercontent.com/J1m7sYhSvWeDya4SdQl7fLdWjf8Xfa7qtKq3N_fYpZf_T2vRd6erosT2HiLSwEO8g6sYQ0ig1IvnG3cBbSYyqooWde7exDbt2Lon2BfLzYLCEHLbPA" width="440"><br><br><span style="font-style:normal;vertical-align:baseline"><font size="4"><font face="calibri"><font color="#000000"><b>Fundamentals tutorial</b></font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">The fundaments tutorial teaches novice Cordys BOP4 users everything to know about the BOP4 environment.</font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Multiple tutorial “chapters” take the user sequentially through all necessary subjects, in order to make a start with Cordys BOP4.</font></font></font></span><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Each chapter contains theoretical information (documents and presentations) and hands-on exercises to practice the learned skills. The exercises are very concise and even suitable for people with very limited technical skills.</font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Subjects that are covered are:</font></font></font></span><br><p style="margin-left:20pt"><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">-</font></font></font></span><span style="font-style:normal;vertical-align:baseline"> </span><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Overview and introduction to the Cordys environment</font></font></font></span></p><p style="margin-left:20pt"><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">-</font></font></font></span><span style="font-style:normal;vertical-align:baseline"> </span><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Managing users and setting up a new project</font></font></font></span></p><p style="margin-left:20pt"><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">-</font></font></font></span><span style="font-style:normal;vertical-align:baseline"> </span><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Developing business processes (BPMN models)</font></font></font></span></p><p style="margin-left:20pt"><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">-</font></font></font></span><span style="font-style:normal;vertical-align:baseline"> </span><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Developing and using services</font></font></font></span></p><p style="margin-left:20pt"><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">-</font></font></font></span><span style="font-style:normal;vertical-align:baseline"> </span><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Developing user interfaces</font></font></font></span></p><p style="margin-left:20pt"><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">-</font></font></font></span><span style="font-style:normal;vertical-align:baseline"> </span><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Developing workflows</font></font></font></span></p><p style="margin-left:2pt"></p><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">The exercises of each module should be executed sequentially, because there are certain dependencies between them.</font></font></font></span><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">They will provide a starting developer with the basic skills to build and run simple BPM solutions.</font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Note that doing all tutorials will take between about 3 and 5 days to finish, depending on your experience in similar environments.</font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">The link</font></font></font></span><a href="https://wiki.cordys.com/display/acorg/Cordys+Fundamentals+BOP-4"> <span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#800080"><u>https://wiki.cordys.com/display/acorg/Cordys+Fundamentals+BOP-4</u></font></font></font></span></a><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000"> takes you to the page below. The order of the modules is Top-Down</font></font></font></span><br><img height="521" src="https://lh4.googleusercontent.com/TOZ4fIn5UaXcr0xk2z8f3Q_WY1z55F4VN04PYIRJQ67a0kjpFpVaASN4WjKyW2qe3mU8p0Q9DlPkIUhNAiY_B_jTnq2iKrnZrPP3EjUMxqhUNRMyhQ" width="488"><br><br><span style="font-style:normal;vertical-align:baseline"><font size="4"><font face="calibri"><font color="#000000"><b>Training extensions</b></font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">A number of advanced BOP4 topics are offered in “Training Extensions”.</font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">This concerns topics that elaborate certain topics in the fundamentals, but also subjects that have not been covered yet before (like Business Activity Monitoring (BAM) or Case Management).</font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">In case of requiring more in-depth knowledge or considering certification these training extensions are a valuable source of information.</font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">The link</font></font></font></span><a href="https://wiki.cordys.com/display/acorg/Training%20extensions"> <span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#800080"><u>https://wiki.cordys.com/display/acorg/Training%20extensions</u></font></font></font></span></a><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000"> will take you to the following page:</font></font></font></span><br><img height="296" src="https://lh5.googleusercontent.com/zB2IOHPMvsX5eOowVCIwHbzJD0gTMzENWDBd4WvFPqc1GSdky8AqoF5fGXmhSgj_Qp7X9T9_5Wj9l3HbwjNTW7I9ceItQ5tHHjV5CIJg0qVHIK11Qg" width="485"><br><br><span style="font-style:normal;vertical-align:baseline"><font size="4"><font face="calibri"><font color="#000000"><b>Conclusion</b></font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Cordys provides great means for organizations and users to gain knowledge about the BOP4 product from scratch at no (direct) cost.</font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Please bear in mind:</font></font></font></span><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">A computer based training may provide you a good starting point. Effective skills are mostly built up by actually applying them in a practical situation.</font></font></font></span><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">I would advise starting teams to involve an experienced developer/solution architect, for a number of reasons, like:</font></font></font></span><br><p style="margin-left:20pt"><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">-</font></font></font></span><span style="font-style:normal;vertical-align:baseline"> </span><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">It provides a direct productivity gain</font></font></font></span></p><p style="margin-left:20pt"><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">-</font></font></font></span><span style="font-style:normal;vertical-align:baseline"> </span><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">It helps to properly setting up the project and guidelines</font></font></font></span></p><p style="margin-left:20pt"><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">-</font></font></font></span><span style="font-style:normal;vertical-align:baseline"> </span><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">It will (cross)-train your inexperienced team</font></font></font></span></p><p style="margin-left:20pt"><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">-</font></font></font></span><span style="font-style:normal;vertical-align:baseline"> </span><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">It will solve “blocking issues” faster</font></font></font></span></p><p style="margin-left:20pt"><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">-</font></font></font></span><span style="font-style:normal;vertical-align:baseline"> </span><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">You may profit of the network of the experienced developer</font></font></font></span></p><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Good luck to all new Cordys BOP4 adopters.</font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="calibri"><font color="#000000">Hope to meet you in a future project!</font></font></font></span><br>Harald van der Weelhttp://www.blogger.com/profile/13352602368388711191noreply@blogger.com3tag:blogger.com,1999:blog-6291775863115138292.post-1870067444098292262011-01-05T17:16:00.007+01:002011-01-05T17:36:11.757+01:00My road to BOP4 certification<p style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;">I have been a satisfied Cordys consultant for some time. This may be no surprise for the ones having read my BLOGs the past few months. </span></span><span style="font-size:100%;"><span style="font-family:Calibri;">Though I am still looking at “other fish in the sea” I felt I was ready for a new step in my relationship with Cordys BOP4 and I wanted to take things to the next level: Certification!<br /><br /></span></span></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-family:Calibri;"></span></p><p style="MARGIN: 0cm 0cm 0pt"></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;">As I was confident about my knowledge and experience I decided to subscribe for certification, even before knowing the exact procedure. Remembering earlier certifications like RUP, PMBok, Prince2, ITIL and Java, I was expecting an on-site computer based theory exam. So I blocked a day to travel to Cordys in the beautiful surroundings of Putten. At the meantime I chose a nice piece of wall in my office to proudly present my future Cordys certificate!<br/><br /><br /></span></span></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-family:Calibri;"></span></p><p style="MARGIN: 0cm 0cm 0pt"></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;">I read the Cordys certification site and spoke to two primer Cordys employees who had taken the exam as well. How (happily) surprised I was to found out the complete exam could be taken from my own office! (Good news in an overcrowded country like the Netherlands, where distances are short, but travel times sometimes long!).</span></span></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-family:Calibri;"></span></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;">I was less thrilled to find out it wasn’t just a theoretical exam I had to take, like the ones of several other BPM vendors. It would not as simple as that! Apart from an 80 question theory exam, I would be exposed to a practical exam and an web cam interview before a commission! </span></span></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;">It was getting clear to me that Cordys does not hand out a certification to just anyone who is able to spell out “BOP4”. <br/><br /></span></span></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;">I felt obliged to do a little more of preparation than initially planned, which was a bit of a pain in these busy times. On the other hand: The value of the future certificate would be a lot higher because this higher threshold!</span></span></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-family:Calibri;"></span></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-family:Calibri;font-size:100%;">I ordered the certification exam via </span><a href="https://certification.cordys.com/"><span style="font-family:Calibri;font-size:100%;color:#800080;">https://certification.cordys.com</span></a><span style="font-size:100%;"><span style="font-family:Calibri;">, and selected the date I already blocked. </span></span></p><p style="MARGIN: 0cm 0cm 0pt"></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;">The learning path for the theory requirements showed – though I already had considerable hands on experience with BOP4 - there were still a lot of details to know, as I (appearently) hadn’t touched every dark corner of BOP4 during the projects.</span></span></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;">The good thing was that the windy road through the BOP4 documentation provided me with a number new insights. Cool! I was even increasing my knowledge, instead of just proofing it.<br/><br /></span></span></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-family:Calibri;"></span></p><p style="MARGIN: 0cm 0cm 0pt"></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;">Then the moment was there! </span></span></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;">On the date the exam was scheduled I could pick my own time to take the theory exam, within the timeframe of 24 hours. </span></span><span style="font-size:100%;"><span style="font-family:Calibri;">I just needed to visit the certification dashboard and press the “take exam” button. </span></span></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;">The game was on! </span></span></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-family:Calibri;"></span></p><p style="MARGIN: 0cm 0cm 0pt"></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;">In 60 minutes 80 various multiple-choice questions were fired at me, of which at least 75 percent had to be answered correctly. The exam tool allowed to mark questions to review them later (provided there is still time left!). 80 questions in an hour is a fair amount, but it is easy to spend too much time in rethinking the alternatives. I needed my time so I just had about 10 minutes left to reconsider the questions I was not sure about. I did not have to use the “end exam” button: After 60 minutes the exam ended automatically. </span></span></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;">The certification site then asked me politely for some patience to determine the outcome… And… after a short while I was congratulated! I had passed the theoretical part of the exam! And – more important - the prerequisite to take the second, practical part.<br/><br /></span></span></p><p style="MARGIN: 0cm 0cm 0pt"></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;"></span></span></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;">The certification site presented me with 6 practical exercises to solve. All should be finished within a week. </span></span></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;">I have the disposition of a local BOP4 environment, however I decided to use the VM-ware environment provided by Cordys: It provides the North-Wind demo, and likely some of the artifacts or database tables could be reused in the exam exercises.</span></span></p><div style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;">The exercises concerned mainly (combined) UI, BPM and business rules tasks. Of some it took some time to interpret the exact purpose of each assignment, but in the end it was rather obvious what was expected. I decided to start right away, and managed to fulfill the questions in roughly an hour each, including interpretation and testing. Indeed I was able to reuse some NorthWind database tables and webservices, so that was a little advantage.</span></span></div><div style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;">After reviewing the solutions again the next day I was sure enough to submit the results. This was just a matter of synchronizing the workspace and zipping and sending the synchronized folder to the certification commission.</span></span></div><p style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;">After submitting the certification site stated that it would maximally take 3 weeks before I would hear whether I would be conducted to an interview.<br/><br /></span></span></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-family:Calibri;"></span></p><p style="MARGIN: 0cm 0cm 0pt"></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;">It appeared to take only a couple of days before I received (and confirmed) an invitation. As required I purchased a webcam and prepared my google environment for the video conference.</span></span></p><p style="MARGIN: 0cm 0cm 0pt"></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;">The interview was conducted by the certification program manager and the product manager. Basically I had to explain each solution, and answer additional questions about them. My experience and knowledge proved to be sound: as I was capable of coming up with all the answers. </span></span></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;">After more than an hour we finished discussing all exercises and the interview was over.</span></span></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;">For a third time I was kindly requested to wait for a verdict. <br/><br /></span></span></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-family:Calibri;"></span></p><p style="MARGIN: 0cm 0cm 0pt"></p><div style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;">Confident I waited the result. Only after a quarter of an hour I was informed by a colleague who learned via Cordys Twitter that I was certified! Not long after that I received a formal confirmation mail as well. It was official: I had entered the world of Certified Cordys consultants! </span></span></div><div style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;">Though I had some expectations I felt pretty relieved after the three-stage-procedure that lasted over a week! What made me especially proud was the score of 98% in the practical part.</span></span></div><p style="MARGIN: 0cm 0cm 0pt"></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;"></span></span></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;"><br/><br />And now? <br/><br /></span></span></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;"></span></span></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-size:100%;"><span style="font-family:Calibri;">Now we’re even more ready for all those fine BPM projects that will use BOP4!</span></span></p><p style="MARGIN: 0cm 0cm 0pt"></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-family:Calibri;font-size:100%;"></span></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-family:Calibri;font-size:100%;"></span></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-family:Calibri;font-size:100%;"><br/><br />Best Regards and a fruitful 2011, <br/></span></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-family:Calibri;font-size:100%;"></span></p><p style="MARGIN: 0cm 0cm 0pt"><span style="font-family:Calibri;font-size:100%;"><br/>Harald van der Weel</span></p>Harald van der Weelhttp://www.blogger.com/profile/13352602368388711191noreply@blogger.com7tag:blogger.com,1999:blog-6291775863115138292.post-75296646178578377272010-10-19T13:23:00.001+02:002010-10-19T13:23:48.132+02:00Why Cordys BOP4 <div style="margin:0cm 0cm 0pt"><font face="Calibri"><font size="3">Since the latest “rebrand” of BOP4 is this Cordys BPM -stack divided in three suites: CAF, BPMS and SOA grid. </font></font></div><p style="margin:0cm 0cm 0pt"><font face="Calibri"><font size="3">They each map to a specific level in the 5-tier model:</font></font></p><p class="MsoListParagraph" style="margin:0cm 0cm 0pt 36pt"><font face="symbol"><font size="3">·</font> </font><font face="Calibri"><font size="3">CAF (Composite Application Framework) implements the Presentation-tier. It includes User Interface + Task Management + Composite Applications.</font></font></p><p class="MsoListParagraph" style="margin:0cm 0cm 0pt 36pt"><font face="symbol"><font size="3">·</font> </font><font face="Calibri"><font size="3">BPMS (BPM Suite) embodies the “Process” tier. It consists of BPM + BAM + Business Rules + Case Management.</font></font></p><p class="MsoListParagraph" style="margin:0cm 0cm 0pt 36pt"><font face="symbol"><font size="3">·</font> </font><font size="3"><font face="Calibri">The SOA Grid represents the Services/Integration tier. It contains of MDM, SOA / ESB and Business Services.</font></font></p><p style="margin:0cm 0cm 0pt"> </p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">BPMS can be considered as the core of BOP4, containing the primary BPM artifacts. CAF and SOA complete the stack, to allow the development of complete solutions, including user interaction and services integration.</font></font></p><p style="margin:0cm 0cm 0pt"> </p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">Other vendors like Tibco and Oracle do package and sell their BPM solutions as complete suites as well. Under the hood these stacks consist of multiple separate products (glued together), each with a specific purpose and (development / runtime) environments. </font></font></p><p style="margin:0cm 0cm 0pt"> </p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">The Tibco stack alone contains e.g. iProcess (BPM execution and design), Business Studio (BPMN design), Business Works (BW - develop services), iDecisions (Business Rules), Active Matrix (ESB), Rendevous and EMS (Messaging), General Interface (GI - Presentation) and iAnalytics and Spotfire (BAM). </font></font></p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">BW (as successor of IM) and the Messaging products EMS and Rendezvous can be considered as the core products that made Tibco big. The other products were either developed or bought (E.g. iProcess, iAnalytics and iDecisions are originally Staffware products) to complete the Tibco stack and respond to the market, that has shifted from EAI towards BPM over the past years. Integrating all these products (or better: allowing them to corporate) has resulted in a sub-optimal solution. </font></font></p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">For example: Using only iProcess/Business Studio (BPM) en BW (EAI) together already involves 3 different modeling environments, 2 runtime environments, and 2 different interfaces between BW and iProcess (one requiring EMS). It is not hard to image the complexity of administrating the stack, and developing, testing, deploying and maintaining the cross-product solutions built on it, and obviously the resulting additional cost and lead times.</font></font></p><p style="margin:0cm 0cm 0pt"> </p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">For Oracle goes a similar story. When EAI became “hot” the database giant added the Fusion stack to their data-oriented and ERP portfolio. Once Oracle recognized that their BPEL engine was not sufficient to serve the BPM market, they took over BEA to fill the gap with AquaLogic BPM stack. </font></font></p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">Apart from the integration issues of all these components another issue was introduced: In the 11g version it is still hard for Oracle to explain the coexistence of two process oriented products like Oracle BPEL and BPM in the same suite. Though Oracle states that BPEL should be used for short-lived processes where BPM is intended for long-lived processes this is a rather artificial distinction, as the BPM product can do both!</font></font></p><p style="margin:0cm 0cm 0pt"> </p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">In order to prevent stepping in these pitfalls Cordys has deliberately chosen for an alternative approach. The Baan company invested considerable time (2 years!) and money to hide inside a lab developing the BPM product stack “Business Operations Platform 4” (or simply BOP4). This suite is effectively one solid integrated stack. The same web application may be used by Business Analysts, UI-, Service- or BPM developers, testers, administrators and users to do “their job”. </font></font></p><p style="margin:0cm 0cm 0pt"> </p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">The so called “Composite Application Framework”-environment allows to design, implement, test, deploy and run any BPM related artifact. The BOP4 authentication and authorization mechanisms supports role based security for any user role, so every user will only “see” the functionality he/she requires. Artifacts can be seamlessly combined: Web Services, roles, data structures, business rules, UI-screens, Case Models, other BPM flows… All can be added to e.g. BPM model simply by dragging and dropping it on the canvas. A button click allows to validate, publish, run, test or debug the same BPM-process. </font></font></p><p style="margin:0cm 0cm 0pt"> </p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">Cordys promotes the philosophy “eat your own dog food”. That implies that the same approach is used to setup the BOP4 environment itself: The stack completely web service based, just like the custom applications developed upon it. This implies that all tools and functionality provided by the BOP4 environment are available to use as a web service and used in the custom application! (E.g. user management).</font></font></p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">Deploying applications itself is a simple 2 step process, that allows for a complete project to be packaged and deployed on a different environment. </font></font></p><p style="margin:0cm 0cm 0pt"> </p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">It is not hard to imagine that facilitates quick time-to-market solutions, Something that has been proved by our projects. Combined with the claim of Cordys that the product is linear scalable it BOP4 is surely a strong proposition. As Cordys BOP4 is completely based upon open standards (e.g. BPMN, SOAP, JMS, XForms, SAML and XML / XPath / XSLT), the risks for vendor buy-in are limited.</font></font></p><p style="margin:0cm 0cm 0pt"> </p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">Does this all sound too much as a sales pitch? Please forgive an BPM-consultant for being enthusiastic about a product that does what he really needs! </font></font></p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">Surely: We had some issues with the first versions of BOP4, due to immaturity (Since CU4 stability has increased significantly!). And yes, not all components are completely “ready” (like BAM). </font></font></p><p style="margin:0cm 0cm 0pt"> </p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">However due to BOP4-s solid architecture and the eagerness of Cordys to offer a top-of-the-bill BPM stack these drawbacks will be a matter of time. And they should, as Cordys claims: The strongest marketing tool of BOP4 is the product itself.</font></font></p><br>Harald van der Weelhttp://www.blogger.com/profile/13352602368388711191noreply@blogger.com0tag:blogger.com,1999:blog-6291775863115138292.post-61390167398841451442010-10-08T00:00:00.001+02:002010-10-08T00:00:36.294+02:00Case Management combined with BPM<div>The Cordys BOP4 BPMS suite offers -amongst other features- Case Modelling and -obviously- Business Process Modelling (BPM)</div><div> </div><div>As most of you will know BPM is based on the OMG standard BPMN and is intended for relatively well defined business processes that follow a certain sequence of steps in order to meet a certain business goal. Examples: account payable, handling purchase orders, new hires etc.</div><div> </div><div>Case Modelling is intended for processes or activities that in general may not be squeezed into a rigid flow. Each instance of a case model (case) has unique characteristics and (free format) information attached and requires a specific approach. The so-called "case workers" are in general professionals with specialized skills, who should decide per case what action to take and at what time, and what information is relevant to the case. This requires that case workers are not restricted by rigid sequences and data structures. </div><div>The generic aspects that apply to each case instance (e.g. state transitions or constraints in the order of activities) can be defined using Case Modelling, and still may leave a lot of freedom to the case worker. Case modelling is therefor more suitable in case of complex processes like insurance claims, all kind of disputes and complex loan applications.</div><div> </div><div>Can't this Case behaviour be accomplished in BPM? Obviously BPMN supports parallelism and loops, and steps may be defined as "optional". Hence it may be possible to model similar functionality in BPM, but only with additional effort. Besides that BPM is lacking specific functionality like attaching documents, work assignments and state transitions.</div><div> </div><div>There is however also some functionality that Cordys Case Management lacks in comparison to BPM, e.g. the possibility to add web-service invocation steps and the execution of business rules. </div><div> </div><div>The description and examples above may suggest that BPM and Case Modelling are mutual exclusive. I however am convinced that each process may potentially contain both BPM and Case Model characteristics.</div><div> </div><div><div>An example: A visit of a patient in a hospital may require an well defined administrative sign-up process (which could be implemented in a BPM), followed by a more more agile diagnosis or treatment (which could be a Case model).</div> </div><div>Cordys BOP4 has recognized this need, and allows to use BPM and Case Modelling together:</div><div>A BPM can be added as an activity to a Case model, and a case model can be incorporated as a step in a BPM.</div><div> </div><div>This provides us with the following options:</div><div> - Decide for each process separately whether to make it a BPM or Case Model (selecting the most appropriate)</div><div> - Make each process a BPM process that may include Case Model steps.</div><div> - Make each process a Case, that may contain BPM sequences.</div><div> </div><div>I advise to pick option 2 and make every process a BPM, and include Case Models if required. (Note that this may even be a just an start and end activity, and just a single Case Model invocation)</div><div> </div><div>There are two technical arguments to favor this option:</div><div> - Cordys BOP4 allows to generate a Web Service on a BPM (and hence invoke it from externally)</div><div> - BPM in Cordys BOP4 allows to use BAM. Selecting BPM as top-level process makes it easier to monitor the overall process state.</div><div> </div><div>Obviously future features in both BPM and/or Case Management in may influence the advise above. <br> </div><div> </div><br>Harald van der Weelhttp://www.blogger.com/profile/13352602368388711191noreply@blogger.com1tag:blogger.com,1999:blog-6291775863115138292.post-65100811443719239422010-09-27T16:00:00.002+02:002010-09-27T16:07:24.858+02:00Business Objects in BOP4 <h2 style="margin:0cm 0cm 0pt">Introduction</h2><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">Maintenance of Business Objects is required for most business processes. </font></font></div><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">MDM has an important role in enterprise data management and quality. It provides a “single point of truth” in the enterprise and allows connected processes and service to use “the latest and greatest” and clean business data. MDM therefore is the preferred way to manage business data.</font></font></p><p style="margin:0cm 0cm 0pt"> </p><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">If MDM is not in place, and business objects are not maintained in backend-applications there are mainly two ways how to maintain and persist business objects:</font></font></div><ol><li><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">A dedicated solution database</font></font></div></li>
<li><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">Object Templates</font></font></div></li>
</ol><p style="margin:0cm 0cm 0pt"> </p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">This blog will briefly zoom in into these options</font></font></p><p style="margin:0cm 0cm 0pt"> </p><h2 style="margin:0cm 0cm 0pt">Options</h2><div style="margin:0cm 0cm 0pt"> </div><h3 style="margin:0cm 0cm 0pt">1: Dedicated database</h3><div style="margin:0cm 0cm 0pt"> </div><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">This option can be compared to the traditional application development approach. From the logical data/object model a technical data model is developed. This model describes the database tables and the constraints like primary keys and relations. Based on this a database can be created, preferably separate from the Cordys database instance.</font></font></div><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">Cordys BOP4 provides the feature to query the metadata of a database, and to generate standard or customized web-services to access the database tabels. These web services should be deployed on a WS-AppServer container, before they can be used e.g. in XForms or BPM-s</font></font></p><p style="margin:0cm 0cm 0pt"> </p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">Cordys allows developers to add business rules to these web servcies in order to perform additional validations and control the lifecycle of these business objects, represented by the database tables.</font></font></p><p style="margin:0cm 0cm 0pt"> </p><h3 style="margin:0cm 0cm 0pt">2. Object Templates</h3><div style="margin:0cm 0cm 0pt"> </div><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">Object Templates are a construct that is offered by Cordys BOP4.</font></font></div><div style="margin:0cm 0cm 0pt"> </div><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">It allows to define data objects based on Schema fragments. </font></font><font size="3"><font face="Calibri">The developer may specify constraints and validations, attach (execution-) rules en specify whether or not changes to the the object are subject to audits. Besides that it is possible to specify if the object should be persisted by Cordys. If that option is selected the instances of the Object Template will be stored inside the CoBOC database (the database used to store information about the BPM instances). </font></font></div><p style="margin:0cm 0cm 0pt"> </p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">Object templates can be accessed using the following CoBOC WebServices:</font></font></p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri"> - <b><font face="Courier New" size="3"><i>UpdateXMLObject</i></font></b> to insert, update or delete an object</font></font></p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri"> - <b><font face="Courier New"><i>GetObjectsByAttribute</i></font></b> to retrieve a object</font></font></p><p style="margin:0cm 0cm 0pt"> </p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">Obviously these can could be embedded in a dedicated Webservice per separate Object</font></font></p><p style="margin:0cm 0cm 0pt"> </p><p style="margin:0cm 0cm 0pt"> </p><h3 style="margin:0cm 0cm 0pt">Best pick?</h3><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">Both approaches above have pro-s and con-s. The "best" choice depends on project or architectural requirements:</font></font></p><p style="margin:0cm 0cm 0pt"> </p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri"><b>Dedicated database</b></font></font></p><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri"><i>Pro-s</i></font></font></div><ul><li><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">Open database format (Data can be accessed easily from outside)</font></font></div></li>
<li><div style="margin:0cm 0cm 0pt"><font face="Calibri" size="3">More control on data (Separate database, custimizable WS services for data access)</font></div></li>
</ul><div style="margin:0cm 0cm 0pt"><font face="Calibri" size="3"><i>Con-s</i></font></div><ul><li><div style="margin:0cm 0cm 0pt"><font face="Calibri" size="3">Data layer should be maintained manually</font></div></li>
<li><div style="margin:0cm 0cm 0pt"><font face="Calibri" size="3">Separate WebServices are required</font></div></li>
</ul><div style="margin:0cm 0cm 0pt"> </div><div style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri"><b>Object templates</b></font></font></p></div><div style="margin:0cm 0cm 0pt"><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri"><i>Pro-s</i></font></font></div><ul><li><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">The data-tier remains hidden</font></font></div></li>
<li><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">More productive because of less required steps and objects</font></font></div></li>
<li><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">Audit possibilities</font></font></div></li>
</ul><div style="margin:0cm 0cm 0pt"><font face="Calibri" size="3"><i>Con-s</i></font></div><ul><li><div style="margin:0cm 0cm 0pt"><font face="Calibri" size="3">Cordys specific data format and Web Services to access data</font></div></li>
<li><div style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"></p><font size="3"><font face="Calibri">Data stored in CoBOC, so it may impact BPM execution performance</font></font></div></li>
</ul></div><p style="margin:0cm 0cm 0pt"> </p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">Depending on requirements (e.g. portability, testability, traceability, maintainability) one should decide on the way to go.</font></font></p><p style="margin:0cm 0cm 0pt"> </p><div style="margin:0cm 0cm 0pt"> Regards,</div><div style="margin:0cm 0cm 0pt"> </div><div style="margin:0cm 0cm 0pt">Harald van der weel</div><p style="margin:0cm 0cm 0pt"> </p>Harald van der Weelhttp://www.blogger.com/profile/13352602368388711191noreply@blogger.com0tag:blogger.com,1999:blog-6291775863115138292.post-46728703776895830212010-09-22T20:33:00.005+02:002010-09-22T20:43:58.845+02:00Testing Cordys BOP-4 using SOAPUI <br />
<div></div><h2 style="margin: 0cm 0cm 0pt;">SOAP-UI</h2><div style="margin: 0cm 0cm 0pt;"></div><h3 style="margin: 0cm 0cm 0pt;">Intro</h3><div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">In the previous project I have experienced soapUI as a low cost but very effective test tool for Cordys BOP-4 solutions. The abilities to invoke web services and test the result from outside the Cordys environment are very convenient. The features to define test scripts make it a very powerful tool to run automatic tests (e.g. for regression tests)</span></span></div><div style="margin: 0cm 0cm 0pt;"><br />
</div><div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">SOAP UI is build around uses an hierarchy of test objects: Each level contains 0 or more of the lower level objects:</span></span></div><div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">1. Project</span></span></div><div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;"> 2. Test-suite</span></span></div><div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;"> 3. Test-case</span></span></div><div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;"> 4. Test step. </span></span></div><div style="margin: 0cm 0cm 0pt;"><br />
</div><h3 style="margin: 0cm 0cm 0pt;">Test steps</h3><div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">In the Test Steps the effective test actions are defined. <b>Test actions</b> may for instance be:</span></span></div><ul><li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">invoking a SOAP Service</span></span></div></li>
<li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">validating the result (e.g. by checking database content)</span></span></div></li>
<li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">S</span><span style="font-family: Calibri;">et properties </span></span></div></li>
<li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">P</span><span style="font-family: Calibri;">ausing for an amount of time.</span></span></div></li>
<li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">Executing an script</span></span></div></li>
</ul><div style="margin: 0cm 0cm 0pt;"><br />
</div><h3 style="margin: 0cm 0cm 0pt;">Properties</h3><div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">Properties contain values that can be used in the tests by a reference to the property. There are system and user defined properties. Properties are always related to one of the test-object types mentioned above and available to all object beneath it in the hierarchy. </span></span></div><div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">A convenient application of properties are end-points –URLs for the web services that are tested. This way it is possible to test web services from another (DTAP) environment simply be changing this property.</span></span></div><div style="margin: 0cm 0cm 0pt;"><br />
</div><h2 style="margin: 0cm 0cm 0pt;">Cordys Case</h2><div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">It was my intention to use SOAP UI to test my state-transition model, as described in my earlier BLOG-s. Testing it involves injecting numerous messages via SOAP, and check whether the correct state transition (or error) was invoked.</span></span></div><div style="margin: 0cm 0cm 0pt;"><br />
</div><h3 style="margin: 0cm 0cm 0pt;">Initial approach</h3><div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">May first approach was to build test cases that consisted of multiples <b>series of 3 steps</b>: </span></span></div><ul><li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">A SOAP call to send a message</span></span></div></li>
<li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">A wait step to allow Cordys to process the request </span></span></div></li>
<li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">A validation step.</span></span></div></li>
</ul><div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">This approached worked: I was able to work out a number of scenario’s that covered most of the functionality that I wanted to test.</span></span></div><div style="margin: 0cm 0cm 0pt;"><br />
</div><div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">As my state-diagram was pretty extended (consisting of 17 states) I experiences a number of <b>disadvantages</b>:</span></span></div><ul><li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">Building was toilsome, defining similar steps for each state transition to test</span></span></div></li>
<li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">The test scenario is hard to read, as only the title of each step is visible, and the vision is blurred because of sequences of 3 steps.</span></span></div></li>
<li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">The scenarios were relatively hard to maintain, every time replacing 3 steps in case of a change.</span></span></div></li>
</ul><div style="margin: 0cm 0cm 0pt;"><br />
</div><h3 style="margin: 0cm 0cm 0pt;">Optimization 1</h3><div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">This led to a need of being able to define the sequence of the test offline, in a file, were only the vital data would have to be specified.</span></span></div><div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">This approach enab</span></span><span style="font-size: small;"><span style="font-family: Calibri;">les to maintain and store the test sequence in a text, making the scenario much more visible and way easier to modify (e.g. simply by inserting some lines)</span></span></div><div style="margin: 0cm 0cm 0pt;"><br />
</div><div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">The solution I developed used the following <b>capabilities of SOAP UI:</b></span></span></div><ul><li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">Run “Groovy” scripts (See <a href="http://groovy.codehaus.org/">http://groovy.codehaus.org/</a>)</span></span></div></li>
<li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">Invoke test cases from groovy</span></span></div></li>
<li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">Read files from Groovy</span></span></div></li>
<li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">Set property variables in Groovy </span></span></div></li>
</ul><div style="margin: 0cm 0cm 0pt 2.25pt;"><br />
</div><div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-size: small;"><span style="font-family: Calibri;">The <b>main idea</b> is simple: </span></span></div><ul><li><br />
<div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-size: small;"><span style="font-family: Calibri;">Recognize and separate the repeating steps in the test case. Extract one instance of the repeating steps and isolate them in a separate test case (“TC1”)</span></span></div></li>
<li><br />
<div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-size: small;"><span style="font-family: Calibri;">Replace all required hard-coded values by a property</span></span></div></li>
<li><br />
<div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-size: small;"><span style="font-family: Calibri;">Define an external file having sets of lines containing values that may on the defined parameters</span></span></div></li>
<li><br />
<div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-size: small;"><span style="font-family: Calibri;">Build a "groovy" script that reads each line, sets the according parameters and executes TC1</span></span></div></li>
</ul><div style="margin: 0cm 0cm 0pt 2.25pt;"><br />
</div><div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-size: small;"><span style="font-family: Calibri;">The file now consisted for each state-transition-to-test of a line of multiple properties in a fixed order. Each line was processed by the groovy script and assigned to the properties, before invoking the 3-step test sequence in TC1.</span></span></div><div style="margin: 0cm 0cm 0pt 2.25pt;"><br />
</div><div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-size: small;"><span style="font-family: Calibri;">This approach worked fine.</span></span></div><div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-size: small;"><span style="font-family: Calibri;">The only disadvantage was that in the sequence certain properties remain the same for a long period of time (e.g. the correlation id of messages, which is the same for all steps in the same sequence).</span></span></div><div style="margin: 0cm 0cm 0pt 2.25pt;"><br />
</div><h3 style="margin: 0cm 0cm 0pt 2.25pt;">Optimization 2</h3><div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-size: small;"><span style="font-family: Calibri;">The perfectionist in me decided to make the test script more fancy and general purpose, so I added the following options:</span></span></div><ul><li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;"> The option to specify the properties that are mapped upon the value lists. </span></span></div></li>
</ul><div style="margin: 0cm 0cm 0pt 2.25pt;"> <span style="font-family: Courier New; font-size: x-small;"><i>#plist,<property-1>,<property-2>, … <property-N></i></span></div><ul><li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">The option to specify a property that is assigned with a unique value each time it is set</span></span></div></li>
</ul><div style="margin: 0cm 0cm 0pt 2.25pt;"> <i><span style="font-family: Courier New; font-size: x-small;">#property,<property>,<value></span></i></div><ul><li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">The option to specific a specific property until it is set again.</span></span></div></li>
</ul><div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-family: Courier New;"><span style="font-family: Verdana;"> <span style="font-size: x-small;">#</span></span><i><span style="font-size: x-small;">unique, <property></span></i></span></div><ul><li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">The option to add line-comments</span></span></div></li>
</ul><div style="margin: 0cm 0cm 0pt;"> <i> </i><span style="font-family: Courier New; font-size: x-small;"><i>//<Any comment></i></span></div><div style="margin: 0cm 0cm 0pt 2.25pt;"><br />
</div><div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-size: small;"><span style="font-family: Calibri;">An example of an input file is:</span></span></div><div style="margin: 0cm 0cm 0pt 2.25pt;"><br />
</div><div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-family: Courier New;">// MessageId is always unique</span></div><div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-family: Courier New;">#unique, messageId</span></div><div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-family: Courier New;">// For the first sequence we always use the same sequence id</span></div><div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-family: Courier New;">#property,correlationId,cor01</span></div><div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-family: Courier New;">// Each value line contains values for the properties messageType,Sender,Receiver</span></div><div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-family: Courier New;">#plist,messageType,Sender,Receiver</span></div><div style="margin: 0cm 0cm 0pt 2.25pt;"><br />
</div><div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-family: Courier New;">MT01,Party1,Party2</span></div><div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-family: Courier New;">MT02,Party2,Party1</span></div><div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-family: Courier New;">MT01,Party1,Party3</span></div><div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-family: Courier New;">MT02,Party3,Party1</span></div><div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-family: Courier New;">MT03,Party3,Party4</span></div><div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-family: Courier New;">MT04,Party4,Party3</span></div><div style="margin: 0cm 0cm 0pt 2.25pt;"><br />
</div><div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-family: Courier New;">// Now we addone property to the value lines: The correlation Id.</span></div><div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-family: Courier New;">// The pre-set value is overruled now</span></div><div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-family: Courier New;">#plist,correlationId,messageType,Sender,Receiver</span></div><div style="margin: 0cm 0cm 0pt 2.25pt;"><br />
</div><div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-family: Courier New;">Cor02, MT01,Party1,Party2</span></div><div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-family: Courier New;">Cor02,MT02,Party2,Party1</span></div><div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-family: Courier New;">Cor03,MT01,Party1,Party3</span></div><div style="margin: 0cm 0cm 0pt 2.25pt;"><span style="font-family: Courier New;">Cor03,MT02,Party3,Party1</span></div><div style="margin: 0cm 0cm 0pt 2.25pt;"></div><div style="margin: 0cm 0cm 0pt 2.25pt;"></div><div id="cnxb" style="text-align: left;"><img src="http://docs.google.com/File?id=dgj9fzbj_22cnv2v5dh_b" style="height: 652px; width: 490px;" /></div><div id="sqe2" style="text-align: left;"><img src="http://docs.google.com/File?id=dgj9fzbj_23fn26vphq_b" style="height: 572px; width: 490px;" /></div><div style="margin: 0cm 0cm 0pt 2.25pt;"><br />
</div><div></div><div>To provide an idea what the code looked like I add a screendump of the code.</div><div>(As a Groovy novice I won't accept any liaibility ;) ) </div><div></div><div>Regards,</div><div></div><div>Harald van der Weel</div><div><a href="mailto:Haraldvanderweel@gmail.com">Haraldvanderweel@gmail.com</a></div><div></div>Harald van der Weelhttp://www.blogger.com/profile/13352602368388711191noreply@blogger.com1tag:blogger.com,1999:blog-6291775863115138292.post-74938887490302921752010-09-20T10:00:00.003+02:002010-09-22T20:51:18.203+02:00BOP-4 BAM imperfections <br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">Where the BOP-4 product stack generally looks very complete, mature and well designed, I have to admit I am still a little less enthusiastic about the Business Activity Monitoring (BAM) part.</span></span></div><div style="margin: 0cm 0cm 0pt;"><br />
</div><div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">In our latest project we have implemented a quiet extensive BAM implementation. We managed to implement a pretty useable dashboard, that satisfied the project and customer needs. However the BAM functionality did not feel quiet as “ready” as e.g. BPM. </span></span></div><div style="margin: 0cm 0cm 0pt;"><br />
</div><div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">BAM intends to monitor KPI-s that map upon a values used in a BPM. To get a graphical representation of these values in you dashboard a number of steps (and Cordys objects) is required.</span></span></div><ol><li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">First the BPM values to reflect in BAM have to be explicitly exposed using the “Message filter” tab of the BPM. A selection is to be made of all values in the message map in the BPM.</span></span></div></li>
<li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">Next a Process Monitoring Object (PMO) must be created. This object defines the actual BAM data to collect in the BAM database, and the events when they are collected. It takes the BPM process as the input of the PMO. A selection of exposed data values and possible events must be made, and it is possible to process or enrich the data e.g. by using XPath or web services.</span></span></div></li>
<li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">Business Measure (BM) objects are intended to define the actual information from the PMO-s in the BAM database, to reflect in the report. A Business Measure is actually a SQL query that results in a aggregated measurements (averages, totals, counts) reported over a specific “dimension” (e.g. a Location, Person or Unit). This dimension ends up in a GROUP BY clause and it is possible to use a number of parameters in the WHERE clause. A Business Measure will result in a UI dashboard component and a related web service to get the specific data out of the BAM database. The web service can be used autonomously as well.</span></span></div></li>
<li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">The BAM dashboard is effectively an XForm, to which one or more BM -graphical components are added. There they can be linked to each other or to standard BAM components like “Time Selectors”. This way the output from one component can be used in a filter of another. This way some kind of down drilling can be implemented. For a little advanced functionality scripting is required. </span></span></div></li>
</ol><div style="margin: 0cm 0cm 0pt;"><br />
</div><div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">Though the functionality described above behaves correctly, there are a number of inconveniences and hence potential enhancements. I will name a number that come to mind:</span></span></div><ol><li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">The number of fields to use in a PMO is limited. A PMO just offers a limited amount of fields for each data type (15x String, 10x Numeric, 10x decimal and 10x Date-Time). Exceeding one of these amounts results in an error message.</span></span></div></li>
<li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">Unlike other Cordys objects a PMO object must be manually unpublished before a new version can be published. There is no proper warning or error system available to prevent mistakes. </span></span></div></li>
<li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">The possibilities to manipulate the looks of the dashboard graphs are very limited. </span></span></div></li>
<li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">Not types of graphical components are standard supported by BAM (like the gauge component). It requires intensive scripting.</span></span></div></li>
<li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">It is cumbersome to implement drill down features. Relations between data is now specified on graph level, and the business measures should already be prepared for the specific need. It would be more convenient to define these relations on data level. </span></span></div></li>
<li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">BAM does not support runtime packages; only staging packages</span></span></div></li>
<li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">BAM does not offer any standard reporting options (unlike Cordys Process Factory – CPF)</span></span></div></li>
<li><br />
<div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">In an ideal world PMO-s and BM shouldn’t be required. It would be nice to be able to specify data to expose on BPM level, and the relations too. This should be sufficient to define and populate a BAM database. When designing the dashboard standard graphical components should allow to select any data that should be displayed. </span></span></div></li>
</ol><div style="margin: 0cm 0cm 0pt;"><br />
</div><div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">At the recent Cordial event I was able to ask the development team after expected developments of BAM. They confirmed these imperfections and announced a number of enhancements that will be implemented with FP1 (Optimistic planning: end of 2010).</span></span></div><div style="margin: 0cm 0cm 0pt;"><br />
</div><div style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="font-family: Calibri;">It is not hard to imagine I am looking forward very much to FP1, which I expect to solve a number of this issues!</span></span></div><div></div>Harald van der Weelhttp://www.blogger.com/profile/13352602368388711191noreply@blogger.com1tag:blogger.com,1999:blog-6291775863115138292.post-75103172630192044732010-09-16T17:14:00.002+02:002010-09-28T14:25:23.827+02:00Personal highlights Cordial 2010<h1>Personal highlights Cordial 2010</h1><div><span style="font-size:100%;"><span style="font-family:Calibri;"><i><b>Event:</b> Cordial 2010 event</i></span></span></div><p style="margin: 0cm 0cm 0pt;"><span style="font-size:100%;"><span style="font-family:Calibri;"><i><b>Date:</b> 14 and 15 September 2010</i></span></span></p><p style="margin: 0cm 0cm 0pt;"><span style="font-size:100%;"><span style="font-family:Calibri;"><i><b>Location: </b>Cordys, Putten, Netherlands</i></span></span></p><div> </div><div id="pmop" style="text-align: left;"><img src="http://docs.google.com/File?id=dgj9fzbj_17gq6ss8cr_b" style="height: 144px; width: 213px;" /></div><div> </div><div><span style="font-size:100%;"><span style="font-family:Calibri;">This year I had the luck to attend Cordial 2010. </span></span></div><div> </div><div><span style="font-size:100%;"><span style="font-family:Calibri;">This is a quick impression and listing of personal highlights of the event:</span></span></div><div style="margin: 0cm 0cm 0pt;"> </div><ul><li><div style="margin: 0cm 0cm 0pt;"><span style="font-size:100%;"><span style="font-family:Calibri;">A <b>massive crowd</b> of both customers and partners of Cordys attended the events from all over the world, showing that Cordys is very much alive.</span></span></div></li><li><span style="font-size:100%;"><span style="font-family:Calibri;">Being introduced to the new CEO and Jan Baan’s successor <b>Per Johnsson</b></span></span></li><li><div style="margin: 0cm 0cm 0pt;"><span style="font-size:100%;"><span style="font-family:Calibri;">A very dynamic and inspiring presentation by <b>Manfred Kets de Vries about</b> <b>Leadership</b></span></span></div></li><li><div style="margin: 0cm 0cm 0pt;"><span style="font-size:100%;"><span style="font-family:Calibri;">The opportunity to meet the product development team face-2-face to get an insight in the <b>expected enhancements</b> in both BOP-4 and Cordys Process Process Factory, that will be shipped in fp1. (FP1 ships “when ready”, expected before the end of 2010)</span></span></div></li></ul><div style="margin: 0cm 0cm 0pt;"><span style="font-size:100%;"><span style="font-family:Calibri;"> I.m.o. the most interesting:</span></span></div><ul><ul><li><div style="margin: 0cm 0cm 0pt;"><span style="font-size:100%;"><span style="font-family:Calibri;">Multi browser support</span></span></div></li><li><div style="margin: 0cm 0cm 0pt;"><span style="font-size:100%;"><span style="font-family:Calibri;">BAM enhancements (KPI-s in processes, Alignment of BAM)</span></span></div></li><li><div style="margin: 0cm 0cm 0pt;"><span style="font-size:100%;"><span style="font-family:Calibri;">MDM</span></span></div></li><li><div style="margin: 0cm 0cm 0pt;"><span style="font-size:100%;"><span style="font-family:Calibri;">Connections between CPF and BOP-4</span></span></div></li><li><div style="margin: 0cm 0cm 0pt;"><span style="font-size:100%;"><span style="font-family:Calibri;">CPF mobile support</span></span></div></li><li><div style="margin: 0cm 0cm 0pt;"><span style="font-size:100%;"><span style="font-family:Calibri;">Extended security features for CPF(e.g. SAML2.0)</span></span></div></li></ul><li><div style="margin: 0cm 0cm 0pt;"><span style="font-size:100%;"><span style="font-family:Calibri;">The insights provided by Forrester in the <b>trends in Cloud and BPM</b>, where the most imlessons are:</span></span></div></li><ul><li><div style="margin: 0cm 0cm 0pt;"><span style="font-size:100%;"><span style="font-family:Calibri;">T</span><span style="font-family:Calibri;">here is a bright future for combined on-premises / cloud solutions, mostly depending on the level of confidentiality and commodity</span></span></div></li><li><div style="margin: 0cm 0cm 0pt;"><span style="font-size:100%;"><span style="font-family:Calibri;">Data remains the biggest asset</span></span></div></li><li><div style="margin: 0cm 0cm 0pt;"><span style="font-size:100%;"><span style="font-family:Calibri;">New business and payment models will arise based on the options that the cloud offers.</span></span></div></li><li><div style="margin: 0cm 0cm 0pt;"><span style="font-size:100%;"><span style="font-family:Calibri;">Collaboration using the social networks</span></span></div></li></ul><li><div style="margin: 0cm 0cm 0pt;"><span style="font-size:100%;"><span style="font-family:Calibri;">2 thrilling <b>demonstrations</b> by Matt Davies and Chris Hyde to realize a Cloud and a hybrid BOP-4 / Cloud solution in 9 minutes</span></span></div></li><li><div style="margin: 0cm 0cm 0pt;"><span style="font-size:100%;"><span style="font-family:Calibri;">The statement that Cordys shifts from a product demonstration towards a <b>marketing organization</b>, where the product “the most important marketing tool”</span></span></div></li><li><div style="margin: 0cm 0cm 0pt;"><div style="margin: 0cm 0cm 0pt;"><span style="font-size:100%;"><span style="font-family:Calibri;"><b>Meeting</b> a lot of old “acquaintances” and many new interesting cordys related professionals.</span></span></div></div></li></ul><p style="margin: 0cm 0cm 0pt;"> </p><p style="margin: 0cm 0cm 0pt;"><span style="font-size:100%;"><span style="font-family:Calibri;">More detailed info can be found on <a href="http://cordial.cordys.com/">http://cordial.cordys.com</a></span></span></p><p style="margin: 0cm 0cm 0pt;"> </p><p style="margin: 0cm 0cm 0pt;"><span style="font-size:100%;"><span style="font-family:Calibri;">A more extensive report can be found on:</span></span></p><p style="margin: 0cm 0cm 0pt;"><span style="font-size:100%;"><span style="font-family:Calibri;"><a href="http://rogervdkimmenade.blogspot.com/2010/09/cordial-2010.html"><span style="color:#800080;">http://rogervdkimmenade.blogspot.com/2010/09/cordial-2010.html</span></a></span></span></p><div style="margin: 0cm 0cm 0pt;"> </div><div style="margin: 0cm 0cm 0pt;"><div> </div><div> </div></div><p style="margin: 0cm 0cm 0pt;"><span style="font-size:100%;"><span style="font-family:Calibri;">Looking forward to Cordial 2011!</span></span></p><div style="margin: 0cm 0cm 0pt;"> </div><div style="margin: 0cm 0cm 0pt;"><div id="l_vl" style="text-align: left;"><img src="http://docs.google.com/File?id=dgj9fzbj_18xxc4dcc6_b" style="height: 204px; width: 252px;" /></div> </div><div> </div><div> </div><div> </div>Harald van der Weelhttp://www.blogger.com/profile/13352602368388711191noreply@blogger.com1tag:blogger.com,1999:blog-6291775863115138292.post-6273162572177646702010-08-03T16:03:00.001+02:002010-08-04T10:14:31.764+02:00Event-state modeling in Cordys <h3 style="margin:0cm 0cm 0pt">Case</h3><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">Recently we have been working on a solution that can be considered as a message broker / hub: </font></font></div><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">It’s functionality is mainly to receive, validate and route messages between parties in a specific business segment over different channels.</font></font></p><p style="margin:0cm 0cm 0pt"> </p><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">All messages have a specific type, syntax and semantics. Messages may be interrelated; e.g. one message may be a response to another message. A business wide protocol-standard describes the complete interrelation between message types, and specifies the possible sequence of messages in a flow: A so called "conversation". In a conversation any message of a specific type can be only followed by a message of one or more other specific types. </font></font></div><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">In case we want to monitor conversations we need to model the messaging protocol. </font></font><font size="3"><font face="Calibri">This protocol can be considered as an event-state diagram: The last received (and expected!) message in the message sequence reflects the state, and the reception of a new message reflects an event.</font></font></div><div style="margin:0cm 0cm 0pt"> </div><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">Multiple concurrent conversations may be active at a time. This requires a correlation id to link the reception of a new message (see the previous blog “Events in Cordys”) to an active conversation (or to start a new one, if there is no flow active for that particular correlation id). </font></font></div><p style="margin:0cm 0cm 0pt"> </p><h3 style="margin:0cm 0cm 0pt">Implementation</h3><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">What does it take to implement such an event-state diagram in Cordys BOP-4?</font></font></div><p style="margin:0cm 0cm 0pt"> </p><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">The core of the solution consists of three processes, a decision table and a database-table (with access web services):</font></font></div><ul><li><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri"><b>Monitor-process</b>: A process that describes the state model</font></font></div></li><li><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri"><b>HandleMessage-process</b>: A process that is started on new receives new messages and that triggers events.</font></font></div></li><li><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri"><b>WaitForEvent-process</b>: A process that actually waits for an event to be triggered by HandleMessage, where the message is passed</font></font></div></li><li><div style="margin:0cm 0cm 0pt"><font face="Calibri" size="3"><b>StateTransitions-decision table:</b> A decision table containing all valid state transions that can be triggered by a message.</font> </div></li><li><div style="margin:0cm 0cm 0pt"><font face="Calibri" size="3"><b>InstanceCorrelation- database table:</b> A database table for storage of the instance id and correlation id</font></div></li></ul><p style="margin:0cm 0cm 0pt 2.25pt"> </p><h4 style="margin:0cm 0cm 0pt 2.25pt">Monitor-process </h4><div style="margin:0cm 0cm 0pt 2.25pt"><font size="3"><font face="Calibri"><i>Monitor</i> is the main process. It describes the overal state model. At runtimes each instance reflects a conversation and it effectively keeps the current state of the “conversation”. A Correlation Id is required to correlate the messages to this conversation. The <i>Monitor</i> process simply consists of a number of states that are interrelated: From a particular state an occuring event may cause a transition to one of one or more possible new states. A state is in fact nothing more than a sub-process call to <i>WaitForEvent</i>. <i>WaitForEvent</i> waits for an event and after a correct (expected) message is received it returns the resulting (new) state to the monitoring process. Only in case a state may have more than 1 possible resulting states the monitoring process should use a decision to effectuate the correct transition. All other logic is handles in the <i>WaitForEvent</i> (by invoking the <i>StateTransitions</i>-decision table)</font></font></div><div style="margin:0cm 0cm 0pt 2.25pt"> </div><div style="margin:0cm 0cm 0pt 2.25pt"><font size="3"><font face="Calibri">Because the <i>Monitor</i>-process is started with the first message of a new conversation it has an input message, having the same format as the messages received by <i>WaitForEvent</i>.</font></font></div><div style="margin:0cm 0cm 0pt 2.25pt"> </div><div style="margin:0cm 0cm 0pt 2.25pt"><div id="vl4j" style="text-align:left"><a href="http://docs.google.com/File?id=dgj9fzbj_12cz2scmdh_b" target="_blank"><img src="http://docs.google.com/File?id=dgj9fzbj_12cz2scmdh_b" style="height:170px;width:462px"></a></div> <i> Example of a monitor process</i></div><p style="margin:0cm 0cm 0pt"> </p><h4 style="margin:0cm 0cm 0pt">WaitForEvent-process </h4><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri"><i>Monitor</i> specifies two main parameters to the <i>WaitForEvent</i>-sub process: The current state of <i>Monitor</i> and the Correlation Id that belongs to the conversation.</font></font></p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">The first step in the <i>WaitForEvent</i> is to store its Instance Id in a “<i>InstanceCorrelation</i>” table, together with the Correlation Id before invoking the “Receive Message” step. (See also my previous blog “Events in Cordys”).</font></font></p><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">Once an event has been triggeredby the <i>HandleMessage</i>-process the <i>WaitForEvent</i> event checks whether it is an event that it expected, depending on the current state. The logic for this check is implemented in the decision table "<i>StateTransitions</i>", that I will explain below.</font></font></div><p style="margin:0cm 0cm 0pt"> </p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">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.</font></font></p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">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 <i>InstanceCorrelation </i>table is cleaned up by removing the record that was inserted at the beginning of the process.</font></font></p><div style="margin:0cm 0cm 0pt"> </div><div style="margin:0cm 0cm 0pt"><div id="s6:b" style="text-align:left"><a href="http://docs.google.com/File?id=dgj9fzbj_136526b8ct_b" target="_blank"><img src="http://docs.google.com/File?id=dgj9fzbj_136526b8ct_b" style="height:90px;width:476px"></a></div></div><div style="margin:0cm 0cm 0pt"><i><font face="Calibri" size="3"> "WaitForEvent"-</font>process</i> </div><div style="margin:0cm 0cm 0pt"> </div><h4 style="margin:0cm 0cm 0pt">HandleMessage-process </h4><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri"><i>HandleMessage</i> 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 <i>InstanceCorrelation</i> 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 <i>Monitor</i> is started -via the invokation of a generated Web Service on Monitor- and passing the message. </font></font></p><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">In case the Instance Id is found, a notification to <i>WaitForEvent</i> is sent using <i>ExecuteProcess</i>, passing Instance Id and the message (as explained in my previous blog “Events in Cordys”).</font></font></div><div style="margin:0cm 0cm 0pt"> </div><div style="margin:0cm 0cm 0pt"><div id="drvt" style="text-align:left"><img src="http://docs.google.com/File?id=dgj9fzbj_14c5d29vfg_b" style="height:205px;width:401px"></div><div style="text-align:left"><font face="Calibri" size="3"> "<i>HandleMessage"-process</i></font></div></div><div> </div><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri"><b>StateTransitions-decision table</b></font></font></div><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">The <i>StateTransitions</i> decision table contains all valid "current"state - message combinations, and the resulting new state. (Similar logic may also be implemented e.g. in a matrix, implemented in a database table, see also my blog "logic in Cordys").</font></font></div><div style="margin:0cm 0cm 0pt"> </div><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">Note that actually all logic on state transitions is effectively implemented in this decision table, and not in the Monitor process: The <i>Monitor</i> process is only intended to keep the current state of a conversation: Not to execute any transition logic, apart from navigating to the correct new state based on the out-come of the <i>StateTransitions</i> decision table!</font></font></div><div style="margin:0cm 0cm 0pt"> </div><div style="margin:0cm 0cm 0pt"><div id="psk1" style="text-align:left"><a href="http://docs.google.com/File?id=dgj9fzbj_15g9cwpwg9_b" target="_blank"><img src="http://docs.google.com/File?id=dgj9fzbj_15g9cwpwg9_b" style="height:87px;width:494px"></a></div><div style="text-align:left"><div style="text-align:left"><font face="Calibri" size="3"> "<i>StateTransitions"-decission table</i></font></div></div></div><div style="margin:0cm 0cm 0pt"> </div><div>Later I will zoom in on the reporting over the monitoring process.</div><div> </div><div> </div><p>Regards,</p><div> </div><div>Harald van der Weel, </div><div>e-mail: <a href="mailto:haraldvanderweel@gmail.com">haraldvanderweel@gmail.com</a><br></div><br>Harald van der Weelhttp://www.blogger.com/profile/13352602368388711191noreply@blogger.com0tag:blogger.com,1999:blog-6291775863115138292.post-74002437758554703792010-08-02T16:26:00.001+02:002010-08-03T00:09:14.138+02:00Events in Cordys <p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">In certain occassions BPM processes need to able to process events. </font></font></p><p style="margin:0cm 0cm 0pt"> </p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">Consider the example of a sales process (e.g. CloseDeal) that sends a quote to a customer and waits for the response. </font></font></p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">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.</font></font></p><p style="margin:0cm 0cm 0pt"> </p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">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. </font></font><font size="3"><font face="Calibri">The issue is that Cordys supports only the Send Message step for child-processes to trigger an event in a parent process. </font></font></p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">In our case this is not sufficient, as ReceiveQuotationResponse is not an child but an independent process.</font></font></p><p style="margin:0cm 0cm 0pt"> </p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">Fortunately Cordys offers a work-around: </font></font></p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">It allows to start new and to continue existing (waiting) process instances by using an “ExecuteProcess” webservice.</font></font></p><p style="margin:0cm 0cm 0pt"> </p><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri"><i>How does it work?</i></font></font></div><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">The <b>process to be notified</b> 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).</font></font></p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">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. </font></font></p><div style="margin:0cm 0cm 0pt"> </div><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">The <b>notifying process</b> (ReceiveQuotationResponse ) now may invoke the ExecuteProcess web service (found in BPM runtime references “Method Set Process Execution”) to send a notification to the waiting process.</font></font></div><p style="margin:0cm 0cm 0pt"> </p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">This invocation has 3 mandatory input parameters to be set:</font></font></p><ul><li><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">The field “<b><font face="Courier New" size="2">type</font></b>” must contain (the literal) “instance”</font></font></div></li><li><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">The field “<font face="Courier New" size="2"><b>message</b></font>” 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). </font></font></div></li><li><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">The field “<font face="Courier New" size="2"><b>receiver</b></font>” 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.</font></font></div></li></ul><div style="margin:0cm 0cm 0pt"> </div><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri"><i>Passing the instance Id</i> </font></font></div><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">The question is: How can the notifying process (ReceiveQuotationResponse) obtain the instance id of the process to be notified?</font></font></div><p style="margin:0cm 0cm 0pt"> </p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">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.</font></font></p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">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.</font></font></p><p style="margin:0cm 0cm 0pt"> </p><p style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">In concrete the solution requires:</font></font></p><p class="MsoListParagraph" style="margin:0cm 0cm 0pt 20.25pt"><font face="Calibri" size="3">-</font> <font size="3"><font face="Calibri">A database table, consisting of (at least) two fields: CorrelationId (primary key) and InstanceId (and an access web services)</font></font></p><p class="MsoListParagraph" style="margin:0cm 0cm 0pt 20.25pt"><font face="Calibri" size="3">-</font> <font face="Calibri"><font size="3">Two steps (at least) in de the process that should receive the notification:</font></font></p><p class="MsoListParagraph" style="margin:0cm 0cm 0pt 72pt"><font face="'courier new'"><font size="3">o</font> </font><font face="Calibri"><font size="3">The step is to store the instance id with in de database together with the correlation id</font></font></p><p class="MsoListParagraph" style="margin:0cm 0cm 0pt 72pt"><font face="'courier new'"><font size="3">o</font> </font><font size="3"><font face="Calibri">The second is a “Receive Message” step</font></font></p><p class="MsoListParagraph" style="margin:0cm 0cm 0pt 20.25pt"><font face="Calibri" size="3">-</font> <font face="Calibri"><font size="3">Two steps (at least) in the notifying process</font></font></p><p class="MsoListParagraph" style="margin:0cm 0cm 0pt 72pt"><font face="'courier new'"><font size="3">o</font> </font><font face="Calibri"><font size="3">The first to read the instance id based on the correlation id</font></font></p><p class="MsoListParagraph" style="margin:0cm 0cm 0pt 72pt"><font face="'courier new'"><font size="3">o</font> </font><font size="3"><font face="Calibri">The second to invoke the ExecuteProcess</font></font></p><div style="margin:0cm 0cm 0pt"> </div><div style="margin:0cm 0cm 0pt"><font size="3"><font face="Calibri">Note that the approach may require additional processing like cleaning up the database table and error checking.</font></font></div><div> </div><div>A future enhancement in Cordys to the Send en Receive message steps that allows to specify a correlation id would be a great improvement.</div><div> </div><br>Harald van der Weelhttp://www.blogger.com/profile/13352602368388711191noreply@blogger.com1tag:blogger.com,1999:blog-6291775863115138292.post-1677656488256463802010-07-23T09:31:00.001+02:002010-08-03T00:19:06.283+02:00Storing integer values in Cordys <br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="arial"><font color="#000000">Cordys offers out of the box functionality to generate web methods to store data in existing database tables. Persisting business objects is facilitated nicely this way.</font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="arial"><font color="#000000">The standard functionality works all fine, until integer values are used.</font></font></font></span><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="arial"><font color="#000000">If the process is using an XSD having integer fields, mapping them upon an integer field in a database table should not be much of an issue, one might think. In case using plain static values the functionality works fine indeed.</font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="arial"><font color="#000000">However: When XPath functionality are used to set the integer values in the BPM (e.g. via a function or operator) the result is that to all integer values are provided with an additional decimal point and a zero!</font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="arial"><font color="#000000">Hence: In case the XML value </font></font></font></span><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="courier new"><font color="#000000">./value</font></font></font></span><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="arial"><font color="#000000"> has the value 1, the XPath operation </font></font></font></span><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="courier new"><font color="#000000">./value + 1 </font></font></font></span><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="arial"><font color="#000000">does not result (as one might think) simply in 2: The value is converted to 2.0</font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="arial"><font color="#000000">The actual reason is not in Cordys, however in XML/XPath. XML/XPath does not really support integer values: They are just floating point values, having 0 as decimal fraction.</font></font></font></span><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="arial"><font color="#000000">This “feature” is pretty innocent when just using XPath in the BPM. However when this value has to be made persistent in a database in our case MySQL 5.0) there is in issue: The query to insert the value 2.0 in an integer field the database table results in error because of this format.</font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="arial"><font color="#000000">This issues cannot be solved in XPath by using the round() function: It does add the .0 itself too.</font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="arial"><font color="#000000">Fortunatly there is a rather inexpensive solution to the problem: use the string() function. </font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="arial"><font color="#000000">The XPath spec describes:</font></font></font></span><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="arial"><font color="#000000">if the number is an integer, the number is represented in decimal form as a</font></font></font></span><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="arial"><font color="#000000">Number <</font></font></font></span><a href="http://www.w3.org/TR/xpath#NT-Number"><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="arial"><font color="#000099"><u>http://www.w3.org/TR/xpath#NT-Number</u></font></font></font></span></a><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="arial"><font color="#000000">> with no decimal point and no</font></font></font></span><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="arial"><font color="#000000">leading zeros, preceded by a minus sign (-) if the number is negative</font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="arial"><font color="#000000">Hence: Replacing </font></font></font></span><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="courier new"><font color="#000000">./value + 1 </font></font></font></span><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="arial"><font color="#000000">by </font></font></font></span><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="courier new"><font color="#000000">string(./value + 1) </font></font></font></span><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="arial"><font color="#000000">will leave you with an value without decimal point.</font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="arial"><font color="#000000">Regards,</font></font></font></span><br><br><span style="font-style:normal;vertical-align:baseline"><font size="3"><font face="arial"><font color="#000000">Harald van der Weel</font></font></font></span><br><br><br>Harald van der Weelhttp://www.blogger.com/profile/13352602368388711191noreply@blogger.com1tag:blogger.com,1999:blog-6291775863115138292.post-58352924018559705862010-06-27T00:14:00.001+02:002010-08-03T19:47:24.590+02:00Implementing BPM logic in Cordys-BOP4<br><h3>Introduction</h3><div>Almost any Business Process has a conditional flow, which is determined by business logic. An example is to determine the approver for a purchase: In case the order amount does not exceed 50 dollars approval may not be required. However for amounts between 50 and 5000 euro the department-manager may need to approve. Above 5000 euros it may be the business line manager, and above 100000 euros even the CEO. </div><div> </div><div>Cordys BOP-4 allows us to define Business Process logic in multiple ways. This flexibility is nice. However it raises the question: "When to use what"?</div><div> </div><h3>Considerations</h3><div>There are several considerations to make before selecting one of the available alternatives:</div><div> </div><div><b>Agility:</b></div><div>How frequent are the expected modifications? Should it be possible to perform them without restarting or redeploying the application?</div><div> </div><div><div><b>Efficiency:</b></div><div>How much effort does it take to implement the rule?</div> </div><div><b>Complexity/Maintanability:</b></div><div>How complex are the rules: How many steps and different conditions do they contain? Who should be able to perform the change: A business user or an IT engineer.</div><div> </div><div><b>Functionality:</b></div><div>What functions and data do you need to be able to access? Do you need to be able to access database content? Perform difficult calculations or text operations?</div><div> </div><div><b>Readability:</b></div><div>Should business be able to read and understand the logic to be able to grasp the business process.</div><div> </div><div><b>Architecture:</b></div><div>It may be favorable to have your logic itself logically organized, for the following reasons so it is clear for business users and developers where to find certain logic, and to be able to package and deploy logic as much as possible in comprehensible units.</div><div> </div><div> </div><div>Lets first discuss the options:</div><div> </div><h3>Constructs to implement logic </h3><div>BOP-4 offers the following constructs to implement business logic:</div><div>(Note that most of the alternatives above may be used in conjunction with other alternatives.)</div><div> </div><div><b>BPM Decision steps</b></div><div>The BPM modeling language BPMN allows to directly built logic into Business Process models using the construct "Decision". This step allows to select multiple alternative paths that may be chosen, based on a condition for each path. There may be one default condition that is executed when all other condition evaluate to false. The conditions are defined in "XPath".</div><div> </div><div>+ The logic is visible in the process itself, which contributes to readability and architecture</div><div>- Complex logic may explode into an incomprehensible process model</div><div>- Changes should pass a complete DTAP cycle</div><div>- Advanced functionality will require knowledge of XPath</div><div> </div><div>Recommended usage</div><div> - Simple conditions in Business Process, e.g.:</div><div> - Checking process inputs</div><div> - Checking output from earlier steps </div><div> </div><div><img src="http://docs.google.com/File?id=dgj9fzbj_5dp2cbzvw_b" style="height:340px;width:506px"> </div><div><i>Example of decision step</i></div><div> </div><div><b>BPM Mappings</b></div><div>BPM mappings allows the assignment of values in steps in a BPM using Xpath. Xpath contains a number of functions that may be used to implement logic (e.g. Boolean functions, regular expressions and selection expressions). </div><div> </div><div>+ The logic is stored in the BPM model. (Architecture)</div><div>- Changes should pass a complete DTAP cycle</div><div>- Logic is "hidden" in implementation details</div><div>- Limited functionality. More advanced functions require knowledge of XPath</div><div>- Logic is less visible / comprehensible to business users</div><div> </div><div>Usage</div><div> - Simple logic to influence attribute values</div><div> </div><div id="trfv" style="text-align:left"><img src="http://docs.google.com/File?id=dgj9fzbj_6xq2gmwdq_b" style="height:286px;width:507px"></div><div><i>Example of mapping Xpath</i> </div><div> </div><div><b>Transformation objects</b></div><div>Transformation object transform one data structure into another, using XSLT (which uses XPath underneath). Transformations may be used in BPM or turned into web services.</div><div> </div><div>+ Supports complex logic</div><div>+ Reusable</div><div>- The logic is stored outside the BPM model. (Architecture)</div><div>- Changes should pass a complete DTAP cycle</div><div>- More complex logic requires XPath/XSL knowledge. </div><div><div>- Logic is not visible / comprehensible to business users</div><div> </div><div>Usage</div><div> - More sophisticated logic used to transform a (business) object into another (business) object</div> </div><div> </div><div><b>Decision Tables </b></div><div>Decision Tables are a number of rules, containing one or more conditions and one or more (resulting) actions. The conditions use XPath-statements. These use the specified data interface, which is a predefined data structure. The actions concern assigning values to the data structure, or e.g. running a web service. </div><div> </div><div>+ Supports complex logic</div><div>+ Reusable </div><div>+ The logic is stored in Business comprehensible (=maintainable?) objects. </div><div>+- Changes may be delivered in a staging packages, which allows online maintenance by business users. *)</div><div>- Best suitable for compact rules: More complexity or functionality may require XPath knowledge</div><div> </div><div>Usage</div><div> - More complex IF.. THEN conditions on the the same attributes</div><div> - From 2 to 10+ different conditions</div><div> - Rules that check values (e.g. amounts) against static numbers, that may be changed frequently (by business users?)</div><div> </div><div><font size="1"><b>*) For advantages/disadvantages of staging packages, see:</b></font><p style="margin:0cm 0cm 0pt"><a href="https://wiki.cordys.com/pages/viewpage.action?pageId=164794477"><font face="Times New Roman" size="3">https://wiki.cordys.com/pages/viewpage.action?pageId=164794477</font></a></p></div><div> </div><div id="goi7" style="text-align:left"><img src="http://docs.google.com/File?id=dgj9fzbj_7csmv8xp6_b" style="height:183px;width:495px"></div><div><i>Example of decision table</i> </div><div> </div><div><b>Business Rules</b> </div><div>Business Rules are technically similar to decision tables, but are attached to events on business objects. (e.g. Insert in the database).</div><div> </div><div>Usage</div><div>- Validations </div><div>- Triggering actions, comparable to stored procedures.</div><div>- Triggering BPM-s on specific events </div><div> </div><div id="h_2q" style="text-align:left"> </div><div> </div><div><b>Database queries</b></div><div>Logic may be implemented by executing SQL on the database e.g. via look-up tables, in order to retrieve specific values for specific objects. In order to use the queries with BPM they will have to exposed via a web service.</div><div> </div><div>+ (Static) logic may be altered/extended during run-time. Screens may be offered to Business to alter the look-up tables.</div><div><div>+ May support large amounts of data. (E.g. customer bases)</div>- Logic is divided over 2 objects: data and query</div><div>- Logic is separated from business process.</div><div> </div><div>Usage</div><div> - Look-up actions of larger amounts of data</div><div> - Logic that the user should be able to alter implicitly at run-time by changing the database content </div><div> </div><div><b>Java</b></div><div>Java allows to write logic in java classes. In order to use it with BPM the java classes will have to be exposed via a WebService. </div><div> </div><div>+ Maximum functionality offered. Suitable for complex rules</div><div>- Java requires more objects and more complex settings for deployment</div><div>- Changes should pass a complete DTAP cycle</div><div>- Require knowledge of Java</div><div>- Logic is not visible to business user</div><div> </div><div>Usage</div><div> - Complex manipulations of numeric, date or string values.</div><div> - Complex logical structures (combined loops, nested IF..THEN-s, switch statements etc)</div><div> </div><div><b>XForm/java script</b></div><div>Java script may be used in User Interfaces to react on user events and take appropriate actions. This may include validations or UI actions, but also invoking Web Services (which may include business processes and business rules).</div><div> </div><div> </div><div><div id="ytzi" style="text-align:left"><img src="http://docs.google.com/File?id=dgj9fzbj_8ctr4drc9_b" style="height:345px;width:510px"></div><i>Example of Java Script with XForms</i> </div><div> </div><div>+ Directly usable in User Screens</div><div>- Not visible nor comprehensible for business users</div><div>- Requires java-script skills</div><div>- Executed in client, which may cause issues due to different browser types</div><div> </div><div> </div><div>Usage</div><div> - Triggering actions from a User interface (e.g. starting a BPM by a press on a button) </div><div> - (Cross) field Validations</div><div> </div><div> </div><div>It is crucial to select the right option in order to meet the non-functional requirements as stated earlier in this blog.</div><div><br>Regards,</div><div> </div><div>Harald van der Weel</div><br>Harald van der Weelhttp://www.blogger.com/profile/13352602368388711191noreply@blogger.com0tag:blogger.com,1999:blog-6291775863115138292.post-22627878986693777642010-06-13T22:30:00.002+02:002010-09-28T14:15:22.045+02:00Evaluation of Rules and Decision Tabl...<h2><span style="background-color: white;">Introduction</span></h2>Cordys BOP-4 offers numerous ways to add logic to Business Processes.<br />
<br />
One convenient way is to use Business Rules and Decision Tables. Business Rules apply to to business objects and are generally used to implement validations and logic that is often addressed at database level using stored procedures. <br />
<br />
Decision Tables have no direct link to a business object. They implement logic that is mainly used for medium complex conditional behaviour in a Business Process. Using decision tables we may prevent complex sequences of conditions appearing in our BPM, blurring the real intentions of the business process.<br />
<h2>Decision Tables </h2><br />
A decision table consists of a set of <b>Rules</b>, which each contain one or more <b>conditions</b> and <b>actions</b>. Conditions are evaluated to either true or false. Actions are executed if all conditions for a Rule evaluate to true. The <b>schema fragment</b> is the actual interface to the Decision Table. If used as a BPM activity it is exposed in the Message Map of the Business Rule modeler, and allows to specify input values and to retrieve output values after the step is completed. From the schema fragment <b>attributes</b> may be selected to use in conditions (e.g. for comparisons), and in actions (e.g. to assign values).<br />
<br />
<img src="http://docs.google.com/File?id=dgj9fzbj_3gz93z8c9_b" style="height: 157px; width: 459px;" /><br />
<i>Example of Decision Table, showing all concepts described above</i><br />
<h2>Execution</h2><br />
Execution of a Decision Table-step in a BPM comprises the following:<br />
<ol><li>First the massage mapping on the Decision Table attributes is made. </li>
<li>Next the evaluation process is started: Every rule is evaluated separately in sequence, starting from left most, working to right.</li>
<li>The values of the concerned condition attributes are used to evaluate the conditions of the rule. If each condition of a rule evaluates to true, the actions specified for that specific rule are executed, starting with the top-most, working down to the bottom.</li>
</ol><br />
<h2>Example</h2>In case we have a Decision Table TD, containing 3 rules: R1, R2 and R3, each having 2 conditions (Cx.1 and Cx.2, where x is the rule number), and 2 actions (Ax.1 and Ax.2 where x is the rule number), the statement in terms of pseudo code code would be like: <br />
<blockquote style="margin-right: 0px;"><span style="font-family: Courier New;">IF ( C1.1 AND C1.2) THEN</span><br />
<br />
<span style="font-family: Courier New;"> a1.1</span><br />
<br />
<span style="font-family: Courier New;"> a1.2</span><br />
<br />
<span style="font-family: Courier New;">END IF</span><br />
<br />
<span style="font-family: Courier New;">IF ( C2.1 AND C2.2) THEN</span><br />
<br />
<span style="font-family: Courier New;"> a2.1</span><br />
<br />
<span style="font-family: Courier New;"> a2.2</span><br />
<br />
<span style="font-family: Courier New;">END IF </span><br />
<br />
<span style="font-family: Courier New;">IF ( C3.1 AND C3.2) THEN</span><br />
<br />
<span style="font-family: Courier New;"> a3.1</span><br />
<br />
<span style="font-family: Courier New;"> a3.2</span><br />
<br />
<span style="font-family: Courier New;">END IF</span></blockquote><br />
<h3>Implications</h3><br />
The example shows three important implications:<br />
<ul><li> <b>Each rule is evaluated, even if its predecessor evaluates to true.</b> (Hence: multiple rules may be executed)<br />
</li>
<li> <b>There is no OTHERWISE or DEFAULT construct available.</b> (Like in the java SWITCH..CASE statement)<br />
</li>
<li> <b>The execution of an action of a certain rule may impact the result of the execution of one of the succeeding rules</b> (e.g. by modifying values of attributes used in the conditions)<b> </b><br />
</li>
</ul>So what if we want to perform a default action "a_def" in case none of the specified rules evaluate to true?<br />
<br />
<br />
The solution would be to create an additional rule: R4. <br />
<br />
R4 would contain 3 rules that are all the negations of the conditions of R1, R2 and R3:<br />
<br />
<br />
In pseudo code: <br />
<blockquote style="margin-right: 0px;"><span style="font-family: Courier New;">IF ((NOT (C1.1 AND C1.2)) AND (NOT (C2.1 AND C2.2)) AND (NOT (C3.1 AND C3.2))) THEN</span><br />
<br />
<span style="font-family: Courier New;"> a_def</span><br />
<br />
<span style="font-family: Courier New;">END IF</span></blockquote>One can imagine that this may be an time consuming and error prone activity if the Decision Table contains more rules and conditions. <br />
<br />
An alternative may be using a flag, indicating if at least one of the rules has evaluated to true. This flag should be set initially to false. In case a rules evaluates to true, the flag should be set to true. (This implies that every rule would need an additional action that implements this!). In last (default) rule it just requires to check the value of the flag: If it is (still) false, the default action should be executed, otherwise not.<br />
<br />
<br />
Note that the flag will have to be contained in the schema fragment of the Decision Table, and hence appears in its interface. Not the most elegant solution, but in certain cases a good trade off for the the possible complex conditions as described above.<br />
<br />
<span style="font-family: Comic Sans MS;">Harald van der Weel</span><br />
<br />
e-mail: <a href="mailto:haraldvanderweel@gmail.com">haraldvanderweel@gmail.com</a>Harald van der Weelhttp://www.blogger.com/profile/13352602368388711191noreply@blogger.com0