Сравните значение вложенного Java-бина - PullRequest
0 голосов
/ 03 июня 2019

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

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

My Order.java имеет следующие свойства сумма, клиентская сумма

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

1 Ответ

0 голосов
/ 03 июня 2019

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

...