Логика c в ваших выражениях неверна. У вас есть это
$F{field1} != $P{CheckDinamico1}
|| $F{field1} != $P{CheckDinamico2}
|| ...
Допустим, CheckDinamico1 равен 5, а CheckDinamico2 равен 7. Итак, ваши выражения - field1! = 5 ИЛИ field1! = 7 ИЛИ
Это выражение истинно независимо от значение поля1. Если field1 равно 3, оно будет отличаться от 5 и 7, поэтому выражение истинно. Если fiedl1 равен 5, он будет отличаться от 7, и из-за ИЛИ выражение также будет истинным. И если field1 равно 7, оно будет отличаться от 5, поэтому снова выражение будет истинным.
Может быть, вы хотели И вместо ИЛИ в выражении? Кроме того, как заметил Alex K , !=
может не всегда работать, поэтому безопаснее использовать equals
, и вы можете использовать примитивные логические выражения, вам не нужно Boolean
. Поэтому попробуйте что-то вроде этого:
(!"N".equals($P{Chk_Amministratori})
|| (!$F{field1}.equals($P{CheckDinamico1})
&& !$F{field1}.equals($P{CheckDinamico2})
&& !$F{field1}.equals($P{CheckDinamico3})
&& !$F{field1}.equals($P{CheckDinamico4})
&& !$F{field1}.equals($P{CheckDinamico5})
&& !$F{field1}.equals($P{CheckDinamico6})
&& !$F{field1}.equals($P{CheckDinamico7})
&& !$F{field1}.equals($P{CheckDinamico8})
&& !$F{field1}.equals($P{CheckDinamico10}))