Здесь есть два вопроса. Первый относительно простой, второй - сложный.
1. Почему моя кросс-таблица обрезается в Excel?
2. Как динамически настроить ширину эталонной страницы в зависимости от количества столбцов в отчете во время выполнения?
A1: Перекрестная вкладка обрезается, потому что ширина столбцов была установлена вручную, при этом количество столбцов будет увеличиваться за пределы установленной ширины эталонной страницы. Каждый раз, когда вы берете элемент дизайна отчета и настраиваете его, BIRT предполагает, что вы знаете, что делаете, и не отменяет ваши настройки.
Решение состоит в том, чтобы воссоздать элемент отчета (таблица или кросс-таблица) и не изменять вручную какие-либо размеры. При запуске в HTML или Excel все столбцы будут автоматически настроены для отображения с доступной шириной главной страницы.
Снимок экрана BIRT 4.2 Cross Tab, Report Item с шириной мастер-страницы 2 дюйма и 30 столбцами
A2: Это непросто, и сейчас я не буду давать ответ. Я укажу на решение и обозначу пару препятствий. Правильное решение этого вопроса должно включать работающее решение с использованием образца базы данных.
(начиная с BIRT 4.2.1)
Challenge1 - ширина главной страницы устанавливается BIRT Report Scripting в событиях, предшествующих чтобы сообщить о завершении элемента таблицы или кросс-таблицы. Вы не можете просто подсчитать, сколько столбцов в отчете;
Если хотите посчитать, столбцы -
Дизайн отчета инициализировать
columnCount = 0;
Кросс-таблица, onCreate
columnCount ++;
В моем исследовании было предложено два пути для подсчета столбцов до создания элемента кросс-таблицы. Или
Запустите набор данных в beforeFactory (это означает два запроса к базе данных, один для подсчета и один для отчета), затем получите счет и используйте его.
Вычислите значение в исходном запросе и соберите его в наборе данных onFetch.
Я использовал параметр набора данных onFetch, используя вычисляемый столбец, но не смог заставить его работать.
Challenge2 - свойство Width главной страницы должно быть установлено в дизайне отчета или до него, до Render. Наиболее часто рекомендуется использовать beforeFactory. Кроме того, свойство «Ширина» главной страницы доступно только в том случае, если для «Типа» главной страницы установлено значение «Пользовательский», в своих попытках я устанавливал это вручную в редакторе свойств Общие.
Передача значений из onFetch в beforeFactory должна выполняться с помощью PersistentGlobalVariable, которая может передавать только строки, а не целые числа. Я нашел множество способов, чтобы это не сработало. Даже передача «12 дюймов» в PersistentGlobalVariable не позволяет настроить ширину эталонной страницы.
Любой из этих кодов в 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"));
В конце концов, мне не удалось найти или создать функциональный отчет, который регулирует ширину главной страницы, передаваемую по числовым столбцам, созданным во время выполнения отчета. Я думаю, что это возможно, но это выходит за рамки моих нынешних навыков.
person
James Jenkins
schedule
19.04.2013