combit List & Label 27 - .NET Hilfe
Vererbungshierarchie
In diesem Thema
    combit.Reporting.Repository Namespace
    In diesem Thema

    Wenn Berichte in verteilten Anwendungen wie z.B. Webanwendungen verwendet werden sollen, müssen alle benötigten Dateien zwischen den beteiligten Systemen bzw. zwischen Client und Server ausgetauscht und auf demselben Stand gehalten werden. Es bietet sich daher an, die Projektdateien in einer zentralen Datenbank zu speichern, was jedoch spätestens dann komplex wird, wenn ein Projekt Grafiken, Drilldown-Projekte oder weitere externe Dateien über lokale Dateipfade referenziert, die auf einem anderen System ebenfalls gültig sein müssen.


    Mit dem Repository-Modus kann ganz auf die Verwendung von lokalen Dateien im Projekt verzichtet werden, sodass die List & Label-Projekte sowie alle davon benötigten Dateien mit wenig Aufwand an einer zentralen Stelle (dem sog. Repository) verwaltet werden können – beispielweise in einer Datenbank oder von einem Webservice.

     

    Grundlagen

    Im Repository-Modus speichert und lädt List & Label die in einem Bericht verwendeten Dateien nicht selbst. Anstelle von Dateipfaden- und namen werden eindeutige Repository-IDs verwendet. Sie müssen selbst die IRepository Schnittstelle implementieren und an das List & Label-Objekt übergeben. Ab diesem Zeitpunkt fragt List & Label Ihr benutzerdefiniertes Repository nach dem Dateiinhalt zu einer Repository-ID, oder übergibt dem Repository eine solche ID samt dem zugehörigen Dateiinhalt zum Speichern. Ob die Dateien im Repository von einer SQL-Datenbank, einem Webservice oder einer anderen Speicherlösung verwaltet werden, hängt ausschließlich von Ihrer IRepository-Implementierung ab. Das Laden und Speichern der Einträge im Repository geschieht dabei ausschließlich über Streams.
    Die folgende Abbildung zeigt schematisch das Laden eines Berichts mit der ID "123" über eine IRepository-Implementierung, die intern eine SQL-Datenbank verwaltet:


     

    Umsetzung

    Allen Funktionen, denen bisher der Dateipfad des Projekts übergeben wurde, wird stattdessen die Repository-ID übergeben:

    // Ohne Repository-Modus:
    LL.Design(LlProject.List, "C:\Reports\Invoice.lst")
    // Mit Repository-Modus – gilt auch für Export() bzw. Print():
    LL.FileRepository = new MyCustomRepository(…);
    LL.Design(LlProject.List, "repository://{53F875F0-6177-8AD5-01B44E3A9867}")
    

    Aus "Dateien" werden im Repository-Modus "Repository-Items" (Elemente) und aus den Dateinamen werden "Repository-IDs". Jedes Repository-Item (Element) besitzt neben der ID einen Typ, einen Zeitstempel und einen Bezeichner (String mit variabler Länge, der interne Informationen enthält). Ihre Repository-Implementierung muss neben dem Dateiinhalt also mindestens diese vier Informationen für jedes Repository-Item (Element) speichern und abrufen können.

     

    Hier finden Sie eine Anleitung zur genauen Vorgehensweise, um das Repository zu verwenden:

    Verwenden des Repository-Modes

     

    Sie finden eine vollständige einfache Repository-Implementierung in den ASP.NET-Beispielprojekten (Klasse SQLiteFileRepository), die ein Repository mit einer SQLite-Datenbank als Datenspeicher bereitstellt.

     

    Tipps

    • Nutzen Sie die Klasse RepositoryImportUtil, um bestehende lokale Dateien zu importieren bzw. neue Projekte im Repository zu erstellen.
    • Mit der RepositoryItemDescriptor-Klasse können Sie den Anzeigenamen ändern, der in den Auswahldialogen im Designer anstelle der internen Repository-ID angezeigt wird.
    • Zugriffe auf das Repository erfolgen sequentiell. Nutzen Sie aber das gleiche Repository-Objekt für mehrere List & Label Instanzen oder ist der verwendete Datenspeicher nicht threadsicher, ist eine Synchronisierung notwendig.
    • Webanwendungen: Um auch größere Dateien in das Repository einfügen zu können, sollten die beiden Parameter maxRequestLength und executionTimeout in der web.config auf ausreichend große Werte gesetzt werden. Dies wird auch in den mitgelieferten ASP.NET Beispiele gezeigt:
      ...
      <system.web>
          <!-- combit: adapt maxRequestLength and executionTimeout when uploading huge files -->
          <httpRuntime targetFramework="4.5" maxRequestLength="200000" executionTimeout="600" />
          <!-- ... -->
      </system.web>
      ...
      

    Hier finden Sie eine Anleitung zur genauen vorgehensweise, um das Repository zu verwenden:

    Verwenden des Repository-Modes

    Klassen
     KlasseBeschreibung
    Klasse 
    KlasseStellt eine Hilfsklasse für Repositories dar, um das Importieren von Dateien aus dem lokalen Datensystem zu vereinfachen. Für weitere Details siehe die Schnittstelle IRepository.
    KlasseStellt ein Element des Repositories dar.
    KlasseStellt den Zugriff der Bezeichner eines Elements her.
    KlasseStellt die vordefinierten Elementtypen eines Repositories von List & Label zur Verfügung.
    Klasse 
    Klasse 
    Schnittstellen
     SchnittstelleBeschreibung
    Schnittstelle

    Stellt einen Speicher für sämtliche Dateien eines List & Label Projektes wie zum Beispiel Drilldown Berichte, Bausteine, Bilder, Shapefiles, etc. zur Verfügung.

    Sobald ein Repository verwendet wird, werden die Dateien mit Hilfe einer ID anstelle eines lokalen Dateipfades angesprochen. Die Implementierung der IRepository-Schnittstelle ist verantwortlich für das Speichern und Laden der Inhalte und deren Metadaten (RepositoryItemDescriptor) eines jeden einzelnen Elements des gesamten Repository.

    Eine exemplarische Implementierung kann unter Verwenden des Repository-Modes eingesehen werden.

    Siehe auch