Table of Contents

Report Document Type

Report Document Types stellen die Verbindung zwischen den Components und den Reports dar. Sie definieren, was für Daten in welchem Report ausgegeben werden. Ein Report Document Type enthält eine Angabe, welche Components ausgedruckt werden sollen und welche Reports dafür zur Verfügung stehen. Diese Report Document Types können später in Forms verwendet werden.

Report Document Types sind an dem rpt-icon– Icon zu erkennen.

Erstellen, bearbeiten und löschen von Report Document Types

Sie erstellen einen neuen Report Document Type, indem Sie in der Registerkarte Namespaces den Namespace auswählen, in welchem der Report Document Type abgelegt werden soll.

Mit dem Button new-button(New) und dem Eintrag ReportDocumentType aus dem Menü wird im markierten Namespace ein neuer Report Document Type angelegt. Dieser wird auch gleichzeitig geöffnet. Direkt nach dem Anlegen des Report Document Types steht der Cursor in dem sich öffnenden Designer auf dem Feld Name, wo Sie den Namen eingeben können.

Es wird empfohlen den Namen mit rpt zu beginnen.

Löschen können Sie einen Report Document Type mit dem Button delete-button (Delete). Sie müssen dazu den gewünschten Report Document Type im Namespace-Baum markiert haben. Es gibt auch im Kontext-Menü den Eintrag Delete. Der Löschvorgang wird erst im Repository wirksam, wenn Sie den Button saveall-button (Save All) drücken.

Registerkarte DataSource

Unter Datasource werden die Components angegeben, die in einem Report ausgegeben werden sollen. Es können mehrere Components (Collections) aus unterschiedlichen Namespaces eingebunden werden.

Jede Component wiederum kann für mehrere Reports als Datasource angegeben werden.

Report Document Type – Registerkarte DataSource

Mit dem Button Add wird ein neuer Eintrag in der Liste erstellt. In der Combobox Datatype können Sie angeben, welche Component / Collection verwendet werden soll. Im Feld Name können Sie dem Eintrag einen Namen geben. Dieser wird anhand des ausgewählten Datentyps mit einem Standardnamen vorbelegt.

Diese Einträge sind sozusagen die Properties des Reports. Diese Properties müssen später beim Druck mit Werten gefüllt werden.

Wenn Sie Components oder Collections eingebunden haben, können Sie diese aufklappen und die Properties der Component / Collection werden angeboten. Sind diese Properties ebenfalls Components, können diese erneut aufgeklappt werden, etc.

XSD-Datei

Warning

Dieses Kapitel ist nur für Crystal Reports relevant. DevExpress® XtraReports™ bindet direkt an die Objekte der Datenquelle, weshalb keine Umwege über die XSD gefahren werden.

Am nun aufgeklappten Baum kann angegeben werden, welche Properties und Komponenten in die XSD-Datei aufgenommen werden sollen. Dazu müssen Sie die Checkbox an dem entsprechenden Eintrag setzen.

Note

Ein DevExpress® Report hat immer Zugriff auf alle Komponenten am Report Document Type und dessen Properties, ob die Checkbox im Einzelfall aktiviert ist oder nicht. Hierzu wird in jede verwendete Component ein 'KomponentenName_Rptx'-Interface generiert.

Aus diesen Daten wird eine XSD-Datei (XML-Definition) erstellt. Diese XSD-Datei kann einem Crystal-Report zugewiesen werden. So versteht der Report die Daten, die ihm übergeben werden. Mit jedem Klick im Baum wird die XSD-Datei neu erzeugt. Sie wird im Report-Pfad der aktuellen Applikation abgelegt. Der Name setzt sich folgendermaßen zusammen: Namespaces.rptXXX.xsd.

Zum Einstellen des Pfades siehe Kapitel Code-Builder / Applications (Application).

Beim Druck werden die kompletten Components / Collections an den Report Document Type übergeben. Es werden aber nur die ausgewählten Daten in die XSD weitergegeben. Umso größer die Listen, desto wichtiger für die Performance ist es, dass nur die Daten übergeben werden, die wirklich benötigt werden.

Crystal Reports nutzt die übergebene XSD-Datei eigenständig, um den Report mit Daten zu füllen.

Registerkarte Report Files

Auf der Registerkarte Report Files können dem Report Document Type die eigentlichen Reports zugewiesen werden. Jeder Report kann entweder als CrystalReport, als DevExpress® oder auf beide Arten angelegt werden. Da also ein Parallelbetrieb von Crystal und DevExpress® Reports möglich ist, existieren zwei Sets von Buttons, um mit den Dateien umzugehen.

Report Document Type – Crystal Reports

