Сравните значение вложенного Java-бина

Я пробую свои силы с JESS, в котором я хочу написать следующее правило.

Когда сумма заказа превышает 1000, и клиент является предпочтительным, а имя клиента совпадает с именем заказа, сделайте что-нибудь.

My Order.java имеет следующие свойства int amount, Customer cust

А Customer.java — это простой класс компонента, содержащий следующие свойства. имя строки, адрес строки

Я не могу найти способ получить значение Order.cust.name и сравнить его с Customer.name в JESS.

Может ли кто-нибудь помочь мне здесь, пожалуйста?

Я пытался использовать следующее, но не работал для меня.

(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))

person Ramesh C    schedule 03.06.2019    source источник


Ответы (1)


У вас есть много деталей, но основы в основном неверны. Во-первых, обратите внимание, что каждому шаблону «Клиент» и «Заказ» соответствует новый объект; это может соответствовать пяти различным объектам. Во-вторых, вам нужно будет привязать переменные к значениям слотов, чтобы вы могли протестировать их в других слотах. Наконец, вам нужно будет использовать слот «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 охватывает все это, но вы должны прочитать его целиком. В конце концов, вы изучаете совершенно новый язык программирования.

person Ernest Friedman-Hill    schedule 03.06.2019
comment
Спасибо за ответ Эмест Фридман-Хилл. Однако мой вопрос: как мы можем получить доступ к order.Customer.Name. По сути, клиент является членом экземпляра Order, и я хочу получить доступ к имени клиента из него в части условия. Я смог получить к нему доступ в части действия => например, используя (вызов ?person2.customerA getName), но не в части условия. Не могли бы вы помочь, как мы можем это сделать? - person Ramesh C; 04.06.2019