2009-04-29 5 views
0

У меня есть правило LHS, как этотDrools собирать проблему картины

when 
    $location : Location() 
    $cabinets : ArrayList() from collect (Cabinet() from $location.elements()) 
then 

в когда я печатаю содержание @cabinets в RHS я вижу, что она содержит все элементы (также те, которые не являются класса кабинета).

Я хочу собирать шкафы с элементами $ location> elements().

Что я сделал не так?

ответ

-1

Я думаю, что вы могли бы сказать что-то вдоль линий

Cabinet(class == Cabinet.class) 

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

+0

после выполнения, что я получаю Невозможно создать значение поля типа «ValueType =„Object“» и значение «Cabinet.class»: [Имя правила = Urządzenia bez szafy, scheduleGroup = MAIN, salience = 0, no-loop = false] java.lang.NoSuchFieldException: classUnable для создания ограничения '[QualifiedIndentifierRestr: == Cabinet.class]' для поля 'class' в правиле ' Urządzenia bez szafy ': [Название правила = Urządzenia bez szafy, AgendaGroup = MAIN, salience = 0, no-loop = false] так что это возможно не так –

-1

Ваш вопрос касается шаблона 'from', а не 'collect'.

После правило должно помочь испытанию:

when 
    $location : Location() 
    $cabinet : Cabinet() from $location.elements() 
then 

Это правило должно срабатывала для каждого кабинета в месте.

Вы можете попробовать разместить свой вопрос на rule-users user list

+0

Yse, но что, если мне нужно опустить количество собранных шкафов? –

+0

вот так $ шкафы: ArrayList (размер == 3) from collect (Cabinet() from $ location.elements()) –

+0

Конечно, вам нужно будет использовать коллекцию, но проблема у вас в том, что «от» возвращается элементы из другого типа, кроме кабинета. Поэтому, если вы можете иметь «от», чтобы возвращать только шкафы, вы можете использовать сбор, чтобы построить ArrayList, содержащий только шкафы ... – pgras