Еще одна вещь, которая не была упомянута: поскольку самотипы не являются частью иерархии требуемого класса, их можно исключить из сопоставления с образцом, особенно если вы исчерпывающе сопоставляете запечатанную иерархию. Это удобно, когда вы хотите смоделировать ортогональное поведение, например:
sealed trait Person
trait Student extends Person
trait Teacher extends Person
trait Adult { this : Person => } // orthogonal to its condition
val p : Person = new Student {}
p match {
case s : Student => println("a student")
case t : Teacher => println("a teacher")
} // that's it we're exhaustive
Я никогда не использовал функцию «печатать при изменении группы», но, попробовав ее сейчас в новом отчете, я понимаю, что вы имеете в виду - она печатает для каждой подробной записи, даже если группа не меняется.
Вместо использования флага «печатать при изменении группы» снимите флажок «печатать повторяющиеся значения», это, вероятно, даст вам то, что вы хотите.
У меня возникла проблема с той же проблемой. Вот работа, которую я придумал:
JasperReports имеет несколько автоматически сгенерированных переменных, которые могут помочь вам достичь желаемого. Для каждой группы, которую вы создаете, есть счетчик, который отслеживает количество элементов в вашей текущей группе:
yourGroupName_COUNT
В вашем printWhenExpression просто добавьте выражение вроде следующего, чтобы печатать текстовое поле только при разрыве вашей группы:
$V{yourGroupName_COUNT}==1
-Benjamin
Я не думаю, что этот атрибут делает то, что вы думаете. Он должен использоваться вместе с isPrintRepeatedValues = "false" и работает следующим образом:
"если повторяющееся значение, которое вы подавили, охватывает несколько групп, вы можете заставить его снова появляться в начале определенной группы отчетов, если вы укажете имя этой конкретной группы в атрибуте printWhenGroupChanges. " Окончательное руководство стр. 116