| <?xml version="1.0" encoding="UTF-8"?> |
| <org.eclipse.epf.uma:TaskDescription xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:org.eclipse.epf.uma="http://www.eclipse.org/epf/uma/1.0.6/uma.ecore" xmlns:epf="http://www.eclipse.org/epf" epf:version="1.5.1" xmlns:rmc="http://www.ibm.com/rmc" rmc:version="7.5.1" xmi:id="-RIbruSRPcrAZIMhywydlAw" name="determine_rule_implementation,_NL7WwB6EEdu_zM9rU7U4dw" guid="-RIbruSRPcrAZIMhywydlAw" authors="Jerome Boyer" changeDate="2010-08-15T08:48:55.000-0700" version="1.0.0"> |
| <mainDescription><a id="XE_rule__determine_implementation" name="XE_rule__determine_implementation"></a> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| Project teams involved in BRMS deployment are often asking the following type of questions: |
| </p> |
| <ul style="MARGIN-TOP: 0cm" type="disc"> |
| <li class="MsoNormal" style="MARGIN: 3pt 0cm; mso-list: l4 level1 lfo5; tab-stops: list 36.0pt"> |
| When should I use BRMS versus a&nbsp;BPM? |
| </li> |
| <li class="MsoNormal" style="MARGIN: 3pt 0cm; mso-list: l4 level1 lfo5; tab-stops: list 36.0pt"> |
| How do I decide what decisions should I put into a BRE? |
| </li> |
| <li class="MsoNormal" style="MARGIN: 3pt 0cm; mso-list: l4 level1 lfo5; tab-stops: list 36.0pt"> |
| When should I use BRMS versus code?&nbsp; |
| </li> |
| </ul> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| There are definitively multiple variables which could influence the decision on where to implement rules. We can start |
| by looking at the BRMS value propositions, it should help to get a first set of variables: |
| </p> |
| <ul style="MARGIN-TOP: 0cm" type="disc"> |
| <li class="MsoNormal" style="MARGIN: 3pt 0cm; mso-list: l1 level1 lfo6; tab-stops: list 36.0pt"> |
| Adaptability – Measure the ability to change the business logic easily. The motivation can be due to short deadline |
| constraint, or frequent small changes or important change that may occur every month or quarter. |
| </li> |
| <li class="MsoNormal" style="MARGIN: 3pt 0cm; mso-list: l1 level1 lfo6; tab-stops: list 36.0pt"> |
| Transparency – Represents the need to clearly implement the business logic as what was agreed upon the business |
| unit and the IT team, in a way that every parties understand the logic. This is leading to express the logic in |
| natural or close to natural language. |
| </li> |
| <li class="MsoNormal" style="MARGIN: 3pt 0cm; mso-list: l1 level1 lfo6; tab-stops: list 36.0pt"> |
| Auditability – Represents the ability to trace from the business motivation to the execution of the policy to |
| better understand what was the logic behind a decision. |
| </li> |
| <li class="MsoNormal" style="MARGIN: 3pt 0cm; mso-list: l1 level1 lfo6; tab-stops: list 36.0pt"> |
| Reusability – Need to share business logic across processes or applications and stay . consistent across |
| applications/transactions |
| </li> |
| <li class="MsoNormal" style="MARGIN: 3pt 0cm; mso-list: l1 level1 lfo6; tab-stops: list 36.0pt"> |
| Manageability- This variable addresses the life cycle management of the business logic. Who writes what, and when, |
| and all the questions related to maintenance and evolutions of the rule-based service. |
| </li> |
| </ul> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| The purpose here is not to say it is not possible to support those variables in standard software development |
| practices, but more to find some good patterns on how to decide on where to implement the business logic. |
| </p><br class="MsoNormal" style="MARGIN: 3pt 0cm" /> |
| <br /> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| When looking at a business rules statement software engineer can see different possible choices of implementation like: |
| </p> |
| <ul style="MARGIN-TOP: 0cm" type="disc"> |
| <li class="MsoNormal" style="MARGIN: 3pt 0cm; mso-list: l0 level1 lfo7; tab-stops: list 36.0pt"> |
| Data model: designing an object oriented object model involves supporting a lot of business rules. A statement like |
| a mortgage application can have a primary and a secondary borrower, will be supported by two classes and a 1 to 2 |
| relationship. At the instantiation of those classes the control of the cardinality can be done in the application |
| logic, or the database, or the GUI structure. |
| </li> |
| <li class="MsoNormal" style="MARGIN: 3pt 0cm; mso-list: l0 level1 lfo7; tab-stops: list 36.0pt"> |
| Application code: implementing the logic in function, procedural code or methods in service layer or business |
| objects. |
| </li> |
| <li class="MsoNormal" style="MARGIN: 3pt 0cm; mso-list: l0 level1 lfo7; tab-stops: list 36.0pt"> |
| BPM process flow, tasks or links: BPM tools are addressing business process efficiency issue specifically on "who |
| is involved", "when they should be involved". "what they need to do". BPM supports manual human and automated |
| actors. At a glance the business logic to implement in BPM is linked to people, task, and data to process within a |
| task. When supporting purely automated tasks BPM is orchestrating the application logic and services (BPEL engine). |
| BRMS complements BPM by adding the why to a BPM task, why it behaves a certain way, why this decision is done. |
| </li> |
| <li class="MsoNormal" style="MARGIN: 3pt 0cm; mso-list: l0 level1 lfo7; tab-stops: list 36.0pt"> |
| Rule engine: <span style="mso-spacerun: yes">&nbsp;</span>using predefined structure like if then else statement or |
| decision table, rule flow, decision tree, function, rule template or other high level language... |
| </li> |
| <li class="MsoNormal" style="MARGIN: 3pt 0cm; mso-list: l0 level1 lfo7; tab-stops: list 36.0pt"> |
| Graphical user interface: <span style="mso-spacerun: yes">&nbsp;</span>using scripting language or server side code |
| in controller class it is possible to implement data validation type of business rules. |
| </li> |
| </ul> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| In the following paragraphs address each of different choices with their impact on the variables |
| </p><br /> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| <a><font color="#0066B2"><em><font size="3">Rule in Data Model</font></em></font></a> |
| </p> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| <span style="mso-bidi-language: HE">Rule which is controlling the structure of the model and the reference integrity |
| should be in the physical data model, the O/R mapping layer or on the domain object model.</span> |
| </p> |
| <ul style="MARGIN-TOP: 0cm" type="disc"> |
| <li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-list: l6 level1 lfo2; tab-stops: list 36.0pt"> |
| <span style="mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt">Rule setting constraint on relationship - |
| <span style="mso-spacerun: yes">&nbsp;</span>like a loan application could only have two borrowers</span> |
| </li> |
| <li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-list: l6 level1 lfo2; tab-stops: list 36.0pt"> |
| <span style="mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt">Rule on the structure of the business |
| entities - like this attribute is part of this object</span> |
| </li> |
| <li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-list: l6 level1 lfo2; tab-stops: list 36.0pt"> |
| <span style="mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt">The following facts are based on a simple |
| user authentication problem, are well implemented in an object model and the supporting application code which |
| create the instance from the data (O/R mapping layer or DAO or service layer):</span> |
| </li> |
| </ul> |
| <p class="MsoNormal" |
| style="MARGIN: 3pt 0cm 3pt 54pt; TEXT-INDENT: -18pt; mso-list: l5 level1 lfo3; tab-stops: list 54.0pt"> |
| <span |
| style="FONT-FAMILY: Symbol; mso-bidi-language: HE; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span |
| style="mso-list: Ignore">·<span |
| style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span> <span |
| style="mso-bidi-language: HE">A Company has a list of users who can login to the application</span> |
| </p> |
| <p class="MsoNormal" |
| style="MARGIN: 3pt 0cm 3pt 54pt; TEXT-INDENT: -18pt; mso-list: l5 level1 lfo3; tab-stops: list 54.0pt"> |
| <span |
| style="FONT-FAMILY: Symbol; mso-bidi-language: HE; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span |
| style="mso-list: Ignore">·<span |
| style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span> <span |
| style="mso-bidi-language: HE">A Company has a list of groups of user</span> |
| </p> |
| <p class="MsoNormal" |
| style="MARGIN: 3pt 0cm 3pt 54pt; TEXT-INDENT: -18pt; mso-list: l5 level1 lfo3; tab-stops: list 54.0pt"> |
| <span |
| style="FONT-FAMILY: Symbol; mso-bidi-language: HE; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span |
| style="mso-list: Ignore">·<span |
| style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span> <span |
| style="mso-bidi-language: HE">A User is part of a group</span> |
| </p> |
| <p class="MsoNormal" |
| style="MARGIN: 3pt 0cm 3pt 54pt; TEXT-INDENT: -18pt; mso-list: l5 level1 lfo3; tab-stops: list 54.0pt"> |
| <span |
| style="FONT-FAMILY: Symbol; mso-bidi-language: HE; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span |
| style="mso-list: Ignore">·<span |
| style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span> <span |
| style="mso-bidi-language: HE">A group includes a list of Users</span> |
| </p> |
| <p class="MsoNormal" |
| style="MARGIN: 3pt 0cm 3pt 54pt; TEXT-INDENT: -18pt; mso-list: l5 level1 lfo3; tab-stops: list 54.0pt"> |
| <span |
| style="FONT-FAMILY: Symbol; mso-bidi-language: HE; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"><span |
| style="mso-list: Ignore">·<span |
| style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span> <span |
| style="mso-bidi-language: HE">A group has one user reference who is the creator of the group</span> |
| </p> |
| <p> |
| Terms and facts and derived attributes&nbsp;are the primary constituents of data models and are represented in a UML |
| class diagram, and logical data model (entities/relationship model), or a physical data model. |
| </p> |
| <p> |
| <span style="mso-bidi-language: HE">The following table lists the impact of this implementation on the previously |
| defined variables</span> |
| </p> |
| <div align="center"> |
| <table class="ISISTable" |
| style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-alt: solid silver 1.0pt; mso-yfti-tbllook: 480; mso-border-insideh: 1.0pt solid silver; mso-border-insidev: 1.0pt solid silver" |
| cellspacing="0" cellpadding="0" border="1"> |
| <thead> |
| <tr style="mso-yfti-irow: -1; mso-yfti-firstrow: yes"> |
| <td |
| style="BORDER-RIGHT: gray 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: gray 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #f3f3f3; PADDING-BOTTOM: 0cm; BORDER-LEFT: gray 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: gray 1pt solid" |
| valign="top" width="151"> |
| <p class="MsoNormalCxSpMiddle" style="TEXT-ALIGN: center; mso-yfti-cnfc: 1" align="center"> |
| <b style="mso-bidi-font-weight: normal"><i style="mso-bidi-font-style: normal"><span |
| style="COLOR: #005da0; mso-bidi-language: HE"><font size="3"><font |
| face="Times New Roman">Variables</font></font></span></i></b> |
| </p> |
| </td> |
| <td |
| style="BORDER-RIGHT: gray 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: gray 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #f3f3f3; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 221.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: gray 1pt solid; mso-border-left-alt: solid gray 1.0pt" |
| valign="top" width="295"> |
| <p class="MsoNormalCxSpMiddle" style="TEXT-ALIGN: center; mso-yfti-cnfc: 1" align="center"> |
| <b style="mso-bidi-font-weight: normal"><i style="mso-bidi-font-style: normal"><span |
| style="COLOR: #005da0; mso-bidi-language: HE"><font size="3"><font |
| face="Times New Roman">Evaluation</font></font></span></i></b> |
| </p> |
| </td> |
| </tr> |
| </thead> |
| <tbody> |
| <tr style="mso-yfti-irow: 0"> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: silver 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="151"> |
| <p class="MsoNormalCxSpMiddle"> |
| <font face="Times New Roman"><span |
| style="FONT-SIZE: 8pt; mso-bidi-font-size: 12.0pt">Adaptability</span></font> |
| </p> |
| </td> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 221.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid silver 1.0pt; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="295"> |
| <p class="MsoNormalCxSpMiddle"> |
| <span style="FONT-SIZE: 8pt; mso-bidi-language: HE; mso-bidi-font-size: 12.0pt"><font |
| face="Times New Roman">Very static implementation. A change in the constraints of the object model |
| impact, data persistence, logical data model, service and presentation layers. Change is managed on |
| a monthly or yearly basis</font></span> |
| </p> |
| </td> |
| </tr> |
| <tr style="mso-yfti-irow: 1"> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: silver 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="151"> |
| <p class="MsoNormalCxSpMiddle"> |
| <font face="Times New Roman"><span |
| style="FONT-SIZE: 8pt; mso-bidi-font-size: 12.0pt">Transparency</span></font> |
| </p> |
| </td> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 221.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid silver 1.0pt; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="295"> |
| <p class="MsoNormalCxSpMiddle"> |
| <span style="FONT-SIZE: 8pt; mso-bidi-language: HE; mso-bidi-font-size: 12.0pt"><font |
| face="Times New Roman">Data model represented as UML classes diagram is doing a poor job to |
| communicate to business. Entities diagram represents a more high level representation of the domain |
| model, but forces the team to maintain the link between the implementation and the business |
| representation.</font></span> |
| </p> |
| </td> |
| </tr> |
| <tr style="mso-yfti-irow: 2"> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: silver 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="151"> |
| <p class="MsoNormalCxSpMiddle"> |
| <font face="Times New Roman"><span |
| style="FONT-SIZE: 8pt; mso-bidi-font-size: 12.0pt">Auditability</span></font> |
| </p> |
| </td> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 221.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid silver 1.0pt; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="295"> |
| <p class="MsoNormalCxSpMiddle"> |
| <span style="FONT-SIZE: 8pt; mso-bidi-language: HE; mso-bidi-font-size: 12.0pt"><font |
| face="Times New Roman">Configuration management tool, with a strict development process and |
| disciplines can help to trace back to the business motivation.</font></span> |
| </p> |
| </td> |
| </tr> |
| <tr style="mso-yfti-irow: 3"> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: silver 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="151"> |
| <p class="MsoNormalCxSpMiddle"> |
| <span style="FONT-SIZE: 8pt; mso-bidi-font-size: 12.0pt"><font |
| face="Times New Roman">Reusability</font></span> |
| </p> |
| </td> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 221.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid silver 1.0pt; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="295"> |
| <p class="MsoNormalCxSpMiddle"> |
| <span style="FONT-SIZE: 8pt; mso-bidi-language: HE; mso-bidi-font-size: 12.0pt"><font |
| face="Times New Roman">Domain Object model can be designed as reusable. But in the reality each |
| application needs a view of the core business object model, and so part of the implemented |
| application will be to build those view.</font></span> |
| </p> |
| </td> |
| </tr> |
| <tr style="mso-yfti-irow: 4; mso-yfti-lastrow: yes"> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: silver 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="151"> |
| <p class="MsoNormalCxSpMiddle"> |
| <span style="FONT-SIZE: 8pt; mso-bidi-font-size: 12.0pt"><font |
| face="Times New Roman">Manageability</font></span> |
| </p> |
| </td> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 221.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid silver 1.0pt; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="295"> |
| <p class="MsoNormalCxSpMiddle"> |
| <span style="FONT-SIZE: 8pt; mso-bidi-language: HE; mso-bidi-font-size: 12.0pt"><font |
| face="Times New Roman">Configuration management tools and strict discipline can help maintain the |
| business logic.</font></span> |
| </p> |
| </td> |
| </tr> |
| </tbody> |
| </table> |
| </div><br class="MsoNormal" style="MARGIN: 3pt 0cm" /> |
| <br /> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| <a><font color="#0066B2"><em><font size="3">Rule in application code</font></em></font></a> |
| </p> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| <span style="mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt">Implementing business rule in application code is |
| currently the most common way the IT developer is doing it. The major justifications are performance and flexibility of |
| the coding language. Using hard coded if/then/else statements isn't too flexible, but in the hands of a top notch |
| programmer it can be very fast and arguably as fast as or faster than a rule engine. Assuming the programmer has |
| unlimited time to optimize the execution for a fixed set of rules. If the ruleset changes frequently and the system |
| can't tolerate a big drop in performance, than a rule engine is the solution.</span> |
| </p> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| <span style="mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt">The following example of business rules may be |
| easily implemented in code:</span> |
| </p> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| <span class="ISISCodeParagraphChar"><font face="Courier">verify in each items the customer bought since he is customer |
| with us there is at least one article of type T so that we can propose the new product Y with X % of discount, except |
| if the customer is from the state of New York or New Jersey</font></span><span |
| style="mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt">.</span> |
| </p><br class="MsoNormal" style="MARGIN: 3pt 0cm" /> |
| <br /> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| <span style="mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt">We can implement this in a method which loops on |
| the articles bought by a given customer and do the search. At a first analysis, navigating in a collection of objects |
| and testing multiples conditions on them is easy to implement using the power of programming language.</span> |
| </p> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| <span style="mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt">One thing interesting will be the hard coding of |
| the value of New York, New Jersey... If this logic change we need to add if statements in the code.</span> |
| </p><br class="MsoNormal" style="MARGIN: 3pt 0cm" /> |
| <br /> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| <span style="mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt">Other type of rules are related to the control of |
| the execution of a set of "services" to support specific use case. Dispatching, orchestration, data manipulation, … are |
| better candidate to be implemented in application code. Those rules are more static, often more complex, and |
| definitively linked to context of execution. The context may be too complex to expose to a rule engine.</span> |
| </p> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| <span style="mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt">Orchestration are now very well supported by |
| BPM-BPEL engine because the developer needs to add flexibility on the service selection and invocation.<span |
| style="mso-spacerun: yes">&nbsp;</span></span> |
| </p><br class="MsoNormal" style="MARGIN: 3pt 0cm" /> |
| <br /> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| <span style="mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt">The evaluation of the important variables |
| is:</span> |
| </p> |
| <div align="center"> |
| <table class="ISISTable" |
| style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-alt: solid silver 1.0pt; mso-yfti-tbllook: 480; mso-border-insideh: 1.0pt solid silver; mso-border-insidev: 1.0pt solid silver" |
| cellspacing="0" cellpadding="0" border="1"> |
| <thead> |
| <tr style="mso-yfti-irow: -1; mso-yfti-firstrow: yes"> |
| <td |
| style="BORDER-RIGHT: gray 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: gray 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #f3f3f3; PADDING-BOTTOM: 0cm; BORDER-LEFT: gray 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: gray 1pt solid" |
| valign="top" width="151"> |
| <p class="MsoNormalCxSpMiddle" style="TEXT-ALIGN: center; mso-yfti-cnfc: 1" align="center"> |
| <b style="mso-bidi-font-weight: normal"><i style="mso-bidi-font-style: normal"><span |
| style="COLOR: #005da0; mso-bidi-language: HE"><font size="3"><font |
| face="Times New Roman">Variables</font></font></span></i></b> |
| </p> |
| </td> |
| <td |
| style="BORDER-RIGHT: gray 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: gray 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #f3f3f3; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 334.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: gray 1pt solid; mso-border-left-alt: solid gray 1.0pt" |
| valign="top" width="446"> |
| <p class="MsoNormalCxSpMiddle" style="TEXT-ALIGN: center; mso-yfti-cnfc: 1" align="center"> |
| <b style="mso-bidi-font-weight: normal"><i style="mso-bidi-font-style: normal"><span |
| style="COLOR: #005da0; mso-bidi-language: HE"><font size="3"><font |
| face="Times New Roman">Evaluation</font></font></span></i></b> |
| </p> |
| </td> |
| </tr> |
| </thead> |
| <tbody> |
| <tr style="mso-yfti-irow: 0"> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: silver 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="151"> |
| <p class="MsoNormalCxSpMiddle"> |
| <font face="Times New Roman"><span |
| style="FONT-SIZE: 8pt; mso-bidi-font-size: 12.0pt">Adaptability</span></font> |
| </p> |
| </td> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 334.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid silver 1.0pt; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="446"> |
| <p class="MsoNormalCxSpMiddle"> |
| <span style="FONT-SIZE: 8pt; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt"><font |
| face="Times New Roman">the necessity to change code when a business rule changes is still |
| unpleasant: software build are more efficient and cost less than before but deployment may be |
| expensive depending of the complexity of the production environment. <span |
| style="mso-spacerun: yes">&nbsp;</span></font></span> |
| </p> |
| <p class="MsoNormalCxSpMiddle"> |
| <span style="FONT-SIZE: 8pt; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt"><font |
| face="Times New Roman">Changing code under time pressure usually leads to poor |
| quality</font></span> |
| </p><br class="MsoNormalCxSpMiddle" /> |
| <br /> |
| </td> |
| </tr> |
| <tr style="mso-yfti-irow: 1"> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: silver 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="151"> |
| <p class="MsoNormalCxSpMiddle"> |
| <font face="Times New Roman"><span |
| style="FONT-SIZE: 8pt; mso-bidi-font-size: 12.0pt">Transparency</span></font> |
| </p> |
| </td> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 334.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid silver 1.0pt; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="446"> |
| <p class="MsoNormalCxSpMiddle"> |
| <span style="FONT-SIZE: 8pt; mso-bidi-language: HE; mso-bidi-font-size: 12.0pt"><font |
| face="Times New Roman">Poor. The logic as defined by the business is split in multiple parts of the |
| code, methods and procedures.</font></span> |
| </p> |
| </td> |
| </tr> |
| <tr style="mso-yfti-irow: 2"> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: silver 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="151"> |
| <p class="MsoNormalCxSpMiddle"> |
| <font face="Times New Roman"><span |
| style="FONT-SIZE: 8pt; mso-bidi-font-size: 12.0pt">Auditability</span></font> |
| </p> |
| </td> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 334.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid silver 1.0pt; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="446"> |
| <p class="MsoNormalCxSpMiddle"> |
| <span style="FONT-SIZE: 8pt; mso-bidi-language: HE; mso-bidi-font-size: 12.0pt"><font |
| face="Times New Roman">Poor. Only strict use of configuration management tools with a strict |
| development process may help.</font></span> |
| </p> |
| </td> |
| </tr> |
| <tr style="mso-yfti-irow: 3"> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: silver 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="151"> |
| <p class="MsoNormalCxSpMiddle"> |
| <span style="FONT-SIZE: 8pt; mso-bidi-font-size: 12.0pt"><font |
| face="Times New Roman">Reusability</font></span> |
| </p> |
| </td> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 334.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid silver 1.0pt; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="446"> |
| <p class="MsoNormalCxSpMiddle"> |
| <span style="FONT-SIZE: 8pt; mso-bidi-language: HE; mso-bidi-font-size: 12.0pt"><font |
| face="Times New Roman">If the logic is implemented in a service layer with defined interface it may |
| be possible to reuse part of the methods.</font></span> |
| </p> |
| </td> |
| </tr> |
| <tr style="mso-yfti-irow: 4; mso-yfti-lastrow: yes"> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: silver 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="151"> |
| <p class="MsoNormalCxSpMiddle"> |
| <span style="FONT-SIZE: 8pt; mso-bidi-font-size: 12.0pt"><font |
| face="Times New Roman">Manageability</font></span> |
| </p> |
| </td> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 334.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid silver 1.0pt; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="446"> |
| <p class="MsoNormalCxSpMiddle"> |
| <font face="Times New Roman"><span |
| style="FONT-SIZE: 8pt; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt">Developer is |
| responsible to implement the change, and use configuration management tools and strict development |
| disciplines.</span></font> |
| </p> |
| </td> |
| </tr> |
| </tbody> |
| </table> |
| </div><br class="MsoNormal" style="MARGIN: 3pt 0cm" /> |
| <br /> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| <a><font color="#0066B2"><em><font size="3">Rule in process map</font></em></font></a> |
| </p> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| <span style="mso-bidi-language: HE">Business process automation is the technology components substituting and/or |
| supplementing manual processes to manage information flow within an organization to lower costs, reduce risk, and |
| increase consistency. In this context Business rules describe the structure, operation, and strategy of an |
| organization's business process. The business process definition can be seen as a business rule. Typically a rule |
| involving routing of transactional data to a queue, a task, or a sub process will be most likely implemented in a |
| process map. Defined at the link level business rules are linked to the structure of the process flow. Once designed |
| and implemented there is few chance those rule will change. Changing a business process is most of the time risky: we |
| do not want to change thing working and involving a lot of parties and stakeholders. In fact</span> new policies, |
| regulations or business strategies may affect the rules without changing the core business processes. |
| </p><br class="MsoNormal" style="MARGIN: 3pt 0cm" /> |
| <br /> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| <span style="mso-bidi-language: HE">A rule like: "<i style="mso-bidi-font-style: normal">if there is an exception in |
| the claim processing we want a supervisor to study the claim and the accumulated reasons extracted by the process so |
| far"</i> will most likely finish as guard on a process map link:</span> |
| </p><br class="MsoNormal" style="MARGIN: 3pt 0cm" /> |
| <br /> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| <img height="348" alt="" src="resources/brinbpm.bmp" width="313" /> |
| </p><br class="MsoNormal" style="MARGIN: 3pt 0cm" /> |
| <br /> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| Task 1 will most of the time call a rule engine to take decision on the claim. One of the pattern is to accumulate all |
| the possible reasons in a list. If the list include an exception or high priority reason, the process map will route to |
| the "Process Exception" task. This task can queue the work item to a supervisor queues. |
| </p><br class="MsoNormal" style="MARGIN: 3pt 0cm" /> |
| <br /> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| <span style="mso-bidi-language: HE">There are a lot tasks in a business process that are decision rich, so with a lot |
| of business rule to execute before completing the task. Those rules can be executed by a rule engine. The integration |
| Rule Engine – BPM will bring the value to support those cases. But as good practice it is always possible to try to |
| re-arrange an activity diagram of a use case or a process map so that some activities are purely automatically executed |
| in a rule engine mapped as a rule flow.</span> |
| </p><br class="MsoNormal" style="MARGIN: 3pt 0cm" /> |
| <br /> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| <span style="mso-bidi-language: HE">The variables evaluation:</span> |
| </p> |
| <div align="center"> |
| <table class="ISISTable" |
| style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-alt: solid silver 1.0pt; mso-yfti-tbllook: 480; mso-border-insideh: 1.0pt solid silver; mso-border-insidev: 1.0pt solid silver" |
| cellspacing="0" cellpadding="0" border="1"> |
| <thead> |
| <tr style="mso-yfti-irow: -1; mso-yfti-firstrow: yes"> |
| <td |
| style="BORDER-RIGHT: gray 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: gray 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #f3f3f3; PADDING-BOTTOM: 0cm; BORDER-LEFT: gray 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: gray 1pt solid" |
| valign="top" width="151"> |
| <p class="MsoNormalCxSpMiddle" style="TEXT-ALIGN: center; mso-yfti-cnfc: 1" align="center"> |
| <b style="mso-bidi-font-weight: normal"><i style="mso-bidi-font-style: normal"><span |
| style="COLOR: #005da0; mso-bidi-language: HE"><font size="3"><font |
| face="Times New Roman">Variables</font></font></span></i></b> |
| </p> |
| </td> |
| <td |
| style="BORDER-RIGHT: gray 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: gray 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #f3f3f3; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 344.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: gray 1pt solid; mso-border-left-alt: solid gray 1.0pt" |
| valign="top" width="460"> |
| <p class="MsoNormalCxSpMiddle" style="TEXT-ALIGN: center; mso-yfti-cnfc: 1" align="center"> |
| <b style="mso-bidi-font-weight: normal"><i style="mso-bidi-font-style: normal"><span |
| style="COLOR: #005da0; mso-bidi-language: HE"><font size="3"><font |
| face="Times New Roman">Evaluation</font></font></span></i></b> |
| </p> |
| </td> |
| </tr> |
| </thead> |
| <tbody> |
| <tr style="mso-yfti-irow: 0"> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: silver 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="151"> |
| <p class="MsoNormalCxSpMiddle"> |
| <font face="Times New Roman"><span |
| style="FONT-SIZE: 8pt; mso-bidi-font-size: 12.0pt">Adaptability</span></font> |
| </p> |
| </td> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 344.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid silver 1.0pt; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="460"> |
| <p class="MsoNormalCxSpMiddle"> |
| <span style="FONT-SIZE: 8pt; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt"><font |
| face="Times New Roman">Business rules hardly coded in using BPM notation is not efficient and lead |
| to complex map. The real design implementation is to mix BPM map and business rules-decision |
| delegated in a process task. In this type of implementation we can leverage the best of both |
| worlds, and the adaptability is excellent.</font></span> |
| </p> |
| </td> |
| </tr> |
| <tr style="mso-yfti-irow: 1"> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: silver 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="151"> |
| <p class="MsoNormalCxSpMiddle"> |
| <font face="Times New Roman"><span |
| style="FONT-SIZE: 8pt; mso-bidi-font-size: 12.0pt">Transparency</span></font> |
| </p> |
| </td> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 344.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid silver 1.0pt; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="460"> |
| <p class="MsoNormalCxSpMiddle"> |
| <span style="FONT-SIZE: 8pt; mso-bidi-language: HE; mso-bidi-font-size: 12.0pt"><font |
| face="Times New Roman">Excellent: when the integration of BPMS and BRMS is done perfectly, the |
| business and IT team have a clear understanding of the process execution and the decision done by a |
| task by studying the rules attached to the task.</font></span> |
| </p> |
| </td> |
| </tr> |
| <tr style="mso-yfti-irow: 2"> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: silver 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="151"> |
| <p class="MsoNormalCxSpMiddle"> |
| <font face="Times New Roman"><span |
| style="FONT-SIZE: 8pt; mso-bidi-font-size: 12.0pt">Auditability</span></font> |
| </p> |
| </td> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 344.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid silver 1.0pt; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="460"> |
| <p class="MsoNormalCxSpMiddle"> |
| <span style="FONT-SIZE: 8pt; mso-bidi-language: HE; mso-bidi-font-size: 12.0pt"><font |
| face="Times New Roman">Excellent: both tools has version control, and it is possible to link |
| process map version to rule set version.</font></span> |
| </p> |
| </td> |
| </tr> |
| <tr style="mso-yfti-irow: 3"> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: silver 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="151"> |
| <p class="MsoNormalCxSpMiddle"> |
| <span style="FONT-SIZE: 8pt; mso-bidi-font-size: 12.0pt"><font |
| face="Times New Roman">Reusability</font></span> |
| </p> |
| </td> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 344.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid silver 1.0pt; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="460"> |
| <p class="MsoNormalCxSpMiddle"> |
| <span style="FONT-SIZE: 8pt; mso-bidi-language: HE; mso-bidi-font-size: 12.0pt"><font |
| face="Times New Roman">Rules defined in a task should be expose to the other application as a |
| service. So reusability can be achieved. Rules in a BPM map are not really reusable.</font></span> |
| </p> |
| </td> |
| </tr> |
| <tr style="mso-yfti-irow: 4; mso-yfti-lastrow: yes"> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: silver 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="151"> |
| <p class="MsoNormalCxSpMiddle"> |
| <span style="FONT-SIZE: 8pt; mso-bidi-font-size: 12.0pt"><font |
| face="Times New Roman">Manageability</font></span> |
| </p> |
| </td> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 344.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid silver 1.0pt; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="460"> |
| <p class="MsoNormalCxSpMiddle"> |
| <font face="Times New Roman"><span |
| style="FONT-SIZE: 8pt; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt">Process logic will |
| have a more stable life cycle, and it is managed in the BPMS. <span |
| style="mso-spacerun: yes">&nbsp;</span></span></font> |
| </p> |
| </td> |
| </tr> |
| </tbody> |
| </table> |
| </div><br class="MsoNormal" style="MARGIN: 3pt 0cm" /> |
| <br /> |
| <br class="MsoNormal" style="MARGIN: 3pt 0cm" /> |
| <br /> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| <a><font color="#0066B2"><em><font size="3">Rule in a rule engine</font></em></font></a> |
| </p> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| <span style="mso-bidi-language: HE">Any type of rule using a forward chaining approach will best fit in any RETE rule |
| engine. To avoid long explanation a rule engine will perform very efficiently the following rules which are more |
| complex to implement in code:</span> |
| </p> |
| <ul style="MARGIN-TOP: 0cm" type="disc"> |
| <li class="MsoNormal" style="MARGIN: 3pt 0cm; mso-list: l2 level1 lfo4; tab-stops: list 36.0pt"> |
| <span style="mso-bidi-language: HE">Set parameter = A / (B ^ 2)</span> |
| </li> |
| <li class="MsoNormal" style="MARGIN: 3pt 0cm; mso-list: l2 level1 lfo4; tab-stops: list 36.0pt"> |
| <span style="mso-bidi-language: HE">If parameter is above 30 then the risk is<span |
| style="mso-spacerun: yes">&nbsp;</span> medium</span> |
| </li> |
| <li class="MsoNormal" style="MARGIN: 3pt 0cm; mso-list: l2 level1 lfo4; tab-stops: list 36.0pt"> |
| <span style="mso-bidi-language: HE">If the risk is medium then alert the manager</span> |
| </li> |
| </ul> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| <span style="mso-bidi-language: HE"><span style="mso-spacerun: yes">&nbsp;</span>If we enter a new value for A all the |
| depend rules will be fired. Rules can be entered in any order we want, it is less declarative than procedural |
| code.</span> |
| </p><br class="MsoNormal" style="MARGIN: 3pt 0cm" /> |
| <br /> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| <span style="mso-bidi-language: HE">Backward chaining rule pattern can also been supported by a rule engine. The rule |
| system works down the tree to find the data that it requires. It will ask question to be able to infer decisions. It is |
| possible to implement backward chaining with product using pure inference by&nbsp;using a goal object.</span> |
| </p><br class="MsoNormal" style="MARGIN: 3pt 0cm" /> |
| <br /> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| <span style="mso-bidi-language: HE">As we already stated one of the key factor is flexibility. We already encounter the |
| following decision: "This rule will not change"... but in fact it will do in the future or some of related one" |
| .</span> |
| </p> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| <span style="mso-bidi-language: HE">We can for example take a simple example of a static rule defined as</span> |
| </p> |
| <p class="MsoNormal" style="MARGIN: 1.9pt 0cm 0pt 18pt; TEXT-ALIGN: justify"> |
| <span class="ISISCodeParagraphChar"><font face="Courier">If the status of the customer is gold and the product is |
| &lt;&gt; then apply &lt;&gt; % discount</font></span><span style="mso-bidi-language: HE">.</span> |
| </p><br class="MsoNormal" style="MARGIN: 3pt 0cm" /> |
| <br /> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| <span style="mso-bidi-language: HE">This rule can be implemented within application code using some tables in a |
| database that link the product, the category of possible status and the discount to apply. But when discussing with the |
| business user to understand what is a gold customer? We can get other conditions that definitively will change over |
| time: "A customer who spend more than &lt;&gt; the amount of money... during the last 6 months ...No !<span |
| style="mso-spacerun: yes">&nbsp;</span> during the last four month only for the product X because it was only available |
| for 4 months!, … Okay but customer in the states {,,,,} could not be part of the gold status... Ah I forgot, ... A |
| customer must have 18 years old, and by the way customer working for our company or subsidiaries could not be part of |
| the gold...</span> |
| </p><br class="MsoNormal" style="MARGIN: 3pt 0cm" /> |
| <br /> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| <span style="mso-bidi-language: HE">The variables evaluation:</span> |
| </p> |
| <div align="center"> |
| <table class="ISISTable" |
| style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-alt: solid silver 1.0pt; mso-yfti-tbllook: 480; mso-border-insideh: 1.0pt solid silver; mso-border-insidev: 1.0pt solid silver" |
| cellspacing="0" cellpadding="0" border="1"> |
| <thead> |
| <tr style="mso-yfti-irow: -1; mso-yfti-firstrow: yes"> |
| <td |
| style="BORDER-RIGHT: gray 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: gray 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #f3f3f3; PADDING-BOTTOM: 0cm; BORDER-LEFT: gray 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: gray 1pt solid" |
| valign="top" width="151"> |
| <p class="MsoNormalCxSpMiddle" style="TEXT-ALIGN: center; mso-yfti-cnfc: 1" align="center"> |
| <b style="mso-bidi-font-weight: normal"><i style="mso-bidi-font-style: normal"><span |
| style="COLOR: #005da0; mso-bidi-language: HE"><font size="3"><font |
| face="Times New Roman">Variables</font></font></span></i></b> |
| </p> |
| </td> |
| <td |
| style="BORDER-RIGHT: gray 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: gray 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #f3f3f3; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 344.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: gray 1pt solid; mso-border-left-alt: solid gray 1.0pt" |
| valign="top" width="460"> |
| <p class="MsoNormalCxSpMiddle" style="TEXT-ALIGN: center; mso-yfti-cnfc: 1" align="center"> |
| <b style="mso-bidi-font-weight: normal"><i style="mso-bidi-font-style: normal"><span |
| style="COLOR: #005da0; mso-bidi-language: HE"><font size="3"><font |
| face="Times New Roman">Evaluation</font></font></span></i></b> |
| </p> |
| </td> |
| </tr> |
| </thead> |
| <tbody> |
| <tr style="mso-yfti-irow: 0"> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: silver 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="151"> |
| <p class="MsoNormalCxSpMiddle"> |
| <font face="Times New Roman"><span |
| style="FONT-SIZE: 8pt; mso-bidi-font-size: 12.0pt">Adaptability</span></font> |
| </p> |
| </td> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 344.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid silver 1.0pt; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="460"> |
| <p class="MsoNormalCxSpMiddle"> |
| <span style="FONT-SIZE: 8pt; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt"><font |
| face="Times New Roman">Excellent, rule can change quickly and be deployed quickly too</font></span> |
| </p> |
| </td> |
| </tr> |
| <tr style="mso-yfti-irow: 1"> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: silver 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="151"> |
| <p class="MsoNormalCxSpMiddle"> |
| <font face="Times New Roman"><span |
| style="FONT-SIZE: 8pt; mso-bidi-font-size: 12.0pt">Transparency</span></font> |
| </p> |
| </td> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 344.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid silver 1.0pt; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="460"> |
| <p class="MsoNormalCxSpMiddle"> |
| <span style="FONT-SIZE: 8pt; mso-bidi-language: HE; mso-bidi-font-size: 12.0pt"><font |
| face="Times New Roman">Excellent: by adding meta data to implemented rule we can clearly link rule |
| to business strategies and policies</font></span> |
| </p> |
| </td> |
| </tr> |
| <tr style="mso-yfti-irow: 2"> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: silver 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="151"> |
| <p class="MsoNormalCxSpMiddle"> |
| <font face="Times New Roman"><span |
| style="FONT-SIZE: 8pt; mso-bidi-font-size: 12.0pt">Auditability</span></font> |
| </p> |
| </td> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 344.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid silver 1.0pt; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="460"> |
| <p class="MsoNormalCxSpMiddle"> |
| <span style="FONT-SIZE: 8pt; mso-bidi-language: HE; mso-bidi-font-size: 12.0pt"><font |
| face="Times New Roman">Excellent and most of the rule engine has log mechanism to trace what were |
| the rules executed on a given transaction.</font></span> |
| </p> |
| <p class="MsoNormalCxSpMiddle"> |
| <span style="FONT-SIZE: 8pt; mso-bidi-language: HE; mso-bidi-font-size: 12.0pt"><font |
| face="Times New Roman">Rule reports are important to the business as part of |
| documentation</font></span> |
| </p> |
| </td> |
| </tr> |
| <tr style="mso-yfti-irow: 3"> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: silver 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="151"> |
| <p class="MsoNormalCxSpMiddle"> |
| <span style="FONT-SIZE: 8pt; mso-bidi-font-size: 12.0pt"><font |
| face="Times New Roman">Reusability</font></span> |
| </p> |
| </td> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 344.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid silver 1.0pt; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="460"> |
| <p class="MsoNormalCxSpMiddle"> |
| <span style="FONT-SIZE: 8pt; mso-bidi-language: HE; mso-bidi-font-size: 12.0pt"><font |
| face="Times New Roman">Very good if the BRMS use rule repository and the rule analyst designed a |
| rule sharing approach</font></span> |
| </p> |
| </td> |
| </tr> |
| <tr style="mso-yfti-irow: 4; mso-yfti-lastrow: yes"> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: silver 1pt solid; WIDTH: 4cm; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="151"> |
| <p class="MsoNormalCxSpMiddle"> |
| <span style="FONT-SIZE: 8pt; mso-bidi-font-size: 12.0pt"><font |
| face="Times New Roman">Manageability</font></span> |
| </p> |
| </td> |
| <td |
| style="BORDER-RIGHT: silver 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ece9d8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #ece9d8; WIDTH: 344.65pt; PADDING-TOP: 0cm; BORDER-BOTTOM: silver 1pt solid; BACKGROUND-COLOR: transparent; mso-border-left-alt: solid silver 1.0pt; mso-border-top-alt: solid silver 1.0pt" |
| valign="top" width="460"> |
| <p class="MsoNormalCxSpMiddle"> |
| <font face="Times New Roman"><span |
| style="FONT-SIZE: 8pt; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt">Excellent as rules |
| are externalized and managed as a standalone artifact. Rule configuration management is complex, |
| and integrity between rule life cycle and rule set versioning is not a simple |
| practice.</span></font> |
| </p> |
| </td> |
| </tr> |
| </tbody> |
| </table> |
| </div><br class="MsoNormal" style="MARGIN: 3pt 0cm" /> |
| <br /> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| <a><font color="#0066B2"><em><font size="3">Rule in a graphical user interface</font></em></font></a> |
| </p> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| We will base the integration on the Model-View-Controller (MVC) design pattern. The presentation tier handles the |
| client interaction by abstracting the low-level protocol details into an event-based mechanism. The view's main |
| requirement is synchronization with the model so that data displayed to the user is up to date. The controller is |
| responsible to prepare the data and manage the view flow and content. Delegating the creation of content to a rule |
| engine is possible but need to be done synchronously. |
| </p><br class="MsoNormal" style="MARGIN: 3pt 0cm" /> |
| <br /> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| The business rule will be related to control the list of widget the GUI will present. A typical pattern is around |
| product catalog application or dynamic questionnaire. The rule pattern to control the content looks like: |
| </p> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm 3pt 36pt"> |
| <i style="mso-bidi-font-style: normal">If the selection on this page was &lt;&gt; then add this &lt;&gt; to the model |
| used in view &lt;&gt;</i> |
| </p> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| A rule to control the flow of page looks like |
| </p> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm 3pt 36pt"> |
| <i style="mso-bidi-font-style: normal">If the user visited page &lt;&gt; (and | or page &lt;&gt;) then next page is |
| &lt;&gt;</i> |
| </p><br class="MsoNormal" style="MARGIN: 3pt 0cm" /> |
| <br /> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| Both rules may be enriched with business type decision based on data of the model. |
| </p><br class="MsoNormal" style="MARGIN: 3pt 0cm" /> |
| <br /> |
| <p class="MsoNormal" style="MARGIN: 3pt 0cm"> |
| In these pattern it is clear we need to keep the previous context of decision, and events the user created.<span |
| style="mso-spacerun: yes">&nbsp;</span> So most of the current applications are putting the business rule in the |
| controller class or in the java script of the view, but it is possible to design the controller to use a rule engine, |
| as soon as the decision needs to change. This is particularly true for e-commerce web site, where marketing campaign |
| can quickly be put in place by proposing product or product feature more dynamically.<span |
| style="mso-spacerun: yes">&nbsp;</span> |
| </p><br /></mainDescription> |
| </org.eclipse.epf.uma:TaskDescription> |