RecView – Grundlagen (Teil 3)

In RecView – Grundlagen Teil 2 bin ich auf die eigenen Datensatzpuffer des RecView eingegangen und auf die Initialisierung des View im Ereignis EvtLstViewInit. Im heutigen Artikel soll es um das Ereignis EvtLstGroupInit gehen.

Im letzten Teil habe ich nur erklärt, dass jede Zeile eines View aus Gruppen aufgebaut ist. Doch was sind überhaupt Gruppen und wann werden diese erstellt?
Das RecView (wie auch die RecList) wurde von Anfang an so ausgelegt, dass die Anzahl der Datensätze in einer Tabelle keinen Einfluss auf die Performance bei der Anzeige der Datensätze haben darf. Man stelle sich ein Telefonbuch vor. Jeder Eintrag wäre dann einem Datensatz gleichbedeutend. Eine solche Datenmenge würde natürlich selbst heute noch den Arbeitsspeicher der modernsten Rechner an die Grenze der Leistungsfähigkeit bringen.
Deshalb liest jedes View immer nur maximal so viele Sätze, wie im View dargestellt werden können. Scrollt der Benutzer, dann werden entsprechend weitere Sätze geladen.
Immer dann, wenn ein Datensatz gelesen wird, wird auch ein zugehöriges Group-Objekt generiert, welches die Visualisierung für diesen Datensatz übernimmt. Das Group-Objekt hat eine Lebensdauer, die auf die Sichtbarkeit im View beschränkt ist. Scrollt der Benutzer oder verkleinert er das View, dann werden nicht mehr sichtbare Gruppen entsprechend gelöscht.
Die Generierung einer Gruppe kann jedoch ein zeitaufwändiger Vorgang sein. Für jedes angezeigte View verwaltet das RecView deshalb einen Cachespeicher, der die bereits generierten Gruppen enthält. Wird nun ein Datensatz gelesen, wird zunächst überprüft, ob die dazugehörige Gruppe im Cache enthalten ist. Erst wenn dies nicht der Fall ist, muss eine neue Gruppe erstellt werden. Group-Objekte werden aber nicht für unbegrenzte Zeit im Cache abgelegt. Die Eigenschaft wpExpireTime der Gruppe definiert, wie lange sie gültig ist.
Hier kommt das Ereignis EvtLstGroupInit ins Spiel. Es wird aufgerufen, wenn ein Group-Objekt generiert wurde und für die Anzeige im View-Objekt initialisiert werden muss.
Grundlage für Aussehen und Inhalt der Gruppe ist die Spaltendefinition, die im RecView-Editor festgelegt wurde. Das Group-Objekt ist bei Auftreten des Ereignisses EvtLstGroupInit also nicht leer, sondern hat schon ein vorgegebenes Layout, welches im Ereignis jedoch noch angepasst werden kann.
Dem Event werden alle relevanten Informationen übergeben:

sub EvtLstGroupInit
(
  aEvt                 : event;    // Ereignis
  aRecBuf              : handle;   // Datensatzpuffer
  aGroup               : handle;   // Gruppe
  aViewId              : int;      // Nummer des View
)
: logic;
{
  aGroup->wpExpireTime # 0;
  DbgTrace('Group : ' + CnvAI(aGroup) + ' Artikelnummer: ' +
           CnvAI(aRecBuf->ART.iNummer));
  return(true);
}

Im Argument aRecBuf wird der Datensatzpuffer des zugehörigen Datensatzes übergeben. In aGroup wird der Deskriptor des Group-Objektes übergeben. aViewId gibt an, in welchem View die Gruppe dargestellt werden soll.
Im Beispiel wird die Eigenschaft wpExpireTime der Gruppe auf den Wert 0 gesetzt. Das führt dazu, dass die Gruppe nicht im Cache gehalten wird. Abb. 1 zeigt das Beispiel während der Ausführung.

RecView - EvtLstGroupInitAbb. 1: RecView-Beispiel

Abb.2 zeigt das zugehörige Trace-Protokoll im Debugger.

RecView - DebugAbb. 2: EvtLstGroupInit – Trace