Hinzufügen und Öffnen eines neuen Reports

Einen neuen Report fügen Sie beispielsweise über das Kontextmenü der Tabelle hinzu, in der die Reports angezeigt werden.

Overview

Um z.B. die DevExpress®-Version der Rechnung zu bearbeiten, markieren Sie den Eintrag ‚Invoice‘ und betätigen den Button Edit Report in der Kategorie DevExpress®.

Für weitere Erklärungen bezüglich der Bearbeitung von DevExpress® Reports siehe FS Report Designer

Include Base Reports

Mit der Checkbox Include Base Reports legen Sie fest, ob vererbte, nicht geänderte Basisreports später in der Applikation zur Auswahl stehen sollen. Sie hat Einfluss darauf, was die Methode ReportDocument.GetReportEnums() zurückgibt.

Allgemeine Einstellungen

Die folgenden Einstellungen beziehen sich auf den in der Tabelle ausgewählten Report:

Im Feld Name kann dem Report ein Name gegeben werden.

Warning

Dieser Name darf keine Leer- und Sonderzeichen enthalten, weil dieser später im Code zum Einsatz kommt.

Mit dem Button Edit Report wird der Report über ein externes Tool bearbeitet.

Warning

Zum Erstellen und Editieren von Crystal Reports benötigen Sie einen Crystal Reports Designer oder Visual Studio.

Der Button Choose File öffnet einen Dateiauswahl-Dialog, in dem Sie eine bestehende Report-Datei zuweisen können.

Mit dem Button New Report wird ein neuer, leerer Report erstellt und zugewiesen.

Mit dem Button Reset File wird eine einzelne Report-Datei aus einem Report gelöscht. Der Eintrag im Report Document Type und die etwaige andere Report-Datei im selben Eintrag bleiben hierbei unverändert bestehen.

Caption

Im Report Document Type können Sie für Crystal Reports lokalisierte Bezeichnungen (Captions) hinterlegen, also die Bezeichnung mehrsprachig pflegen. Diese Captions können zur Laufzeit ausgewertet werden, um z.B. im Druck-Dialog bei der Auswahl der unterschiedlichen Report-Varianten einen sprechenden Text auszugeben.

Report-Verzeichnis

Auf dem Dateisystem werden die Crystal Report-Dateien mit ihren .xsd-Dateien zusammen vom Compile-Verzeichnis ausgehend im Ordner /Report/ gespeichert. DevExpress® Reports erhalten einen weiteren Unterordner, nach dem übergeordneten Report Document Type benannt. Der Report CustomerList aus rptCustomerList wäre also unter /Report/NV.ERP.Base.Customer.rptCustomerList/CustomerList.repx zu finden. Da DevExpress® Reports keine .xsd-Dateien benötigen, befinden sich in den Unterordnern ausschließlich die .repx-Dateien.

Bei jedem Compile-Vorgang werden Crystal und DevExpress® Report-Dateien aus dem Repository in das Dateisystem herausgeschrieben, nach folgenden Regeln:

Crystal

Alle Crystal Reports aller Report Document Types werden in den /Report/-Ordner geschrieben, inklusive Basis-Reports.

DevExpress®

Alle DevExpress® Reports eines Report Document Types im aktuellen Package werden in den entsprechenden Unterordner unter /Report/ herausgeschrieben.

Basis-Reports werden nur aus der Basis gesucht und ins Verzeichnis geschrieben, solange am Report Document Type die Checkbox "Include Base Reports" gesetzt ist.

Crystal Report mit Visual Studio erstellen

Öffnen Sie Visual Studio.

