Page 1 of 1

Verschiedene Datenquellen kombinieren

PostPosted: Thu Nov 05, 2015 10:58 am
by stephanf
Hallo,

wie sollte man grundsätzlich vorgehen, wenn man Folgendes umsetzen möchte.
In einer Tabelle sollen in einer Spalte Daten angezeigt werden, die nicht aus der Datenbank kommen, sondern z.B. per Webservice von irgendwo je Datenzeile abgerufen werden. Muss hier ein eigenes Storage implementiert werden oder kann die Spalte nachträglich eingefügt werden.

Sollte dies nicht möglich sein, wäre zumindest das Anzeigen der zusätzlichen Daten im Edit-Formular für einen Datensatz wünschenswert.

Grüße
F.Stephan

Re: Verschiedene Datenquellen kombinieren

PostPosted: Thu Nov 05, 2015 5:23 pm
by Support@SIB
Dafür gibt es mehrere empfohlene Lösungen, je nach tatsächlichem Use-case:

  1. Eine View erstellen, die Daten aus mehreren Tabellen joined (bei einem Webservice unpassend)
  2. Eine eigene Storage erstellen (ist immer die bevorzugte Variante wenn insert/update/delete ebenfalls eine Rolle spielt). Die Storage kann aber von AbstractMemStorage abgeleitet werden oder die anspruchsvollere Variante wäre von AbstractCachedStorage abgeleitet (wie DBStorage selbst)
  3. Die Metadaten der Storage können vor dem open() erweitert werden und mit dem calculateRow event: eventCalculateRow können Sie diese "errechneten" Spalten befüllen. Dieser Mechanismus eignet sich für Anzeigespalten.
  4. Die bisherhigen Optionen waren rein server-seitig. Natürlich können Sie auch ein RemoteDataBook vor dem open() mit eigenen Spalten erweitern. Das DataBook bietet aber keinen calculateRow event und dort müssen Sie eventAfterReload und ggf. eventAfterRestore, eventValuesChanged verwenden - je nachdem Änderungen eine Auswirkung haben.
Die Server Lösung ist natürlich zu bevorzugen, weil im Falle eines Desktop Clients der Desktop ggf. nicht direkt zum Remote System connecten darf. Im Falle von VaadinUI wäre das grundsätzlich egal, weil auch der Client am Server läuft. Aber auf saubere Schichtentrennung sollte stets geachtet werden!