Wenn Sie nun die Größe des Dialoges ändern oder scrollen, können Sie sehr schön beobachten, wie das Objekt die Sätze nachlädt. Das Ereignis wird für alle sichtbaren Sätze wiederholt aufgerufen. Wenn Sie die Eigenschaft wpExpireTime auf einen Wert ungleich null setzen, dann sehen Sie, dass jeweils nur neue Sätze nachgeladen werden.
Der Wert der Eigenschaft wpExpireTime steht standardmäßig auf 60 Sekunden. Je nach Anwendung kann es jedoch sinnvoll sein, andere Werte zu wählen. Stellt eine Gruppe nur statische Informationen dar, dann kann der Wert hoch gewählt werden. Stellt sie dagegen dynamische Informationen dar, die sich häufig ändern, dann ist eher ein geringer Wert zu wählen.
Das RecView-Objekt leert in bestimmten Situationen den Gruppen-Cache auch automatisch. Dies ist dann der Fall, wenn sich die Spaltenbreite ändert. Des Weiteren kann mit der Option _WinRvwUpdateOptClearCache beim Befehl WinRvwUpdate der Cache auch programmseitig geleert werden.

Ausblick

Im nächsten und voraussichtlich letzten Teil der Reihe werde ich das Group-Objekt und seinen Aufbau näher erläutern.

Download

Beispieldatenbank RecView_Part3.zip (32.84 KB)
Sie müssen angemeldet sein, um die Datei herunterladen zu können.

Klicken Sie hier, um die Nutzungsbedingungen für unseren Blog zu lesen.

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Leave the field below empty!

Wünsche, Fragen oder Feedback sind willkommen:

Nutzungsbedingungen der Kommentarfunktion im Blog

1. Allgemeines

Vectorsoft AG („Anbieter“) stellt für Internetnutzer („Nutzer“) auf der Website
vectorsoft.de einen öffentlichen Blog bereit. Der öffentliche Blog dient dem
Informations- und Gedankenaustausch. Die Nutzer, welche sich mit Beiträgen und
Kommentaren beteiligen, verpflichten sich dazu, die Blog-Nutzungsbedingungen
einzuhalten und tragen die Verantwortung für die Richtigkeit und Angemessenheit
sowie Freiheit von Rechtsverletzungen ihrer Beiträge. Mit Nutzung der
Kommentarfunktion in unserem Blog akzeptieren Sie diese Nutzungsbedingungen.

2. Netiquette

Wir bitten Sie von persönlichen Angriffen und Provokationen aufgrund anderer
Meinungen abzusehen. Bitte argumentieren Sie sachlich und bewegen Sie sich auf
der Basis einer konstruktiven Diskussionskultur. Ihr Kommentar sollte stets im
Zusammenhang mit dem jeweiligen Thema sein, um Ausschweifungen in andere
Themenbereiche zu vermeiden. Das mehrmalige Posten desselben Kommentars
oder mehrerer ähnlicher Kommentare ist nicht erlaubt.

3. Verbot rechtswidriger Inhalte

Mit Absenden Ihres Kommentars bestätigen Sie, dass Sie keine Urheberrechte oder andere Rechte Dritter verletzen. Volksverhetzende, rassistische Äußerungen, Anleitungen zu Straftaten und deren Verherrlichung, Gewaltdarstellungen, pornografische Inhalte und Äußerungen, die Persönlichkeitsrechte verletzen sind untersagt.

4. Keine Werbung

Die Nutzung der Kommentarfunktion ist für kommerzielle oder parteipolitische
Zwecke nicht erlaubt. Werbliche Beiträge aller Art werden von uns umgehend
gelöscht.

5. Angaben zum Namen

Bei der Eingabe Ihres Namens achten Sie auf die zuvor genannten Grundsätze.

6. Quellenangaben

Bitte geben Sie bei der beabsichtigten Veröffentlichung von Zitaten oder Beiträgen
Dritter die jeweiligen Quellen an und erläutern dessen Bezug zum Blogbeitrag.

7. Verstoß gegen die Nutzungsbedingungen

Beiträge, die gegen diese Richtlinie verstoßen werden umgehend gelöscht. Sollten
Sie selbst Verstöße bemerken, so senden Sie uns bitte den Link des betreffenden
Kommentars per E-Mail an . Wir weisen ausdrücklich daraufhin, dass wir einzelne Nutzer bei wiederholten oder schweren Verstößen gegen diese
Nutzungsbedingungen ausschließen werden.

Stand: Sept. 2024

Deine Trial Version - jetzt anfordern!

Teste yeet - unverbindlich und kostenfrei

IHRE EVALUIERUNGSLIZENZ - JETZT ANFORDERN!

TESTEN SIE DIE CONZEPT 16 VOLLVERSION - UNVERBINDLICH und KOSTENFREI

Melden Sie sich bei unserem Newsletter an

Anrede*
     
Zustimmung zur Datenverarbeitung gem. DSGVO*



WordPress Cookie-Hinweis von Real Cookie Banner