比较嵌套Java bean的值

时间:2019-06-03 09:50:52

标签: jess

我正在尝试与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))

1 个答案:

答案 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手册涵盖了所有这些内容,但是您必须阅读整个内容。毕竟,您正在学习一种全新的编程语言。