In RecView – Grundlagen Teil 1 haben wir gesehen, dass das RecView eigene Datensatzpuffer für das Lesen und Positionieren von Datensätzen bereithält. Dadurch entfallen Seiteneffekte, die bei der Verwendung von globalen Datensatzpuffern (in der RecList) auftreten können. Auf der anderen Seite muss der CONZEPT 16-Entwickler nun die Datensatzpuffer des RecView berücksichtigen.
Jede Zeile im RecView entspricht einem Datensatz, der durch ein Group-Objekt repräsentiert wird. Die Group enthält wiederum Item-Objekte, die im RecView-Editor definiert werden und die Ausgabe (also das was angezeigt wird) festlegen.
Muss ein RecView zum ersten Mal mit Daten gefüllt werden, dann wird das Ereignis EvtLstViewInit
aufgerufen.

Grundsätzlich ist der Ausgabebereich des RecView in Views unterteilt (siehe Abb.1). Jedes View stellt einen Bereich der anzuzeigenden Datensätze dar. Nach dem Starten enthält das RecView zunächst ein einziges View.
Der Anwender kann anschließend Views mit der Maus erstellen, indem er die Schaltflächen (in der Abbildung rot markiert) zieht. Die Eigenschaft wpSBarStyle
definiert, ob ein Anwender Views erstellen kann. Die Unterteilung in Views war bereits bei der RecList möglich. Neu ist jedoch, dass die Initialisierung für jedes View getrennt vorgenommen werden kann.
Das Ereignis EvtLstViewInit
ist wie folgt definiert:
sub EvtLstViewInit
(
aEvt : event; // Event
aRecBuf : handle; // Record Buffer
aViewId : int; // View Number
aUpdateMode : int; // Initialisation to be taken
)
: logic;
Das RecView übergibt im Argument aRecBuf
den Datensatzpuffer, der für die Positionierung der anzuzeigenden Daten verwendet wird. Das Argument aViewId
bezeichnet die Nummer des View, in dem die Ausgabe vorgenommen wird.
Soll die in Abb. 1 dargestellte Liste so verändert werden, dass das View mit der Nummer eins Datensätze ab einer bestimmten Artikelbezeichnung ausgibt, kann das wie folgt erreicht werden:
sub EvtLstViewInit
(
aEvt : event; // Event
aRecBuf : handle; // Record Buffer
aViewId : int; // View Number
aUpdateMode : int; // Initialisation to be taken
)
: logic;
{
if (aViewId = 1)
{
aRecBuf->ART.aBezeichnung # 'Gifte';
aUpdateMode # _WinRvwUpdateFromRecBuf;
}
return(true);
}
Mit der Anweisung aRecBuf->ART.aBezeichnung # 'Gifte';
wird dem Datenbankfeld ART.aBezeichnung
der Wert 'Gifte'
zugewiesen. Diese ändert jedoch nicht den globalen Feldpuffer, sondern den Inhalt des übergebenen Datensatzpuffers aRecBuf
! Anschließend wird das Argument aUpdateMode
mit der Option _WinRvwUpdateFromRecBuf
an den Aufrufer zurückgegeben. Der Aufbau der Liste erfolgt damit anhand des im Datensatzpuffer angegebenen Feldinhaltes. Das Ergebnis zeigt Abb. 2.

Das untere View zeigt die gewünschte Positionierung (Gifte). Das andere View stellt die Datensätze dagegen ab der ersten Position dar (999 clevere Antworten). Dies ist der Standard, wenn der Wert von aUpdateMode
nicht verändert wird.
Die Voraussetzung für die korrekte Positionierung ist natürlich, dass der zugrunde liegende Schlüssel (Eigenschaft wpDbFileNo
) über das zu positionierende Feld sortiert ist (hier: ART.aBezeichnung
).
Im Argument aUpdateMode
sind neben _WinRvwUpdateFromRecBuf
noch weitere Rückgabewerte möglich. Dieser ist eine Kombination aus drei Bestandteilen: einer from– einer do– und einer opt-Komponente. An dieser Stelle gehe ich nur auf die beiden ersten Komponenten ein, da nur diese für das Ereignis relevant sind:
Die from-Konstanten definieren die Positionierung. Mit der Option
_WinRvwUpdateFromFirst
wird das View z.B. ab dem ersten Satz aufgebaut. Dies ist der standardmäßig vorgegebene Wert des Argumentes in aUpdateMode
. Hier sind weitere Werte möglich. Die CONZEPT 16-Hilfe enthält eine vollständige Beschreibung.
Die do-Konstanten bestimmen, ob eine Group selektiert werden soll (_WinRvwUpdateDoSelect
), die selektierte Group beibehalten werden soll (_WinRvwUpdateDoKeepSelect
) oder die Selektion aufgehoben werden soll (in diesem Fall fehlt die do-Angabe).
Soll die Group im obigen Beispiel auch selektiert werden, dann erfolgt das also so:
aUpdateMode # _WinRvwUpdateFromRecBuf | _WinRvwUpdateDoSelect;
Das Ergebnis zeigt Abb. 3.

Abschließend sollte noch erwähnt werden, dass sich die Option _WinRvwUpdateDoSelect
auf alle Views des RecView auswirkt, da es nur ein selektiertes Group-Objekt gibt.
Ausblick
Der dritte Teil beschäftigt sich mit dem Ereignis EvtLstGroupInit
.