+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 پاسخ 490 بازدید
0 امتیاز
0 پاسخ 268 بازدید
0 امتیاز
0 پاسخ 269 بازدید
0 امتیاز
0 پاسخ 825 بازدید
+1 امتیاز
1 پاسخ 331 بازدید
0 امتیاز
0 پاسخ 336 بازدید
+1 امتیاز
1 پاسخ 11.9هزار بازدید
...