Programmierung

RecView – Grundlagen (Teil 2)

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.

Views nebeneinanderAbb. 1: Darstellung in zwei Views

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.

Individuelle ViewsAbb. 2: Individuelle Positionierung

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.

Views mit selektierter GruppeAbb. 3: Views mit selektierter Gruppe

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.

Download

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

Keine Kommentare

Kommentar abgeben