[rules-users] Finding matching values in composite constraint

Jeremy Ary jeremy.ary at gmail.com
Sat Jan 5 14:29:00 EST 2013


If your matcher doesn't equate to a boolean value, I don't think that
condition will evaluate as you suspect it will. Functions in your
conditions isn't going to be as clean or easy as you suspect. Consider
inserting the user-supplied values into your session and matching with a
rule:

...
public class Transaction {

        private String field;

        // ... getter and setter for field, as well as all your other
methods in transaction, just showing this to say I'm assuming 'field' to be
of type String
}

...

public class Value {

private String value;

public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}
}

...

rule "find value substring match"
when
    Value ( $v : value )
    $t : Transaction( field.contains($v) )
then
    sendAlert("Transaction " + $t.getName() + "matches criteria: " + $v);
end

...

session.insert(transaction);
for (int i = 0; i < listOfUserValues.length; i++) {
     session.insert(listOfUserValues[i];
}


On Sat, Jan 5, 2013 at 12:29 PM, bdolbeare <bdolbeare at yahoo.com> wrote:

> Suppose we have a Transaction object with a String field.  Users want to
> create a rule through our application that says alert me whenever the value
> of that field contains a value in a list of values provided in the rule.
> It's easy enough to write this type of rule and send an alert; however, it
> would be helpful to include the value from the list that matched.
>
> The only way I can think to do this type of thing is to create a function
> somewhere that checks if the field contains any of the values in the user
> list and if so return that value.  Then call that function in the rule
> condition and bind the result.  Something like what follows:
>
>
> public class ExternalMatcher
> {
>   public static String contains(String field, String...list)
>   {
>   // return the first string that satisfies the contains logic or null if
> no
> strings succeed
>   }
> }
>
> rule "test"
> when
> Transaction( $matchedValue : ExternalMatcher.contains(field, "value1",
> "value2", "value3") != null)
> then
> sendAlert("I found a transaction that matched your criteria because field
> foo equals: " + $matchedValue);
> end
>
>
>
>
>
> --
> View this message in context:
> http://drools.46999.n3.nabble.com/Finding-matching-values-in-composite-constraint-tp4021343p4021346.html
> Sent from the Drools: User forum mailing list archive at Nabble.com.
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20130105/51d2b412/attachment.html 


More information about the rules-users mailing list