2011-09-07 74 views
0

我在努力實現一個圖表擴展到我正在開發的應用程序:所以我的問題是我寫了一些代碼(鍋爐板之一)爲了做到這一點在BIRT。無法將系列鏈接到圖表系列定義在BIRT

在代碼中的某些地方,我必須將數據集鏈接到一個系列和系列鏈接到其最終將被連接到圖表seriesDefinitions這樣

RadarSeries radarSeries = RadarSeriesImpl.create(); 
    radarSeries.setDataSet(numberDataValues); 
    radarSeries.setSeriesIdentifier("Number data values"); 
    radarSeries.getLabel().setVisible(true); 

一個seriesdefinition對象,其中numberDataValues是雙打陣列。然後,我創建我的seriesDefinition:

SeriesDefinition seriesDefinition = SeriesDefinitionImpl.create(); 
    seriesDefinition.getSeriesPalette().shift(0); 

不過,這裏來的時候我不得不將我的radarSeries到seriesDefinition這樣的時候:

seriesDefinition.getSeriesDefinitions().add(radarSeries); 

的問題:我沒有在嘗試從代碼調用代碼時(在Eclipse中執行Ctrl + Space)時,方法爲getSeriesDefinitions()

不用說,我不能調用getSeriesDefinitions()方法myChart對象:

myChart.getSeriesDefinitions().add(seriesDefinition); 

爲了您的信息:我已經手動包括我的BIRT罐子在我的本地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

這裏是關於RadarChart的birt 2.6.2發佈官方示例的鏈接:Radar chart official release example

有人能幫助我嗎?我真的不敢相信我沒有發現如何在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/* jar複製到您的/ WEB-INF/lib;還要在WEB-INF /下創建一個平臺/目錄,並在新創建的WEB-INF/platform /文件夾下複製BIRT ReportEngine配置/和插件/目錄。現在,使用您在BIRT RCP設計工具中創建的* .rptdesign文件,您將不得不使用BIRT API,它將允許您與報告進行交互...

+0

根據示例您指的是,你的代碼缺少一些部分。你能否將問題轉化爲[SSCCE](http://sscce.org)? – Wivani

+0

我給出了整個代碼... – kaffein

+0

當您將鼠標懸停在seriesDefinition(或SeriesDefinition)上時,它顯示的是什麼類? – Wivani

回答

0

對不起,我應該有發佈這個答案提前解決這個問題。

只需使用RCP報告設計器來創建報告文檔。 然後將ReportEngine/lib/* jar複製到您的/ WEB-INF/lib;還要在WEB-INF /下創建一個平臺/目錄,並在新創建的WEB-INF/platform /文件夾下複製BIRT ReportEngine配置/和插件/目錄。

現在與您已在BIRT RCP Designer工具創建的* .rptdesign文件,你將不得不使用BIRT API,這將讓你與你的報告互動......

相關問題