<div dir="ltr">Reading it back over, I can simplify this a bit if we&#39;re solely dealing with strings...<div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">
...</div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">public class Transaction {</div><div style="font-family:arial,sans-serif;font-size:13px">
<br></div><div style="font-family:arial,sans-serif;font-size:13px">        private String field;</div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">
        // ... getter and setter for field, as well as all your other methods in transaction, just showing this to say I&#39;m assuming &#39;field&#39; to be of type String</div><div style="font-family:arial,sans-serif;font-size:13px">
}</div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">rule &quot;find value substring match&quot;</div><div style="font-family:arial,sans-serif;font-size:13px">
when</div><div style="font-family:arial,sans-serif;font-size:13px">    $s : String ( )<br>    $t : Transaction( field.contains($s) )<br>then<br>    sendAlert(&quot;Transaction &quot; + $t.getName() + &quot;matches criteria: &quot; + $s);<br>
end<br></div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">...</div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">
session.insert(transaction);</div><div style="font-family:arial,sans-serif;font-size:13px"><font face="arial, sans-serif">for (int i = 0; i &lt; listOfUserValueStrings.length; i++) {</font></div><div style="font-family:arial,sans-serif;font-size:13px">
<font face="arial, sans-serif">     session.insert(listOfUserValueStrings[i];</font></div><div style="font-family:arial,sans-serif;font-size:13px"><font face="arial, sans-serif">}</font></div></div><div><br></div></div><div class="gmail_extra">
<br><br><div class="gmail_quote">On Sat, Jan 5, 2013 at 1:29 PM, Jeremy Ary <span dir="ltr">&lt;<a href="mailto:jeremy.ary@gmail.com" target="_blank">jeremy.ary@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">If your matcher doesn&#39;t equate to a boolean value, I don&#39;t think that condition will evaluate as you suspect it will. Functions in your conditions isn&#39;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:<div>

<br></div><div>...</div><div>public class Transaction {</div><div><br></div><div>        private String field;</div><div><br></div><div>        // ... getter and setter for field, as well as all your other methods in transaction, just showing this to say I&#39;m assuming &#39;field&#39; to be of type String</div>

<div>}</div><div><br></div><div>...</div><div><br></div><div><div><font face="arial, sans-serif">public class Value {</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">        </span>private String value;</font></div>

<div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">        </span>public String getValue() {</font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                </span>return value;</font></div>

<div><font face="arial, sans-serif"><span style="white-space:pre-wrap">        </span>}</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">        </span>public void setValue(String value) {</font></div>

<div><font face="arial, sans-serif"><span style="white-space:pre-wrap">                </span>this.value = value;</font></div><div><font face="arial, sans-serif"><span style="white-space:pre-wrap">        </span>}</font></div><div><font face="arial, sans-serif">}</font></div>

</div><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">...</span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br>

</span></div><div><span style="font-family:arial,sans-serif;font-size:13px">rule &quot;find value substring match&quot;</span></div><div><span style="font-family:arial,sans-serif;font-size:13px">when</span></div><div>
    Value ( $v : value )<br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">    $t : Transaction( field.contains($v) </span><span style="font-family:arial,sans-serif;font-size:13px">)</span><br style="font-family:arial,sans-serif;font-size:13px">

<span style="font-family:arial,sans-serif;font-size:13px">then</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">    sendAlert(&quot;Transaction &quot; + $t.getName() + &quot;matches criteria</span><span style="font-family:arial,sans-serif;font-size:13px">: &quot; + $v);</span><br style="font-family:arial,sans-serif;font-size:13px">

<span style="font-family:arial,sans-serif;font-size:13px">end</span><br></div><div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">...</span></div>

<div><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13px">session.insert(transaction);</span></div><div><font face="arial, sans-serif">for (int i = 0; i &lt; listOfUserValues.length; i++) {</font></div>

<div><font face="arial, sans-serif">     session.insert(listOfUserValues[i];</font></div><div><font face="arial, sans-serif">}</font></div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><br><div class="gmail_quote">
On Sat, Jan 5, 2013 at 12:29 PM, bdolbeare <span dir="ltr">&lt;<a href="mailto:bdolbeare@yahoo.com" target="_blank">bdolbeare@yahoo.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Suppose we have a Transaction object with a String field.  Users want to<br>
create a rule through our application that says alert me whenever the value<br>
of that field contains a value in a list of values provided in the rule.<br>
It&#39;s easy enough to write this type of rule and send an alert; however, it<br>
would be helpful to include the value from the list that matched.<br>
<br>
The only way I can think to do this type of thing is to create a function<br>
somewhere that checks if the field contains any of the values in the user<br>
list and if so return that value.  Then call that function in the rule<br>
condition and bind the result.  Something like what follows:<br>
<br>
<br>
public class ExternalMatcher<br>
{<br>
  public static String contains(String field, String...list)<br>
  {<br>
  // return the first string that satisfies the contains logic or null if no<br>
strings succeed<br>
  }<br>
}<br>
<br>
rule &quot;test&quot;<br>
when<br>
Transaction( $matchedValue : ExternalMatcher.contains(field, &quot;value1&quot;,<br>
&quot;value2&quot;, &quot;value3&quot;) != null)<br>
then<br>
sendAlert(&quot;I found a transaction that matched your criteria because field<br>
foo equals: &quot; + $matchedValue);<br>
end<br>
<br>
<br>
<br>
<br>
<br>
--<br>
View this message in context: <a href="http://drools.46999.n3.nabble.com/Finding-matching-values-in-composite-constraint-tp4021343p4021346.html" target="_blank">http://drools.46999.n3.nabble.com/Finding-matching-values-in-composite-constraint-tp4021343p4021346.html</a><br>


<div><div>Sent from the Drools: User forum mailing list archive at Nabble.com.<br>
_______________________________________________<br>
rules-users mailing list<br>
<a href="mailto:rules-users@lists.jboss.org" target="_blank">rules-users@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>