What could be the reason for... On 14 April 2011 11:38, Robert Christenson <[email protected]> wrote:
> We've come across something similar in our project just recently as well. > > We have a requirement to have some rules activate based on a tab-off action > but also at a higher level (such as validating an entire event entry in the > GUI). I also need these rules to activate if initiated from an external > webservice (no GUI at all). > > What we've decided to utilize is a meta identifier in certain rules called > FieldsAffected which may contain a delimited list of field identifiers. > > An AgendaFilter implementation is created for GUI side requests and passed > to fireAllRules. The filter implementation compares any/all field > identifiers passed within the request and keeps only those activations which > contain the field identifier in it's metadata field. > ...not using a regular rule condition to ascertain this field match? -W > > Our RHS creates a validation msg which contains the field identifiers so > that the calling GUI can display the proper msgs to the field. > > This allows us to support multiple call scenarios without duplicating the > logic in multiple rules just based on context info. > > Hope this helps, > > Bob Christenson > > > > ------------------------------ > > > > Message: 2 > > Date: Thu, 14 Apr 2011 15:23:44 +0800 > > From: Benson Fung <[email protected]> > > Subject: Re: [rules-users] execute particular rules programmatically > > and dynamically > > To: Rules Users List <[email protected]> > > Message-ID: <[email protected]> > > Content-Type: text/plain; charset=ISO-8859-1 > > > > 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 <[email protected]>: > >> 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 <[email protected]> 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 <[email protected]>: > >>>> 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 <[email protected]> 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 <[email protected]>: > >>>>>> 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 <[email protected]> > 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 > >>>>>>> [email protected] > >>>>>>> https://lists.jboss.org/mailman/listinfo/rules-users > >>>>>> > >>>>>> > >>>>>> _______________________________________________ > >>>>>> rules-users mailing list > >>>>>> [email protected] > >>>>>> https://lists.jboss.org/mailman/listinfo/rules-users > >>>>>> > >>>>>> > >>>>> > >>>>> _______________________________________________ > >>>>> rules-users mailing list > >>>>> [email protected] > >>>>> https://lists.jboss.org/mailman/listinfo/rules-users > >>>> > >>>> > >>>> _______________________________________________ > >>>> rules-users mailing list > >>>> [email protected] > >>>> https://lists.jboss.org/mailman/listinfo/rules-users > >>>> > >>>> > >>> > >>> _______________________________________________ > >>> rules-users mailing list > >>> [email protected] > >>> https://lists.jboss.org/mailman/listinfo/rules-users > >> > >> > >> _______________________________________________ > >> rules-users mailing list > >> [email protected] > >> https://lists.jboss.org/mailman/listinfo/rules-users > >> > >> > > > > _______________________________________________ > rules-users mailing list > [email protected] > https://lists.jboss.org/mailman/listinfo/rules-users >
_______________________________________________ rules-users mailing list [email protected] https://lists.jboss.org/mailman/listinfo/rules-users
