[rules-users] execute particular rules programmatically and dynamically

Benson Fung benson.redhat at gmail.com
Wed Apr 13 12:19:22 EDT 2011


Hi,

Here is the scenario :

If there are 2 edit boxes and 2 dropdown list at the frontend like.


dropdown(minIssrdAge1)   editbox(age1)
dropdown(minIssrdAge2)   editbox(age2)

everytime when I lost focus the editbox(age1 or age2),  the
editbox(age1 or age2) value will be validated against the following
rules.
i.e.  minIssrdAge1 and age1 will be validated together if lost focus
the editbox age1.
       minIssrdAge2 and age2 will be validated together if lost focus
the editbox age2

Rule1 is mandatory because both editbox are required field.
However, editbox(age1) is only valid within the 0 and 100.  and
editbox(age2) is only valid within 0 and 600.

In other words, editbox(age1) have to be validated against Rule1 +
Rule2.  However, editbox(age2) have to validated against Rule1 +
Rule3.

My question, how to design the rule attribute or at the java program
side so that different editbox can be validated against different
rule.

Please help.  I can't find any solution by now.

rule "Rule1"
	salience 1
	dialect "mvel"
	when
		ad : ApplicationData( age == "" || (  == null ))
	then
		ad.setReturnMsg( "\n age should not be null or empty" );
end


rule "Rule2"
	dialect "mvel"
	when
		ad : ApplicationData( $age : age != null , age != "" , minIssrdAge
== "Years" )
		eval(Integer.parseInt($age) < 0) or eval(Integer.parseInt($age) > 100)
	then
		ad.setReturnMsg( "\nage is out of the range(i.e.  < 0 and > 100)" );
end

rule "Rule3"
	dialect "mvel"
	when
		ad : ApplicationData( $age : age != null , age != "" , minIssrdAge
== "Years" )
		eval(Integer.parseInt($age) < 0) or eval(Integer.parseInt($age) > 600)
	then
		ad.setReturnMsg( "\nage is out of the range(i.e.  < 0 and > 600)" );
end



More information about the rules-users mailing list