Implementing this would require a detailed parsing of function bodies and more,<br>to get the runtime object into the scope of the static methods compiled from<br>DRL functions.<br><br>As it is, a minor improvement is possible with:<br>
<br>import org.drools.spi.KnowledgeHelper;<br><br>function void ins( KnowledgeHelper kh, Object... obj ){<br> kh.insert( obj );<br>}<br><br>//...<br>then<br> ins( drools, new Fact( ... ) );<br>end<br><br><br><div class="gmail_quote">
2010/10/13 Swindells, Thomas <span dir="ltr"><<a href="mailto:TSwindells@nds.com">TSwindells@nds.com</a>></span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div link="blue" vlink="purple" lang="EN-GB">
<div>
<p class="MsoNormal">I’ve just been writing what should be a really simple function in my DRL.</p>
<p class="MsoNormal">What I wanted to do is to take an object in, construct another object from it and then insert both into working memory.</p>
<p class="MsoNormal">Eg.</p>
<p class="MsoNormal" style=""><b><span style="font-size: 10pt; font-family: "Courier New"; color: rgb(150, 0, 0);">function</span></b><span style="font-size: 10pt; font-family: "Courier New"; color: black;">
</span><b><span style="font-size: 10pt; font-family: "Courier New"; color: rgb(150, 0, 0);">void</span></b><span style="font-size: 10pt; font-family: "Courier New"; color: black;"> insertBoth(Object1 object1) {</span><span style="font-size: 10pt; font-family: "Courier New";"></span></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;"> insert(new Object2(object1));</span></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;"> insert(object 1);</span></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">}</span></p>
<p class="MsoNormal"><span style="font-size: 10pt; color: black;"> </span></p>
<p class="MsoNormal"><span style="font-size: 10pt; color: black;">Rule XYZ</span></p>
<p class="MsoNormal"><span style="font-size: 10pt; color: black;">When</span></p>
<p class="MsoNormal"><span style="font-size: 10pt; color: black;">Then</span></p>
<p class="MsoNormal"><span style="font-size: 10pt; color: black;"> insertBoth(new Object1());</span></p>
<p class="MsoNormal"><span style="font-size: 10pt; color: black;">End</span></p>
<p class="MsoNormal"><span style="font-size: 10pt; color: black;"> </span></p>
<p class="MsoNormal"><span style="font-size: 10pt; color: black;"> </span></p>
<p class="MsoNormal"><span style="font-size: 10pt; color: black;">This didn’t work as expected however as it couldn’t find the method insert.</span></p>
<p class="MsoNormal"><span style="font-size: 10pt; color: black;">I then thought, ah maybe I need to use the kcontext global to access them</span></p>
<p class="MsoNormal"><span style="font-size: 10pt; color: black;"> </span></p>
<p class="MsoNormal" style=""><b><span style="font-size: 10pt; font-family: "Courier New"; color: rgb(150, 0, 0);">function</span></b><span style="font-size: 10pt; font-family: "Courier New"; color: black;">
</span><b><span style="font-size: 10pt; font-family: "Courier New"; color: rgb(150, 0, 0);">void</span></b><span style="font-size: 10pt; font-family: "Courier New"; color: black;"> insertBoth(Object1 object1) {</span><span style="font-size: 10pt; font-family: "Courier New";"></span></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;"> kcontext.insert(new Object2(object1));</span></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;"> kcontext.insert(object 1);</span></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">}</span></p>
<p class="MsoNormal"><span style="font-size: 10pt; color: black;"> </span></p>
<p class="MsoNormal"><span style="font-size: 10pt; color: black;">Rule XYZ</span></p>
<p class="MsoNormal"><span style="font-size: 10pt; color: black;">When</span></p>
<p class="MsoNormal"><span style="font-size: 10pt; color: black;">Then</span></p>
<p class="MsoNormal"><span style="font-size: 10pt; color: black;"> insertBoth(new Object1());</span></p>
<p class="MsoNormal"><span style="font-size: 10pt; color: black;">End</span></p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">This doesn’t work either so what I’ve had to do is:</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal" style=""><b><span style="font-size: 10pt; font-family: "Courier New"; color: rgb(150, 0, 0);">function</span></b><span style="font-size: 10pt; font-family: "Courier New"; color: black;">
</span><b><span style="font-size: 10pt; font-family: "Courier New"; color: rgb(150, 0, 0);">void</span></b><span style="font-size: 10pt; font-family: "Courier New"; color: black;"> insertBoth(KnowledgeContext kcontext, Object1 object1) {</span><span style="font-size: 10pt; font-family: "Courier New";"></span></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;"> kcontext.getKnowledgeRuntime().insert(new Object2(object1));</span></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;"> kcontext.getKnowledgeRuntime().insert(object 1);</span></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: "Courier New"; color: black;">}</span></p>
<p class="MsoNormal"><span style="font-size: 10pt; color: black;"> </span></p>
<p class="MsoNormal"><span style="font-size: 10pt; color: black;">Rule XYZ</span></p>
<p class="MsoNormal"><span style="font-size: 10pt; color: black;">When</span></p>
<p class="MsoNormal"><span style="font-size: 10pt; color: black;">Then</span></p>
<p class="MsoNormal"><span style="font-size: 10pt; color: black;"> insertBoth(kcontext, new Object1());</span></p>
<p class="MsoNormal"><span style="font-size: 10pt; color: black;">End</span></p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">This is suddenly a lot more complicated than it needs to be. Why can’t functions have the same access to the standard operations (insert, update, retract etc) and globals as rule actions currently do?</p>
<p class="MsoNormal">Should I raise an issue for this or am I missing something?</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">Thomas</p>
</div>
<br>
<hr>
<font size="1" color="Gray" face="Arial"><br>
**************************************************************************************<br>
This message is confidential and intended only for the addressee. If you have received this message in error, please immediately notify the <a href="mailto:postmaster@nds.com" target="_blank">postmaster@nds.com</a> and delete it from your system as well as any copies. The content of e-mails as well as traffic data
may be monitored by NDS for employment and security purposes. To protect the environment please do not print this e-mail unless necessary.<br>
<br>
NDS Limited. Registered Office: One London Road, Staines, Middlesex, TW18 4EX, United Kingdom. A company registered in England and Wales. Registered no. 3080780. VAT no. GB 603 8808 40-00<br>
**************************************************************************************<br>
</font>
</div>
<br>_______________________________________________<br>
rules-users mailing list<br>
<a href="mailto:rules-users@lists.jboss.org">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>
<br></blockquote></div><br>