+1 امتیاز
قبل در کامپیوتر و اینترنت توسط (5 امتیاز)
ویرایش شده قبل توسط

سلام

من در working memory تعدادی personEntity دارم و یک rule می خواهم که در صورتی که دو تا personEntity که status شان یکی است در working mem وجود داشته باشند خطا بدهد... rule که نوشتم به شکل زیر است اما مشکل اینه که دو بار خطا میدهد:

when 
    $person : PersonEntity(person.status == someStatus);
    $personList : ArrayList( size > 1 ) from collect( PersonEntity(id == $person.id, status == someStatus))    

then

     System.out.println("error occurred");

در حال حاضر وقتی در لیست دو شخص با status همسان داریم دو بار پیغام خطا داده می شود...

1 پاسخ

+1 امتیاز
قبل توسط (1.2هزار امتیاز)

میتوانید اول روی status گروه بندی کنید و تعدادشان را بشمارید. سپس ببنید آیا گروهی با تعداد بیش از 1 دارید و در آن صورت خطا بدهید. مثال زیر را ملاحظه کنید:

rule "insert PurchaseSum"
when
  Customer( $pd : purchaseDate, $cn : custNo )
  not( PurchaseSum( purchaseDate == $pd, custNo == $cn ) )
then
  insert( new PurchaseSum( $cn, $pd );
end

rule "accumulate amounts"
when
  $cu : Customer( $pd : purchaseDate, $cn : custNo, $am : amount )
  $ps : PurchaseSum( purchaseDate == $pd, custNo == $cn, customers not
contains $cu )
then
  modify( $ps ){
     setSum( $ps.getSum() + amount ),
     setCustomers( $ps.getCustomers().add( $cu )
  }
end

rule "show amounts > X"
    salience -100
when
    $ps : PurchaseSum( amount > X )
thne
    System.out.println( $ps... );
    retract( $ps );
end

rule "clean up"
    salience -101
when
    $ps : PurchaseSum()
thne
    retract( $ps );
end 

توضیحات مثال را اینجا می توانید ملاحظه کنید.

سوالات مشابه

+1 امتیاز
1 پاسخ 499 بازدید
0 امتیاز
0 پاسخ 275 بازدید
0 امتیاز
0 پاسخ 275 بازدید
0 امتیاز
0 پاسخ 830 بازدید
+1 امتیاز
1 پاسخ 339 بازدید
0 امتیاز
0 پاسخ 344 بازدید
+1 امتیاز
1 پاسخ 11.9هزار بازدید
...