我正在尝试与JESS接触,其中我要编写如下规则。
当订单金额大于1000且首选客户并且客户名称与订单名称匹配时,请执行操作。
我的Order.java具有以下属性 整数金额,客户托管
Customer.java是具有以下属性的普通bean类。 字符串名称,字符串地址
我无法找到一种方法来获取Order.cust.name的值并与JESS中的Customer.name进行比较。
有人可以在这里帮助我吗?
我尝试使用关注者,但没有为我解决。
(defrule HelloCustomer "When customer is preferred and amount is greater than 1001"
?person1 <- (Customer)
?cust <- (Customer {isPreferred == true})
?o <- (Order{amount > (+ 1000 1)})
?person2 <- (Order(customerA))
?person2Name <- (Customer{name == (Order{customerA.name})})
=>
(modify ?o (totalAmount 1000))
(printout t "Found two different " (call ?person2.customerA getName) crlf))
(printout t "Found two different*** " ?person1.name crlf))
答案 0 :(得分:0)
您拥有许多正确的细节,但基本面都是错误的。首先,请注意,每个“客户”和“订单”模式都匹配一个新对象;最多可以匹配五个对象。其次,您需要将变量绑定到广告位值,以便可以在其他广告位中对其进行测试。最后,您需要利用“ OBJECT”插槽来检索由每种模式表示的Java对象。大概,我想你想要类似的东西
(defrule HelloCustomer
(Customer {isPreferred == true} (name ?name) (OBJECT ?customer))
(Order {amount > 1001} (name ?name) (OBJECT ?order)) ;; Repeating variable binds these together
=>
;; do something with ?customer and ?order
Jess手册涵盖了所有这些内容,但是您必须阅读整个内容。毕竟,您正在学习一种全新的编程语言。