Programmierung

Update einer RecList

Mit dem RecView und der RecList stellt CONZEPT 16 zwei Objekte zur Verfügung, mit denen sich sehr einfach Datensätze einer Tabelle anzeigen lassen. Je nach Verarbeitung innerhalb der Applikation ändern sich aber die Datensätze, welche dort dargestellt werden sollen. In diesem Fall ist es unumgänglich ein Update auf die Anzeige-Objekte durchzuführen. Dabei stehen dem Entwickler etliche Update-Optionen zur Verfügung. Im folgenden Artikel möchten wir Ihnen einen kleinen Einblick in diese Optionen geben.


Abb. 1: Sichtbarer Bereich einer Tabelle

Das RecList-Objekt ist optimiert auf die Anzeige großer Tabellen. Daraus ergibt sich, dass es nicht möglich ist, alle vorhandenen Datensätze im Arbeitsspeicher zu halten. Aus diesem Grund hält die RecList jeweils nur die sichtbaren Sätze im Arbeitsspeicher vor (siehe Abb.1).

Die angezeigten Sätze werden dabei Datensatz für Datensatz aus der Tabelle gelesen. Das Lesen der Datensätze geschieht hierbei über den globalen Datensatzpuffer (analog RecRead()). Daraus resultiert, dass sich durch die Anzeige die Feldpufferwerte verändern.

Auch beim Scrolling greift der beschriebene Mechanismus. Es werden Sätze entsprechend der Scroll-Richtung nachgelesen.

Wird eine Zeile in der RecList selektiert, so werden nicht alle Felder des Datensatzpuffers mit neuen Werten gefüllt, sondern ausschließlich die, welche auch in der RecList eingetragen sind.
Nachfolgend werden Aufgabenstellungen beschrieben und wie diese unter Verwendung von WinUpdate() realisiert werden können:
Aufgabenstellung: In einer RecList werden Datensätze angezeigt. Es erfolgt nun eine Verarbeitung dieser Sätze innerhalb der Applikation. Aufgrund der Verarbeitung verändern sich die Datensätze, welche in der RecList angezeigt werden sollen. Jetzt muss ein Update der RecList erfolgen, damit diese Datensätze auch innerhalb des RecList-Objektes sichtbar werden. Es soll dabei der bereits vor der Verarbeitung selektierte Datensatz weiterhin ausgewählt bleiben. Dieser Datensatz soll zusätzlich innerhalb der RecList seine Position beibehalten.

tHdlRecLst->WinUpdate(_WinUpdOn, _WinLstFromSelected |
                      _WinLstRecDoSelect |
                      _WinLstPosSelected);

Erläuterung: Als erste Option wird im obigen Ausschnitt _WinLstFromSelected angegeben, dies bewirkt, dass die RecList ausgehend vom selektierten Datensatz neu aufgebaut wird. Durch die Option _WinLstRecDoSelect bekommt der Datensatz innerhalb der RecList den Fokus, der sich momentan im Feldpuffer befindet. Da sich zu diesem Zeitpunkt der vorher selektierte Datensatz im Feldpuffer befindet, wird dieser auch weiterhin selektiert. Als letztes wird _WinLstPosSelected angegeben. Dies hat zur Folge, dass beim Neuaufbau des Objektes der bisher selektierte Satz innerhalb der Liste seine Position beibehält.
Aufgabenstellung: In einem RecList-Objekt werden Datensätze dargestellt. Innerhalb der Liste soll nach einer Verarbeitung der letzte Datensatz selektiert dargestellt werden, auch wenn sich dieser zum Zeitpunkt der Verarbeitung nicht im sichtbaren Bereich der Liste befindet. Hierfür muss via RecRead(_RecLast) der Satz mit dem größten Schlüsselwert geladen werden. Ausgehend vom Pufferinhalt muss dann ein Update auf die RecList durchgeführt und der aktuelle Datensatz selektiert werden.
Werden die dargestellten Datensätze bereits im Ereignis EvtLstRecControl nach einem Kriterium aussortiert, muss ebenfalls der letzte Datensatz der Tabelle gelesen und ausgehend vom Pufferinhalt ein Update auf die RecList durchgeführt werden. Die RecList selbst stellt dann fest, ob dieser Datensatz dargestellt wird. Ist dies nicht der Fall, so wird der Datensatz mit dem nächst kleineren Schlüsselwert geladen. Nun wird wieder überprüft, ob dieser Datensatz dargestellt wird. Dies wird solange wiederholt, bis ein Datensatz gefunden wurde, welcher dargestellt wird.

tRes # RecRead(tHdlRecLst>wpDbFileNo,
               tHdlRecLst->wpDbKeyNo, _RecLast);
tHdlRecLst->WinUpdate(_WinUpdOn, _WinLstRecFromBuffer |
                      _WinLstRecDoSelect);

Erläuterung: Durch die Option _WinLstRecFromBuffer wird erreicht, dass die Liste ausgehend vom Wert des Feldpuffers neu aufgebaut wird und _WinLstRecDoSelect fokussiert diesen Datensatz innerhalb der Liste.
Aufgabenstellung: In einer RecList soll ein bestimmter Datensatz selektiert werden. Als weitere Bedingung soll der Datensatz am unteren Ende der Liste dargestellt werden. Um dies zu bewerkstelligen, ist es nicht nötig den Datensatz zuerst zu lesen und ausgehend vom Pufferinhalt auf diesen zu positionieren. Hier kann der Zugriff über einen bestimmten Schlüsselwert erfolgen, dabei muss dem Schlüsselfeld der entsprechende Wert zugewiesen werden. Voraussetzung hierbei ist, dass der Schlüssel mit dem in der Eigenschaft wpDbKeyNo angegebenen Schlüssel übereinstimmt.

// Artikel mit der Artikelnummer 20034 soll selektiert werden
ART.iNummer # 20034;
tHdlRecLst->WinUpdate(_WinUpdOn,
                      _WinLstRecFromBuffer|
                      _WinLstRecDoSelect |
                      _WinLstPosBottom);

Erläuterung: Der Ablauf des Updates erfolgt hier analog zum vorherigen Beispiel. Die zusätzlich angegebene Option _WinLstPosBottom bewirkt, dass der in den Feldpuffern befindliche Datensatz am Ende des sichtbaren Bereichs der RecList positioniert wird.

2 Kommentare

2 Kommentare “Update einer RecList”

  1. @Th.Eichele
    Prinzipiell gibt es keinen Unterschied zu _WinLstRecFromRecID, solange der Datensatz dem Kriterium entspricht.
    Entspricht allerdings der Datensatz zum Zeitpunkt des Updates nicht dem Kriterium, welches im Ereignis EvtLstRecControl definiert wurde, so erscheint die RecList nach dem Update leer. Der Mechanismus, in welchem die RecList selbstständig feststellt, ob ein Datensatz dargestellt wird, greift in diesem Fall nicht.

Kommentar abgeben