Legen Sie jetzt ein neues Projekt an (Visual C# Project / leeres Projekt oder empty Project) oder öffnen Sie ein bereits vorhandenes Projekt.

Es empfiehlt sich, ein Projekt zur Erstellung und Pflege von Reports anzulegen und dieses immer wieder zu verwenden.

Menu Project / Add New Item

Crystal Report auswählen und Open drücken.

Es öffnet sich ein Wizard zum Erstellen eines Crystal Reports.

Crystal Report Gallery:

Crystal Report Gallery

Auf OK drücken.

Standard Report Expert Registerkarte Data:

Standard Report Expert Registerkarte Data

In diesem Fenster wählen Sie den Eintrag Database Files aus. Es öffnet sich ein Datei-Auswahl-Dialog. Hier wählen Sie die von Framework Studio generierte XSD-Datei aus. Diese Datei befindet sich in dem Report Directory, der in Applications angegeben wurde.

Unter Database Files wird die XSD-Datei und darunter die darin enthaltenen Tabellen angezeigt. Jede im Report Document Type eingebundene Component wird als eine Tabelle angeboten und bekommt den Namen, den Sie angegeben haben. Ist in einer Component eine andere Component enthalten und wurde diese ebenfalls ausgewählt, wird diese als eigenständige Tabelle angeboten.

Sie können nun die gewünschten Tabellen mit einem Doppelklick auswählen. Sie werden dann in die rechte Listbox eingetragen.

Mit Next öffnet sich die Registerkarte, in dem Sie die Felder auswählen können, die der Report anzeigen soll.

Standard Report Expert Registerkarte Fields

Wählen Sie die gewünschten Felder mit Doppelklick oder Add aus. Mit den Pfeilen über der Liste, mit den ausgewählten Feldern, können Sie noch die Reihenfolge der Felder ändern.

Mit Next öffnen sich weitere Fenster, in denen Sie Gruppierungen, Summen, Layouts und weitere Einstellungen vornehmen können.

Mit Finish wird der Report erzeugt.

Crystal Report mit Visual Studio aktualisieren

Wenn Sie in DataSource Components oder Properties hinzufügen oder entfernen, ändert sich die Schnittstelle zum Report und somit auch die XSD-Datei. Dann ist es notwendig, dass diese Änderung dem Report mitgeteilt wird.

Dazu öffnen Sie wieder Visual Studio, legen ein leeres Projekt an oder öffnen Ihr Crystal-Reports-Projekt. Am besten fügen Sie zum Projekt den Report aus dem Report-Verzeichnis von Framework Studio hinzu. (Menu Project / Add Existing Item)

Warning

Achtung: als Dateityp geben Sie Crystal Reports an.

Rufen Sie im Field-Explorer bei Database Fields Verify Database auf.

Project2 – Microsoft Visual C#.NET [design] – Customer1.rpt rpt-design

Wenn die XSD-Dateien nicht gefunden werden, fragt Visual Studio nach, wo diese zu finden sind.

Es werden jetzt die neuen Felder hinzugefügt und die entfernten Felder gelöscht. Das Löschen kann ggf. zu Fehlermeldungen führen.

Wenn Sie neue Components eingebunden haben, können diese mit dem Befehl Add/Remove Database manuell hinzugefügt werden.

Für den Druck relevante Klassen

Browserbasierter Report-Designer zur Laufzeit

Zur Laufzeit steht ein Report Designer dem Benutzer zur Verfügung. Dieser muss vorher in das System integriert und aufgerufen werden. Im folgenden Beispiel wird ein Report Designer geöffnet, auf eine Bestätigung des Benutzers gewartet und anschließend der geänderte Report ausgedruckt.

Warning

Diese Funktionalität steht noch nicht vollständig zur Verfügung.

// Eigenschaft, um sich die Design Session zu merken
private FrameworkSystems.FrameworkBase.Reporting.ReportDesignSession oDesignSession { get; set; }

// Einstiegspunkt; hier bspw. über einen Button Click
protected virtual void btnGrdReportDesigner_OnClick(FrameworkButtonClickEventArgs e)
{
    rptArticles report = new rptArticles(this.Global, rptArticles.Reports.XArticleReport, ExportFormat.PDF);
    this.oDesignSession = report.CreateDesigner();
    this.oDesignSession.ShowDesigner();  // Öffnet den Report Designer in einem Browser-Fenster
    
    MsgBox.Show(FSGeneral.ctMessagesFactory.GetText(this.Global, 10), "", MsgBoxButtons.OK, MsgBoxIcons.None, new MsgBoxEventHandler(OnMsgBoxReportDesignSessionClick));
}

// Ein Klick auf den MessageBox-Button signalisiert, dass die Bearbeitung abgeschlossen ist
protected virtual void OnMsgBoxReportDesignSessionClick(object sender, MsgBoxEventArgs e)
{
    byte[] reportDesign = null;
    if (this.oDesignSession != null && this.oDesignSession.IsModified())
    {
        // Veränderten Report aus der Session herunterladen
        reportDesign = this.oDesignSession.GetBytes();
    }
    this.oDesignSession.Dispose();  // Verwerfen der Design Session nicht vergessen
    this.oDesignSession = null;
    if (reportDesign == null)
    {
        throw new Exception("Kein neuer Report vorhanden."); 
    }

    // Drucken des geänderten Reports
    rptArticles report = new rptArticles(this.Global, rptArticles.Reports.XArticleReport, ExportFormat.PDF);
    report.SelectedReport.ReportBytes = reportDesign;
    report.oArticle = oArticleColl;  // Beim Drucken wird die Datenquelle benötigt
    report.Print();
}

Weitere Information zum Web-Designer finden Sie unter ReportDesignSession.