Release Notes 6.2.5 (Aug-2013)

OpenRules® Release 6.2.5 advances OpenRules BDMS with additional features initiated by the real-world use of previous releases. New features include:

OpenRules Evaluation Without Software Installation

OpenRules® is more and more being used by business analysts who create their decision models frequently without any help from IT. So, we need to simplify the evaluation process as well. It means that even an installation of basic Java may become an issue for our potential customers. So, now they can evaluate OpenRules® software without necessity to install any new software on their machines. We now provide 3 evaluation options described here.  

Business Rules Defined on Collections of Objects

Previously, when OpenRules® users needed to run decisions against collections (arrays) of business objects, they needed to use Java loops. This release adds an ability to execute one decision against a collection of objects and to calculate values defined on the entire collection within single decision run.

Let's consider an example "DecisionManyCustomers" added to the standard OpenRules® installation. There is a standard Java bean Customer with different customer attributes such as name, age, gender, salary, etc. There is also a Java class "CollectionOfCustomers":

public class CollectionOfCustomers {

Customer[] customers;

int minSalary;

int maxSalary;

int numberOfRichCustomers;

int totalSalary;



We want to pass this collection to a decision that will process all customers from this collection in one run and will calculate such attributes as "minSalary", "totalSalary", "numberOfRichCustomers", and similar attributes, which are specified for the entire collection. Each customer within this collection can be processed by the following rules:

Pay attention that we use here a multi-hit table (DecsionTable1), so both rules will be executed. The first one unconditionally calculate the total. max, and min salaries. The second rule defines a number of "rich" customers inside the collection. To accumulate the proper values, we use the existing operator "+=" and newly introduced operators "Min" and "Max".

To execute the above decision table for all customers, we will utilize a new action "ActionRulesOnArray" within the following decision table:

Here the first 3 actions (conclusions) simply define initial values of collection attributes. The last action has 3 sub-columns:

- The name of the array of objects as it is defined in the glossary ("Customers")

- The type of those objects ("Customer")

- The name of the decision table ("EvaluateOneCustomer") that will be used to processes each objects form this collection.

Thus, a combination of the two decisions tables (similar to the above ones) provides business users with a quite intuitive way to apply rules over collections of business objects without necessity to deal with programming constructions.

Decision Tables for Comparing Ranking Lists

In many real-world situations decisions are made based on comparison of attributes that belong to different predefined lists of values while the values inside these lists are ordered (ranked). For example, a business rule may sound as follows:

"If Diagnostic Need is Stronger Than Sensitivity Level

 Then Document Access should be Allowed"

Here the Diagnostic Need could belong to the ranking list:

- Immediately Life-Threatening

- Life-Threatening

- Acute

- Chronic.

Similarly the Sensitivity Level could belong to this ranking list:

- High

- Mid

- Low.

Newly defined custom templates allow us to present the relations between these two ranking lists in the following decision table of the new type "DecisionTableCompareRanks":


Then the above rule may be expressed using the following decision table of the new type "DecisionTableRanking":

To define "Stronger/Weaker" relations between these ranks, this decision table will automatically invoke the decision table with the dynamically defined name "Compare<rank1>With<rank2>" (after removing all spaces).

The benefits of these new types of decision tables become clear when you think about supporting hundreds of similar ranking lists.  These tables may cover complex relationships between multiple ranking lists and at the same time they remain easy to understand and to be maintained by business users.

The complete working example "DecisionRankingLists" with the proper custom templates (see file "RankTemplates.xls") is included into the standard OpenRules® installation.

New Keywords for Decision Tables

Our customers started to use more and more customer decision tables that start with the keyword "DecisionTable", e.g. DecisionTableRanking above. To make the standard keywords more explicit than simple "DT" and "DT1", we've have added two more synonyms:  

"DecisionTableSingleHit" is the same as "DecisionTable" (or "DT" or "RuleFamily")

"DecisionTableMultiHit" is the same as "DecisionTable1" (or "DT1").


New Features in OpenRules®-based Web Applications

We made several changes in OpenRules® components that support rules-based web application development. Previously our customers frequently had problems with defining a correct relative path to the main xls-file in their "index.jsp" file. Based on the way you start you Tomcat, you needed to use one or two dots in the URL for your main Excel file as "file:../webapps/..." or "file:./webapps/...".  Now a customer should not worry about this issue as we automatically define the correct path. All "index.jsp" files has been corrected in the standard workspaces "openrules.dialog" and "openrules.web". 

Several improvements were made in the OpenRules® Dialog:

- You may specify the numbers of rows and columns in of the text areas. For instance, to define a text area with 10 rows and 20 columns put 10-20 in the column "Size" that describes your question of the type "TextArea"

- You also may associate a custom size with a question of the type "Password". The standard templates in the project "openrules.forms.lib" has been updated to use these features.

- The standard Dialog's method  load(filename) now returns the latest modification date of the loaded file.

Advanced Logging API

We extended the Decision logging API with several more useful methods:

- To log (print) any text string you may write decision.log(text);

- To memorize the execution log you may write

Then all log-statements produced during this decision run will be saved internally.

- You may get this saved log as follows:
        Vector<String> log = decision.getRunLog();

- You may print the saved log by the method decision.printSavedRunLog() or you may save it into a file by  the method decision.printSavedRunLog(filename).

This feature is very useful when your application wants to show the good results of the decision execution but also need to show the errors in the user-defined decision model - see, for example, how it is done in the latest remote evaluation version.

Improvements in OpenRules Libraries

We have added a few useful methods to the standard package "". The static methods sort(List<String> list) and sortIgnoreCase(List<String> list) of the class Method can be called directly from Excel snippets to sort lists of Strings.

We switched to the latest stable release 3.9 of Apache POI by replacing "poi-3.6-20091214.jar" to "poi-3.9-20121203.jar" in the "openrules.config/lib".

Fixed Errors

We fixed an error related to to the use of business objects passes to different decision instances created using the same instance of the OpenRulesEngine - the standard file DecisionTempaltes.xls now contains a new method "setDecisionVar" and it should be updated.

Fixed a very old error that did not show the last error statement in case of a Runtime Exception. 

The product documentation has been properly updated. As always, the new release remains backward compatible. After downloading the latest complete OpenRules® release 6.2.5 from here, you need to update your "openrules.config" project.

Please post your comments and suggestions to the Google Discussion Group or send them to