Or what about having a rule that creates the substring? Class SupplierCode { private String code; private SupplierView parent; public SubString(SupplierView parent, String code) { this.code = code; this.parent = parent; } public String getCode() { return this.code; } public SupplierView getParent() { return this.parent; } } rule "suppliercode" when $sv : SupplierView( $sc : suppCode ) then insert(new SupplierCode($sv, $sc.substring(4, 6))); end rule "main" when $sv : SupplierView(corporate == true) $sc : SupplierCode( code in ('25, '30'), parent == $cs ) then ValidationErrorFacade.getInstance().registerError($cs, new ValidationError("Headquarter Supplier Code should end on 25 or 30.")); end
This way you are also making the business rule as to what supplier codes to accept a Drools rule (and no use of eval!) (Sorry, a boring day at work and I felt an urge to contribute!) Mike ________________________________ From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Manukyan, Sergey Sent: 12 July 2007 21:40 To: Rules Users List Subject: RE: [rules-users] how to create local variable Thank you Edson, I liked the solution with matches, it is much cleaner.... -Sergey ________________________________ From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Edson Tirelli Sent: Thursday, July 12, 2007 4:19 PM To: Rules Users List Subject: Re: [rules-users] how to create local variable It is not possible to assign the result of an arbitrary method call to a variable right now. So, your best option is probably to do (please note the use of inline-eval): rule "SupplierView: Headquarter Supplier Code should end on 25 or 30." when $cs : SupplierView(corporate == true, eval( suppCode.substring(4, 6).equals( "25" ) || suppCode.substring(4, 6).equals( "30" ) ) ) then ValidationErrorFacade.getInstance().registerError($cs, new ValidationError("Headquarter Supplier Code should end on 25 or 30.")); end A more clean solution is to use "matches" operator. If your rule states that Supplier Code must END with 25 or 30, you can do: rule "SupplierView: Headquarter Supplier Code should end on 25 or 30." when $cs : SupplierView(corporate == true, suppCode matches ".*25" || matches ".*30" ) then ValidationErrorFacade.getInstance().registerError($cs, new ValidationError("Headquarter Supplier Code should end on 25 or 30.")); end Hope it helps. []s Edson 2007/7/12, Manukyan, Sergey < [EMAIL PROTECTED]>: Folks, I have a rule where I am repeating part of it twice : ($cs.getSuppCode().substring(4, 6)), and I would like to replace it with variable... how can I do that? The solution with "in" doesn't worl because it is a java code needed to perform calculations for variable..... Please see the rule below: rule "SupplierView: Headquarter Supplier Code should end on 25 or 30." when $cs : SupplierView(corporate == true) eval($cs.getSuppCode().substring(4, 6) == "25" || $cs.getSuppCode().substring(4, 6) == "30") then ValidationErrorFacade.getInstance().registerError($cs, new ValidationError("Headquarter Supplier Code should end on 25 or 30.")); end Thanks, -Sergey ********************** ** LEGAL DISCLAIMER ** ********************** This E-mail message and any attachments may contain legally privileged, confidential or proprietary information. If you are not the intended recipient(s), or the employee or agent responsible for delivery of this message to the intended recipient(s), you are hereby notified that any dissemination, distribution or copying of this E-mail message is strictly prohibited. If you have received this message in error, please immediately notify the sender and delete this E-mail message from your computer. _______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users -- Edson Tirelli Software Engineer - JBoss Rules Core Developer Office: +55 11 3529-6000 Mobile: +55 11 9287-5646 JBoss, a division of Red Hat @ www.jboss.com
_______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users