Используя Eclipse BIRT для создания отчетов, особенно элемента отчета элемента диаграммы, вы можете столкнуться с ситуацией, когда цвета диаграммы должны быть изменены в зависимости от набора данных (datarow) или параметра отчета. Есть два основных решения, чтобы закончить эту задачу. Один из способов установить цвета — использовать скрипт [ref] с JavaScript (Rhino [ref] ) в конструкторе отчетов. Другое решение — использовать BIRT DEAPI [ref] и добавить скрипт через Java. В этой статье я хочу описать подход с использованием сценариев в файле дизайна отчета / библиотеки / шаблона.
Идея этого решения может быть найдена на форуме разработчиков BIRT [ref] [ref] . Это был мой вопрос, на который ответил один из членов модераторской команды форума, которые также работают в качестве поддержки BIRT.
Перед описанием решения, некоторые термины, используемые в BIRT затмения должны быть представлены.
Параметры отчета
Одним из вариантов передачи данных в отчет является использование параметра отчета. Параметр отчета может иметь простую структуру, такую как числа, строки или более сложную структуру, как любой вид Java-объектов. Их можно использовать где угодно, в любом тексте, например, в элементе отчета или скрипте, в отчете для манипулирования поведением или макет отчета зависит от них. В этом примере я попытаюсь показать, как информация о цвете передается в качестве параметров отчета, которые позже используются в качестве цветов гистограммы. Синтаксис использования элемента отчета в файле rptdesign, rptlibrary или rpttemplate может выглядеть следующим образом:
params["someparameter"].value
Источник данных / Набор данных
Основное содержание отчета доставляется через наборы данных, которые связаны с источниками данных. Они могут иметь любую природу, такую как операторы выбора SQL для таблиц базы данных или XPath к какому-либо месту назначения во входящем XML-файле, Web-сервисах, CSV-файле или Java-объектах. В этом примере я буду использовать набор данных, который содержит информацию о цвете как целочисленные значения. Синтаксис использования элемента отчета в файле rptdesign, rptlibrary или rpttemplate может выглядеть следующим образом:
row["somecolumn"]
Постоянная глобальная переменная
Постоянные глобальные переменные, такие как в названии, — это переменные, которые сохраняются глобально и могут использоваться в любом месте отчета. Для этой задачи цвета сохраняются в постоянной глобальной переменной в виде целочисленных значений красного, зеленого и синего цветов (0-255). Синтаксис для переменной может выглядеть так:
//write reportContex.setPersistentGlobalVariable("globalParameterId", "content"); //read reportContex.getPersistentGlobalVariable("red");
Описание решения
Данные из набора данных / datarow или параметра отчета должны быть скопированы в объекты глобального параметра отчета, а затем их можно использовать в одном из методов диаграммы, где для содержимого заданы свойства цвета диаграммы. Решение этой задачи можно разбить на несколько задач:
- Установка данных цвета в постоянную глобальную переменную.
- Установка данных из постоянной глобальной переменной на график.
Установка цветовых данных в постоянную глобальную переменную
Подсказка : следующий код должен быть размещен в методе «onCreate» родительского элемента диаграммы, такого как элемент отчета таблицы, когда информация находится в наборе данных и развернута в элементе элементов таблицы или списка. Если цвета передаются через параметры отчета, тогда скрипт может быть размещен глобально в элементе отчета.
//examples for incomming parameters reportContex.setPersistentGlobalVariable("red", params["red"].value); reportContex.setPersistentGlobalVariable("blue", params["blue"].value); reportContex.setPersistentGlobalVariable("green", params["green"]value); //examples for datarow from dataset reportContex.setPersistentGlobalVariable("red", row["Red"]); reportContex.setPersistentGlobalVariable("blue", row["Blue"); reportContex.setPersistentGlobalVariable("green", row["Green"));
Из приведенного выше кода вы можете видеть, как информация о цвете передается глобальным переменным. Следующим шагом является установка цветов на гистограмме. Для этого нам нужно знать, какой у нас график (здесь гистограмма) и сколько рядов используется для этого графика, поскольку нам нужно также добавить цвета в ряд.
Установка данных из постоянной глобальной переменной на график
Последний шаг задачи — поместить данные из глобальной переменной persistnent в свойство цвета гистограммы. Это делается в методе «onRender» элемента отчета диаграммы и имеет структуру, как в следующем примере:
importPackage(Package.org.eclipse.birt.chart.model.impl); importPackage(Package.org.eclipse.birt.chart.model.type.impl); importPackage(Package.org.eclipse.birt.chart.model.attribute); importPackage(Package.org.eclipse.birt.chart.model.attribute.impl); function beforeGeneration( chart, icsc ) { //one series sd = chart.getAxes().get(0).getAssociatedAxes().get(0).getSeriesDefinitions().get(0); sd.getSeriesPalette().getEntries().clear(); var red = parseInt(icsc.getExternalContex().getScriptable().getPersistentGlobalVariable("red")); var blue = parseInt(icsc.getExternalContex().getScriptable().getPersistentGlobalVariable("blue")); var green = parseInt(icsc.getExternalContex().getScriptable().getPersistentGlobalVariable("green")); sd.getSeriesPalette().getEntries().add(GradientImpl.create(ColorDefinitionImpl.create(red, blue, green), ColorDefinitionImpl.create(red, blue, green), -35, false)); //two series - adding one color more sd = chart.getAxes().get(0).getAssociatedAxes().get(1).getSeriesDefinitions().get(0); sd.getSeriesPalette().getEntries().clear(); var red = parseInt(icsc.getExternalContex().getScriptable().getPersistentGlobalVariable("red")); var blue = parseInt(icsc.getExternalContex().getScriptable().getPersistentGlobalVariable("blue")); var green = parseInt(icsc.getExternalContex().getScriptable().getPersistentGlobalVariable("green")); sd.getSeriesPalette().getEntries().add(GradientImpl.create(ColorDefinitionImpl.create(red, blue, green), ColorDefinitionImpl.create(red, blue, green), -35, false)); // if you need one color without gradient sd.getSeriesPalette().getEntries().add(ColorDefinitionImpl.GREEN()); }
Вы также можете выполнять итерации по серии с помощью итератора, который здесь не показан.
Резюме
Эта статья была посвящена настройке цветов диаграммы с помощью скриптов в BIRT Eclipse. Кроме того, здесь упоминались некоторые основные термины, такие как параметры отчета, набор данных / источники данных и постоянные глобальные переменные. На самом деле подход к этому прост, если вы знаете правильный синтаксис. Это было основной мотивацией для написания этой статьи.