Я нашел подход, который работал, похожий на одну из моих идей выше. Прежде всего, я НЕ смог получить подотчет, чтобы возвратить значение в отчет о вызовах, а затем извлечь это значение, используя getVariableValue из скриптлета. Я пытался вечно, и я просто не мог заставить это работать.
Вместо этого я применил один и тот же скриптлет как к основному, так и к подчиненным отчетам. В скриптлете есть переменная class , в которой я могу вести подсчет всех номеров продуктов, с которыми я сталкиваюсь в деталях, и этот код входит в метод afterDetailEval () скриплета. Обратите внимание, что я хочу, чтобы этот код выполнялся только для подотчета, поэтому я проверяю, присутствует ли конкретное поле сведений, которое никогда не будет нулевым. Если это не так, я не запускаю код. Поэтому, когда это событие вызывается из основного отчета, код не запускается.
Теперь о той части, которую я выучил на примере. Примечательным побочным эффектом программирования в этом примере является то, что в свойстве «Print When Expression» есть строка измерений 1x1, которая содержит вызов пользовательского метода скриптлета. Это блестящая идея! Таким образом, этот пользовательский метод возвращает false, несмотря ни на что, и строка никогда не печатается. Я сделал то же самое в бэнде Page Footer, и этот метод собирает значения из переменной класса, определяет страницу и сохраняет результаты в хэше. Затем он сбрасывает переменную класса.
В группе «Сводка отчета» у меня есть другая строка, которая никогда не будет печататься, которая вызывает другой пользовательский метод. Все, что я делаю здесь, это перебираю карту номеров продуктов и показываю все страницы, на которых каждая из них появляется. Готово!