Ответ 1
Здесь есть два вопроса. Первый из них относительно прост, второй комплекс.
1. Почему моя кросс-вкладка отключена в Excel?
2. Как мне динамически регулировать ширину главной страницы в зависимости от количества столбцов в отчете во время выполнения?
A1: вкладка "Крест" отключается, потому что ширины столбцов были установлены вручную, где количество столбцов будет расширяться за пределы установленной ширины главной страницы. Каждый раз, когда вы захватываете элемент дизайна отчета и настраиваете его, BIRT предполагает, что вы знаете, что делаете, и не переопределяете настройки.
Решение состоит в том, чтобы воссоздать элемент отчета (Таблица или Перекрестная вкладка), а не вручную изменять размеры. При запуске в HTML или Excel все столбцы будут автоматически установлены для отображения в доступной ширине главной страницы.
Снимок экрана BIRT 4.2 Cross Tab, Report Item с шириной главной страницы 2 дюйма и 30 столбцами
A2: Это непросто, и я не буду давать ответ в это время. Я укажу на решение и определю пару дорожных блоков. Правильное решение этого вопроса должно включать в себя функциональное решение с использованием базы данных Sample.
(с BIRT 4.2.1)
Вызов1 - Ширина главной страницы устанавливается BIRT Report Scripting в событиях до завершения отчета. Вы не можете просто подсчитать количество столбцов в отчете;
Если вы хотите подсчитать, столбцы -
Дизайн отчетов intialize
columnCount = 0;
Перекрестная вкладка, onCreate
columnCount ++;
В моем исследовании предлагается два пути для подсчета столбцов перед созданием элемента "Перекрестная вкладка". Либо
-
Запустите набор данных в файле beforeFactory (это означает два запроса к базе данных, один для подсчета и один для отчета), затем получите счетчик и используйте его.
-
Рассчитайте значение в своем внутреннем запросе и заготовьте его в наборе данных onFetch.
Я следовал за параметром Data Set, onFetch, используя вычисляемый столбец, но не работал.
Вызов2 - свойство ширины главной страницы должно быть установлено до или перед дизайном отчета доRender. Наиболее часто рекомендуется использовать beforeFactory. Кроме того, свойство Ширина главной страницы доступно только в том случае, если для главной страницы "Тип" установлено значение "Пользовательский", в моих попытках я устанавливаю это вручную в редакторе свойств Общие.
Передача значений из onFetch в beforeFactory должна выполняться с использованием PersistentGlobalVariable, которая может передавать только строки, а не целые числа. Я нашел все возможное, чтобы это не работало. Даже прохождение "12in" в PersistentGlobalVariable не удалось настроить главную страницу Width
Любой из этих кодов в beforeFactory будет регулировать ширину главной страницы (когда Type = Custom)
Передайте значение
reportContext.getReportRunnable().designHandle.getDesignHandle().findMasterPage("Simple MasterPage").setProperty("width","12in");
Вычислить значение и передать его
increaseWidth = 20;
reportContext.getReportRunnable().designHandle.getDesignHandle().findMasterPage( "Simple MasterPage").setProperty("width",((2+increaseWidth)+"in"));
В конце концов, мне не удалось найти или создать функциональный отчет, который настраивает Ширину главной страницы, переданную на числовые столбцы, сгенерированные во время выполнения отчета. Я думаю, что это возможно, но это выходит за рамки моих текущих навыков.