Не удается связать серию с диаграммой SeriesDefinitions в BIRT - PullRequest
0 голосов
/ 07 сентября 2011

Я очень стараюсь реализовать расширение для создания диаграмм в разрабатываемом мной приложении: поэтому моя проблема в том, что я написал некоторый код (основной) для этого в 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, который позволит вам взаимодействовать с вашим отчетом ...

1 Ответ

0 голосов
/ 20 марта 2013

Извините за задержку: я должен был опубликовать этот ответ раньше, чтобы пометить этот вопрос как решенный.

Просто используйте дизайнер отчетов RCP, чтобы создать документ отчета. Затем скопируйте ReportEngine / lib / * jars в ваш / WEB-INF / lib; также создайте платформу / каталог под WEB-INF / и скопируйте конфигурацию BIRT ReportEngine / и плагины / каталоги во вновь созданную папку WEB-INF / platform /.

Теперь с файлом * .rptdesign, который вы создали в инструменте конструктора BIRT RCP, вам придется использовать API BIRT, который позволит вам взаимодействовать с вашим отчетом ...

...