Adobe Flex 3 / C#.NET FluorineFX: Balkendiagramme, Tortendiagramme und Liniendiagramme

Aufgabenstellung

Auf der Basis einer Datenbank-Abfrage werden Balkendiagramme, Tortendiagramme und Liniendiagramme mit Flex 3 und der Middleware FluorineFX, die auf einem Microsoft IIS Server läuft, erstellt.

Ansatz

FluorineFX lässt sich über die Webseite http://www.fluorinefx.com/download.html herunterladen und installieren.
Es handelt sich hierbei lediglich um eine Web-Anwendung, die auf dem Microsoft IIS Server mit dem Enterprise Manager eingebunden werden muss.

Vorraussetzungen

  • Installation von FluorineFX auf dem Microsoft IIS Server
  • Installation von Adobe Flex
  • Installation einer .NET Umgebung
  • Konfiguration aller Komponenten

Lösung

Beispiel

Code in FluorineFX

Der folgende Code wird in Visual Studion (Express) als Projekttyp Klassenbibliothek (oder FluorineFX Service Projekt) mit der Sprache C# genutzt. Die C# Klassenbibliothek wird im kompilierten Zustand (dll-Datei) in den Order „bin“ im FluorineFX-Verzeichnis (welches als Website in IIS eingebunden wurde) kopiert.

Die SQL-Anweisung sollte aus Performance-Gründen möglichst stark aggregiert werden. Das Beispiel benutzt eine zweispaltige Struktur (ReportVO) und kann beliebig angepasst werden.

C# Code:

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Data.SqlClient;
using FluorineFx; // Wichtig! FluorineFx.dll Verweis einbinden

namespace ITReportingServices
{
    [RemotingService("ReportingService")]
    public class ReportingService
    {
        public ArrayList getReport()
        {
            ArrayList reports = new ArrayList();

            SqlConnection conn = 
            new SqlConnection(MyConfigurationManager.msSqlServerString);

            try
            {
                conn.Open();
                SqlCommand comm = new SqlCommand();
                comm.Connection = conn;
                comm.CommandText = "SELECT MONTH(buchdatum) As Monat, "+
               "sum(wert) AS Summe FROM costcenteraccounting "+
               "WHERE (YEAR(buchdatum)) = 2011 "+
               "AND costcenter='101008960' "+
               "GROUP BY (MONTH(buchdatum)), (YEAR(buchdatum))	";
                SqlDataReader reader = comm.ExecuteReader();
                while (reader.Read())
                {
                    ReportVO vo = new ReportVO();
                    vo.monat = reader.GetValue(0).ToString();
                    vo.summe = reader.GetValue(1).ToString().Replace(",",".");
                    reports.Add(vo);
                }
            }
            catch (Exception e)
            {
                reports = new ArrayList();
                ReportVO vo = new ReportVO();
                vo.monat = e.Message;
                vo.summe = e.Message;
                reports.Add(vo);
                return reports;
            }
            finally
            {
                conn.Close();
            }

            return reports;
        }
    }

    public class ReportVO
    {
        public string monat;
        public string summe;
    }
}

Code in Adobe Flex

Das Model wird auf den .NET-Namespace gemappt.

Model:

package models
{
   [RemoteClass(alias="ITReportingServices.ReportVO")]
   public class ReportVO
   {
       public var monat:String;
       public var summe:String;		
		
       public function ReportVO()
       {
       }
   }
}

Service in Flex-Code aufrufen:

<!-- unter den Script-Teil in MXML schreiben -->
<mx:RemoteObject id="reportingService" 
                             destination="GenericDestination"  
                             source="ITReportingServices.ReportingService" 
                             showBusyCursor="true" 
                             fault="faultHandler(event)" >
       <mx:method name="getReport" result="getReportHandler(event)"/>
</mx:RemoteObject>	
...

// Das hier in mx:Script Teil
[Bindable] public var reports:ArrayCollection=new ArrayCollection();

public function creationComplete():void
{
    reportingService.getReport();
}
			
public function getReportHandler(event:ResultEvent):void
{
     reports = event.result as ArrayCollection;
}
			
public function faultHandler(event:FaultEvent):void
{
   Alert.show(event.fault.toString());
}

Diagramme

Balkendiagramm:

<mx:ColumnChart dataProvider="{reports}" 
                     height="100%" width="100%" id="columnchart1">
    <mx:horizontalAxis>
      <mx:CategoryAxis id="ca" categoryField="monat" title="Market sizes" />
     </mx:horizontalAxis>
     <!-- horizontal axis renderer -->
     <mx:horizontalAxisRenderers>
    	<mx:AxisRenderer axis="{ca}" canDropLabels="false" />
      </mx:horizontalAxisRenderers>
      <mx:series>
            <mx:ColumnSeries displayName="Amount" 
        		xField="monat"
        		yField="summe"/>
       </mx:series>
</mx:ColumnChart>
<mx:Legend visible="false" dataProvider="{columnchart1}"/>		

Tortendiagramm:

<mx:Label text="Linke Seite" />
<mx:PieChart id="pie2" 
   width="100%" height="100%"
   dataaProvider="{reports}"  showDataTips="true">
      <mx:series> 
        <!--Apply the Array of radii to the PieSeries.-->
	<mx:PieSeries field="summe"
                	        nameField="monat"
                	       labelPosition="callout"/>
      </mx:series>
</mx:PieChart>
  <mx:Legend dataProvider="{pie2}"/>

Liniendiagramm:

<mx:LineChart width="100%" height="100%" 
	id="myChart" 
	dataProvider="{reports}" 
        	showDataTips="true">
   <mx:horizontalAxis>
     <mx:CategoryAxis dataProvider="{reports}" 
                	     categoryField="month"/>
    </mx:horizontalAxis>
    <mx:series>
       <mx:LineSeries yField="summe" 
                 	  displayName="Summe"/>       
    </mx:series>
</mx:LineChart>

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.