combit List & Label 29 - .NET Hilfe
In diesem Thema
    combit.ListLabel29 Assembly
    In diesem Thema
    Namespaces
    NamespaceBeschreibung
    Die Hauptkomponente, die alle wichtigen List & Label Basisfunktionen für Druck und Design beinhaltet. Dazu stehen Ihnen komfortable Klassenwrapper zur Verfügung. Hinweise zu deren Verwendung finden Sie in dieser Hilfe.
    Der DataProvider Namespace enthält alle verfügbaren Datenprovider von List & Label. Dies erlaubt direkte Verbindungen zu Quellen wie SqlConnection, XML-Dateien oder Objekthierarchien. Die Schnittstellen, die in diesem Namespace enthalten sind, erlauben es außerdem eigene Datenprovider für Verbindungen, die derzeit noch nicht abgedeckt werden, zu schreiben.
    Der DesignerExtensions Namespace enthält Klassen und Schnittstellen, die sich mit dem Erweitern des Designers befassen. Diese Klassen können zum Beispiel verwendet werden um mächtige DesignerObjects zu erstellen.

    Um Projektdateien dynamisch zur Laufzeit zu erstellen oder auch um bestehende Projektdateien per Code zu bearbeiten, können Sie mit den List & Label DOM-Funktionen arbeiten. Dazu stehen Ihnen komfortable Klassenwrapper zur Verfügung. Hinweise zu deren Verwendung finden Sie in dieser Hilfe.

    Um ein Projekt neu anzulegen, benötigen Sie die Open Methode der ProjectBase Klasse. Um bestehende Projekte zu bearbeiten, verwenden Sie die GetFromParent Methode.

    Wichtiger Hinweis: Es ist auch möglich beim Öffnen eines Projektes mit DOM zu bestimmen, dass beim Bearbeiten etwaige Fehler ignoriert werden sollen. So ist es möglich auch ohne den Zugriff auf die ursprüngliche Datenquelle die Projektdatei zu bearbeiten. 

    Doch Änderungen an der (Daten)Struktur des Projektes, die auf Formeln oder Variablen/Felder der Datenquelle basieren können hierbei aber nicht berücksichtigt und umgesetzt werden. Denn ohne Datenquelle werden dann die Formeln im Projekt wie Platzhalter behandelt, und somit kann dann die Sektion mit den verwendeten Variablen (siehe LlGetUsedIdentifiers()) nicht korrekt geschrieben werden, wenn Sie z.B. in einer Tabelle weitere Spalten anhängen. Der Inhalt dieser Sektion wird beim Speichern dann unverändert gelassen. Das gleiche gilt für den Fall, dass in einem Berichtscontainer eine neue Tabelle eingefügt wird, die bisher nicht verwendet wurde. Zusätzlich können dabei die DOM Typen einzelner Elemente in der Projektdatei nicht korrekt identifiziert werden.

    Erst wenn auch die Datenquelle im verwendeten ListLabel-Objekt bekannt ist, kann das Projekt mit DOM vollständig und ohne Einschränkungen bearbeitet werden. Nur so können etwaige Formeln etc. interpretiert werden, um den korrekten DOM-Typen zu verwenden.

     

    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.8" maxRequestLength="200000" executionTimeout="600" />
          <!-- ... -->
      </system.web>
      ...
      

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

    Verwenden des Repository-Modes