Я очень стараюсь реализовать расширение для создания диаграмм в разрабатываемом мной приложении: поэтому моя проблема в том, что я написал некоторый код (основной) для этого в BIRT.
В некоторыхпоместив в код, я должен связать набор данных с серией и связать серию с объектом определения серии, который в конечном итоге будет присоединен к диаграммам seriesDefinitions, например:
RadarSeries radarSeries = RadarSeriesImpl.create();
radarSeries.setDataSet(numberDataValues);
radarSeries.setSeriesIdentifier("Number data values");
radarSeries.getLabel().setVisible(true);
, где numberDataValues - это массив значений типа double.Затем я создаю свою сериюDefinition:
SeriesDefinition seriesDefinition = SeriesDefinitionImpl.create();
seriesDefinition.getSeriesPalette().shift(0);
Но затем наступает момент, когда мне нужно связать мой радар с сериейDefinition следующим образом:
seriesDefinition.getSeriesDefinitions().add(radarSeries);
ПРОБЛЕМА : у меня нет метода getSeriesDefinitions () при попытке вызвать его из кода (выполнение Ctrl + пробел в Eclipse).
Излишне говорить, что я не могувызовите метод getSeriesDefinitions () для объекта myChart:
myChart.getSeriesDefinitions().add(seriesDefinition);
ДЛЯ ВАШЕЙ ИНФОРМАЦИИ : я включил банки с пивом в свой локальный репозиторий maven и деталииз этих зависимостей:
<dependency>
<groupId>org.eclipse.birt</groupId>
<artifactId>engineapi</artifactId>
<version>${birtVersion}</version>
</dependency>
<dependency>
<groupId>org.eclipse.birt</groupId>
<artifactId>coreapi</artifactId>
<version>${birtVersion}</version>
</dependency>
<dependency>
<groupId>org.eclipse.birt</groupId>
<artifactId>scriptapi</artifactId>
<version>${birtVersion}</version>
</dependency>
<dependency>
<groupId>org.eclipse.birt</groupId>
<artifactId>chartengineapi</artifactId>
<version>${birtVersion}</version>
</dependency>
, где $ {birtVersion} = 2.6.2
, вот ссылка на официальный пример выпуска birt 2.6.2 о RadarChart: Пример официального выпуска радиолокационной карты
Кто-нибудь может мне помочь?Я действительно не могу поверить, что я не узнал, как это сделать в поисковой сессии Google в 3 дня: это несерьезно!... учитывая его популярность и мощь, я думаю, им следовало бы приложить больше усилий к документации ...
@ Birt guyz (если есть)> извините, что я такой драматичный, но я действительно думаю,сторона документа действительно отстой ... Я надеюсь, что смогу помочь вам в этом (действительно, я делаю)
Вот код:
public String drawChart() {
// Birt Vars
IDeviceRenderer iDeviceRenderer = null;
IDisplayServer iDisplayServer = null;
RunTimeContext context;
Chart chart = null;
// Birt Platform configuration
PlatformConfig platformConfig = new PlatformConfig();
platformConfig.setProperty("STANDALONE", true);
// Creating Chart Engine
ChartEngine chartEngine = ChartEngine.instance(platformConfig);
IGenerator iGenerator = chartEngine.getGenerator();
if(iGenerator == null)
System.out.println("IGenerator NULL");
else
System.out.println("IGenerator NOT NULL");
try {
// iDeviceRenderer = chartEngine.getRenderer("dv.PNG");
iDeviceRenderer = chartEngine.getRenderer("dv.GIF");
iDisplayServer = iDeviceRenderer.getDisplayServer();
} catch (Exception e) {
e.printStackTrace();
}
// Creating Chart
ChartWithoutAxes radarChart = ChartWithoutAxesImpl.create( );
radarChart.setDimension( ChartDimension.TWO_DIMENSIONAL_LITERAL );
radarChart.setType(Radar.TYPE_LITERAL); //$NON-NLS-1$
radarChart.setSubType( "Standard Radar Chart" ); //$NON-NLS-1$
// Plot
radarChart.setSeriesThickness( 10 );
// Legend
Legend lg = radarChart.getLegend( );
lg.getOutline( ).setVisible( true );
// Title
radarChart.getTitle( )
.getLabel( )
.getCaption( )
.setValue( "Radar Chart" );//$NON-NLS-1$
try {
if(radarChart != null)
System.out.println("RADAR CHART NOT NULL");
else
System.out.println("RADAR CHART NULL!!!");
// PREPARE PHASE
context = Generator.instance().prepare(radarChart, null, null, ULocale.getDefault());
if(context == null)
System.out.println("CONTEXT NULL ");
else
System.out.println("CONTEXT NOT NULL");
//BIND PHASE : fetch data from DB
NumberDataSet numberDataValues = NumberDataSetImpl.create( new double[]{
54, 21, 75, 91, 37
} );
// Radar series
RadarSeries radarSeries = RadarSeriesImpl.create();
radarSeries.setDataSet(numberDataValues);
radarSeries.setSeriesIdentifier("Number data values");
radarSeries.getLabel().setVisible(true);
SeriesDefinitionImpl seriesDefinition = (SeriesDefinitionImpl) SeriesDefinitionImpl.create();
seriesDefinition.getSeriesPalette().shift(0);
// ERROR HERE : can't call the method
seriesDefinition.getSeriesDefinitions()
// RENDERING PHASE
if(iDisplayServer == null)
System.out.println("DISPLAY SERVER NULL");
else
System.out.println("DISPLAY SERVER NOT NULL");
GeneratedChartState generatedChartState = iGenerator.build(iDisplayServer, radarChart, null, null, context);
iGenerator.render(iDeviceRenderer, generatedChartState);
} catch (Exception e) {
e.printStackTrace();
}
}
РЕДАКТИРОВАТЬ + РЕШЕНИЕ
Извините за задержку: я должен был опубликовать этот ответ ранее, чтобы пометить этот вопрос как решенный.Просто используйте конструктор отчетов RCP, чтобы создать документ отчета.Скопируйте ReportEngine / lib / * jars в ваш / WEB-INF / lib;также создайте платформу / каталог под WEB-INF / и скопируйте конфигурацию BIRT ReportEngine / и плагины / каталоги во вновь созданную папку WEB-INF / platform /.Теперь с файлом * .rptdesign, который вы создали в инструменте конструктора BIRT RCP, вам придется использовать API BIRT, который позволит вам взаимодействовать с вашим отчетом ...