Thanks Michael, let me think about your solution seriously afterwards. Actually, I am using GWT. I would like to say that sometimes customer's requirement is picky and unexpectable. They really want to have close coupling between UI and Rules. haha..... :) Do you think it is helpless as a consultant??? :~(
If anyone has another idea of this scenario, you are welcome to post your idea out there. Thank you very much 2011/4/14 Michael Anstis <michael.ans...@gmail.com>: > In my example Rule 1 was shared between "screen1.panel1.editbox1" and > "screen1.panel1.editbox2":- > > rule "Rule1" > salience 1 > dialect "mvel" > when > ApplicationContext( context in ("screen1.panel1.editbox1", > "screen1.panel1.editbox2") ) > ad : ApplicationData( age == "" || ( == null )) > then > ad.setReturnMsg( "\n age should not be null or empty" ); > end > > This is an approach and may not be the best available; I was trying to > demonstrate how your problem can be solved without having to worry about > explicitly executing individual rules.For example, depending on what UI > technology you are using (Swing, JSF) you could subclass the UI components > and use these as facts - but such close coupling between UI and Rules may be > undesirable. > > With kind regards, > > Mike > > On 14 April 2011 03:52, Benson Fung <benson.red...@gmail.com> wrote: >> >> Good, Michael. >> >> 'context' is used to distinguish which part of the UI which will be >> validated, right? The customer will ask if they have 10000 rules in >> the rulebase. And some of them are redundant, so they want to make >> some of the rules share with several part of UI, e.g. editbox 6, >> editbox 7 and editbox 8 these 3 boxes' value range is within 0 and >> 600. Therefore, Rule3 can be shared for these 3 editbox validation, >> right? However, for the context variable approach, it seems Rule3 >> cannot be shared for another editbox with same value range validation. >> So these could be a key for the BRMS/Drools. >> >> >> Benson >> >> 2011/4/14 Michael Anstis <michael.ans...@gmail.com>: >> > Sure, whenever you copy values from your UI to your model for validation >> > you >> > also enter a fact representing the "context" of the values. >> > >> > Using your example you have two edit boxes on one screen and your rule >> > simply checks for the value of a single edit box; in this case the >> > context >> > differentiates the two. >> > >> > Walking your example: >> > >> > (1) When editbox 1 looses focus you copy the value from the dropdown and >> > edit box 1 into your model, plus you enter a "context" fact stating that >> > these values relate to that part of the UI (say >> > "screen1.panel1.editbox1"). >> > You then insert these facts into WM and call fireAllRules. The rules >> > check >> > the "context" and only execute if the values are for the (rule) >> > applicable >> > context. (2) Editbox 2 works in a similar way, but has a different >> > context >> > ((say "screen1.panel1.editbox2"). >> > >> > Have a look at Plugtree - I believe they're quite well customed to >> > writing >> > UIs backed with rules; salaboy or esteban (or IRC #drools) might be able >> > to >> > offer more practical advice. >> > >> > With kind regards, >> > >> > Mike >> > >> > >> > >> > On 13 April 2011 17:48, Benson Fung <benson.red...@gmail.com> wrote: >> >> >> >> Hi Michael, >> >> >> >> Can you elaborate more for the uses of the ApplicationContext? I >> >> can't follow its uses. >> >> >> >> >> >> Thanks >> >> Benson >> >> >> >> 2011/4/14 Michael Anstis <michael.ans...@gmail.com>: >> >> > Here's a quick (and probably sub-optimal way) ;) >> >> > >> >> > When you copy values from the UI to Facts for validation you also >> >> > include >> >> > the context of the validation. >> >> > >> >> > I've also removed the inline evals you were using. >> >> > >> >> > rule "Rule1" >> >> > salience 1 >> >> > dialect "mvel" >> >> > when >> >> > ApplicationContext( context == "*" ) >> >> > ad : ApplicationData( age == "" || ( == null )) >> >> > then >> >> > ad.setReturnMsg( "\n age should not be null or empty" ); >> >> > end >> >> > >> >> > rule "Rule2" >> >> > dialect "mvel" >> >> > when >> >> > ApplicationContext( context == "screen1.panel1.ed" ) >> >> > ad : ApplicationData( $age : age != null , age != "" , age < 0 >> >> > || >> >> > > >> >> > 100, minIssrdAge == "Years" ) >> >> > 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 != "" , age <0 >> >> > || >> >> > > >> >> > 600, minIssrdAge == "Years" ) >> >> > then >> >> > ad.setReturnMsg( "\nage is out of the range(i.e. < 0 and > >> >> > 600)" >> >> > ); >> >> > end >> >> > >> >> > On 13 April 2011 17:19, Benson Fung <benson.red...@gmail.com> wrote: >> >> >> >> >> >> 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 >> >> >> _______________________________________________ >> >> >> rules-users mailing list >> >> >> rules-users@lists.jboss.org >> >> >> https://lists.jboss.org/mailman/listinfo/rules-users >> >> > >> >> > >> >> > _______________________________________________ >> >> > rules-users mailing list >> >> > rules-users@lists.jboss.org >> >> > https://lists.jboss.org/mailman/listinfo/rules-users >> >> > >> >> > >> >> >> >> _______________________________________________ >> >> rules-users mailing list >> >> rules-users@lists.jboss.org >> >> https://lists.jboss.org/mailman/listinfo/rules-users >> > >> > >> > _______________________________________________ >> > rules-users mailing list >> > rules-users@lists.jboss.org >> > https://lists.jboss.org/mailman/listinfo/rules-users >> > >> > >> >> _______________________________________________ >> rules-users mailing list >> rules-users@lists.jboss.org >> https://lists.jboss.org/mailman/listinfo/rules-users > > > _______________________________________________ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users > > _______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users