InMemoryDataProviderWrapper: Datenprovider auf Steroiden

Die Features von Datenprovidern unterscheiden sich sehr. Je nach Datenquelle können zum Beispiel Sortierungen, native Aggregatsfunktionen oder Filter direkt auf Datenbankebene zur Verfügung stehen. Oder auch nicht. Bei filebasierten Formaten wie JSON oder XML oder auch bei „Web“-Formaten wie REST ist all dies beispielsweise nicht verfügbar. Diese werden normalerweise „von vorne nach hinten“ eingelesen und können daher keine Sortierungen anbieten oder native Aggregierungen vornehmen. Mit List & Label 29 haben wir da etwas Neues im Angebot.

neue Features im InMemoryDataProvider

Den InMemoryDataProvider gibt es schon länger. Ich habe hier schon einmal darüber geschrieben. Allerdings gibt es eine wichtige Einschränkung: Dieser Provider unterstützt keine Relationen, die sich nicht aus Schlüsselfeldern ergeben. Man kann daher nicht einfach ein XML darin „verpacken“, er eignet sich nur für „flache“ Formate wie CSV oder XLS. Die grundlegende Technologie war aber damit schon länger vorhanden. Das hat mich dann, als ich diesen Wunsch in unserem Idea Place gelesen habe, auf die Idee gebracht, das Ganze auf beliebige Data-Provider-Strukturen zu erweitern.

Das Ergebnis ist der InMemoryDataProviderWrapper. Die Verwendung ist sehr simpel:

// The RestDataProvider or the SchemaAwareJsonDataProvider are also suitable here
XmlDataProvider provider = new XmlDataProvider(@"c:\temp\text.xml");
using (ListLabel LL = new ListLabel())
{
// the wrapper around the XML provider is created here. This one line is the only change
InMemoryDataProviderWrapper wrapper = new InMemoryDataProviderWrapper(provider);
LL.DataSource = wrapper;
LL.Design();
}

Der Clou dabei ist, dass die Struktur durch das Wrappen nicht verändert wird, d.h. die Projektdateien, die bereits für das XML angelegt wurden, können unverändert bleiben. Das Test-XML für diesen Blogpost stammt von hier. Und wo bisher – ohne den Wrapper – keine Sortierungen zur Verfügung standen, kann jetzt bei ansonsten völlig identischer Struktur eine Sortierung gewählt werden:

Sortierung hinzufügen

Ebenso kann mit nativen Filtern gearbeitet werden:

native Filter hinzufügen

Eine Reihe an nativen Aggregatsfunktionen steht ebenfalls zur Verfügung:

Übersicht native Aggregationsfunktionen

Dabei geht der Provider so speichersparend wie möglich vor – Tabellen werden erst dann in den Speicher geladen, wenn sie auch wirklich benötigt werden. Es findet also kein vollständiges Caching der (möglicherweise sehr umfangreichen) Datei statt, sondern ein Caching-on-demand. Und wenn die Features irgendwann doch nicht mehr benötigt werden, kann der Wrapper jederzeit wieder entfernt werden, ohne dass die Projektdateien geändert werden müssen.

Vielen Dank an dieser Stelle für die Anregung im Idea Place. Ich freue mich über diesen neuen Mitbewohner in unserem Datenprovider-Zoo.

Empfohlene Artikel

Schreibe einen Kommentar