Einzelteile des View-Konzepts                          [Hintergrundwissen für Allegrologen] 
(aus `news 58`) 
`Hauptseite zum Thema "Views"` 
Nutzung der View-Technik setzt Schreibrecht auf dem Start- und auf dem Tempverzeichnis voraus. Wenn in der INI-Datei kein Befehl  DbAux=...  steht (mit dem man das Arbeitsverzeichnis setzt), wird als Tempverz. dasjenige genommen, das in der Environment-Variablen TEMP steht. Das wäre z.B.  c:\windows\temp. Dort kommen die temporären Dateien zu liegen, die nach Ende einer Sitzung ohne weiteres gelöscht werden können. Die Parameterdateien (vom Typ v-*.cpr ), die man nicht selten später erneut gebrauchen kann, werden auf das Startverzeichnis geschrieben (Standard c:\allegro), desgleichen Exporte, was man durch Eingriff in die FLEXe aber ändern könnte. 

Zunächst aber zum wichtigen Begriff  ViewListe
Eine ViewListe ist eine Textdatei vom Typ .VW.  Sie besteht aus Zeilen von exakt gleicher Länge (Auffüllung am Ende mit Leerzeichen!). Ist das beim Aufruf nicht gegeben, wird das Programm selbständig eine Kopie der Datei erstellen und darin alle Zeilen an der längsten ausrichten. Jede ViewListe kann aber ihre individuelle, passende Zeilenlänge haben. 
So sieht, schematisch, ein Datensatz, d.h. also eine Zeile, in einer ViewListe aus: 

00001234|TEXT ...                              13 10

Die hochgestellten, unterstrichenen Zahlen 13 und 10 sind die üblichen ASCII-Steuercodes für die Zeilentrennung. Warum die feste Länge? Dadurch geht es viel schneller als bei variabler Zeilenlänge, die Anzeige dann erscheinen zu lassen und darin zu blättern. Bei Ergebnismengen von mehreren tausend Sätzen wirkt sich dies spürbar aus. ViewListen sind sehr oft temporär, daher kann man sich diese Ineffizienz leisten. (Nochmals: Hat eine ViewListe ausnahmsweise Zeilen unterschiedlicher Länge, merkt das Programm dies beim Einlesen und korrigiert es, d.h. die Datei wird entsprechend verändert; es dauert deshalb nur beim ersten Mal etwas länger, bis sie dann erscheint!  
Der Inhalt eines View-Satzes ist zweiteilig: eine interne Satznummer (hier 8stellig mit führenden Nullen, das ist jedoch nicht verbindlich), und ein davon durch das Zeichen '|' getrennter TEXT, eine beliebige Zeichenkette. Diese besteht normalerweise aus Elementen des Datensatzes, dessen Nummer vorn steht, und zwar genau den Elementen, die man für einen bestimmten Zweck braucht. In der Regel wird dieser Text in sinnvoller Weise sortierbar sein, wobei die zum Sortieren dienenden Elemente vorn stehen müssen. Das Zeichen | braucht ansonsten nicht immer an derselben Stelle der Zeile zu stehen. 
Vor dem | kann auch statt einer Nummer etwas anderes stehen, und dadurch wird das View-Konzept noch viel flexibler: 

h dateiname  		Die Datei dateiname wird sofort angezeigt, sobald die Zeile angewählt wird 
v ViewListenname	Die ViewListe erscheint, wenn die Zeile mit Enter ausgewählt wird 
x FLEX-Befehle	Die FLEX-Befehle werden ausgeführt 
X FLEX-Dateiname	Die FLEX-Datei wird ausgeführt (beides erst nach Druck auf  Enter) 

Beispiel: Die ViewListe  quick.vw: Betrachten Sie diese einmal `als Datei`, einmal `in ihrer Funktion als ViewListe`.

Es gibt eine Funktion zur `Auflistung und Bearbeitung`aller vorhandenen ViewListen. 

Erfreuliche Nebenwirkung: Jede Datei xyz, die wie beschrieben aussieht, kann mit dem FLEX-Befehl  View xyz  als ViewListe angezeigt werden, egal wie man sie erstellt hat! Im Extremfall ist es eine Textdatei ohne ein '|' oder mit jeweils "abc|" am Anfang jeder Zeile, wobei 'abc' nicht mit einer Ziffer beginnt.  Die ViewListe wird angezeigt im Kurzanzeige-Fenster und erlaubt dann die Auswahl einer Zeile. Beginnt die Zeile mit einer Nummer größer als Null, wird der zugehörige Satz sofort angezeigt, wenn der Leuchtbalken darauf geht. 
Man hat hier nebenbei eine Alternative zum FLEX-Befehl "select", denn: 
Anschließend (nach Druck auf [Enter]) steht die ausgewählte Zeile dann in der "internen Variablen". D.h. die Angabe "abc", im View nicht sichtbar, kann dann auch per FLEX ausgewertet werden! Kommt kein '|' vor, ist die ganze Zeile sichtbar. 
Eine Befehlsfolge kann demnach so aussehen: 

View liste 
if "" jump ... (es wurde nichts ausgewählt, sondern Esc gedrückt)
if no jump ... (die Datei  liste.vw gibt's nicht)
ins #uvV 

Anschließend steht also die ausgewählte Zeile in der Variablen #uvV. 
Hinweis:
ViewListen sind normalerweise in ASCII codiert, also im DOS-Code. Hat man eine im Windows-Code erstellt, dann vor dem View-Befehl noch set c1 geben und hinterher set c0. 

Nun zur Produktion von ViewListen mit dem View-Paket  ( `h view` ) 
Das Ziel ist, Ergebnismengen als ViewListen aufbereiten und dann anzeigen zu können. 
Es folgt die genaue Erklärung des Konzepts für Neugierige. Normalerweise kommen Sie ohne diese Kenntnisse zurecht! 

Wie könnte der TEXT der ViewListen-Zeilen zusammengestellt werden? Vielleicht einfach die gewünschten Kategorienummern angeben? Das mag in einfachen Fällen reichen und wird auch über ein `Formular` komfortabel gelöst, siehe unten (Seite 6), aber wenn die gesamte Bandbreite der potentiellen Wünsche abgedeckt werden soll, ist man vieles zu bedenken: 

1.	Nicht jedes Feld kommt jedesmal vor, manchmal wird statt eines fehlenden Feldes ersatzweise ein anderes an seine Stelle treten sollen. Das ist vor allem dann wichtig, wenn eine Ergebnismenge unterschiedliche Satztypen enthält. 
2.	Wenn die Datenbank mit V14-Ersetzungen arbeitet, möchte man Klartexte statt Stammsatznummern. 
3.	Manchmal wird man Teilfelder oder andere Bestandteile als Elemente brauchen, nicht den gesamten Feldtext. 
4.	Die Länge jedes am TEXT beteiligten Feldes sollte begrenzbar sein. 
5.	Nichtsortierzeichen sollten sich berücksichtigen lassen. 
6.	Zeichenumcodierungen und Textersetzungen können nötig sein. 
7.	Zahlenwerte sollten aus Textfeldern herausgelöst oder auch aus mehreren Feldinhalten berechnet werden können. 
8.	Die Sortierung wird nicht immer unmittelbar durch den Inhalt eines Feldes definiert werden können, vielmehr braucht man die Möglichkeit, einen veränderten und/oder zusammengesetzten Sortierschlüssel zu definieren. Korrekte Sortierung von Umlauten und Akzentbuchstaben wird man ebenfalls erwarten. 
9.	Es sollte möglich sein, die ViewListe in Gruppen einzuteilen, d.h. Zwischenüberschriften zu erzeugen. 
10.	Zahlen sollte man addieren und im Falle von Gruppierungen auch Zwischensummen bilden können. 
11.	Mehrfach besetzte Felder sollen evtl. mehrere Einträge in der Liste erzeugen. 
12.	Letzte, aber für viele Anwender vielleicht sogar wichtigste Wunschvorstellung: Eine ViewListe sollte exportiert werden können, und zwar wahlweise die vollständigen Datensätze mit allen geeigneten Druckparametern oder die Liste als Tabelle, mit einem eindeutigen Trennzeichen zwischen den (ungekürzten) Datenfeldern, damit sie dann leicht in andere Programme übernommen werden kann (Textsysteme, Tabellen- und relationale Datenbanksysteme). 
 
Das alles weist auf die Exportsprache als Mittel zur Herstellung von ViewListen. Dabei gibt es zwei Möglichkeiten: 

A)	die TEXT-Zeilen sind unmittelbar sortierfähig. Dann kann die Liste direkt in der beschriebenen Form exportiert und dann sortiert werden, bevor man sie anzeigen läßt. 
B)	die TEXT-Zeilen sind nicht unmittelbar sortierfähig. Dann kann die Erstellung der ViewListe nur über einen Umweg laufen: es wird zuerst eine sortierbare Grunddatei mit zwei Kategorien je Satz erstellt. Die erste Kategorie, #u1, enthält den Sortierwert, die zweite, #u2, die anzuzeigende Zeile. Beide können in ihrer Form, aber auch im Inhalt, ganz verschieden sein. Nach dem Sortieren  wird dann die #u1 ganz beseitigt und es bleibt die geordnete ViewListe übrig. 

Das Sortieren im Fall 2) geschieht mit dem allegro-Sortierprogramm ASORT.EXE, welches befähigt wurde, die Beseitigung des Sortierfeldes #u1 am Dateiende automatisch zu machen (neue Option -u3). Übrigens: #u1 braucht nicht von fester Länge zu sein, nur #u2. 

Eine ViewListe entsteht in beiden Fällen als Export einer Ergebnismenge mit Hilfe einer View-Parameterdatei, kurz ViP genannt, mit einem Namen der Form V-XYZ.APR, die immer denselben Aufbau hat. Den Teil mit den allgemeinen Exportparametern kann man für andere Kategoriesysteme einfach kopieren. Die speziellen, auf den jeweiligen Zweck bezogenen Angaben bilden einen Block, der jeweils für eine neue Aufgabe zu bearbeiten ist. Im classico-System entsprechen diesen Dateien die Parameterdateien S-*.APR zur Erstellung einer Sortierdatei. Es kann beliebig viele solche ViPs geben. 
Das Erstellen von ViP-Dateien ist Sache des Systemverwalters, der dafür aber nur relativ wenige Parametrierkenntnisse braucht (es sei denn, man hat sehr diffizile Wünsche).  
Das Anwenden der ViPs ist, wie das Anwenden der Sortierdateien im classico-System, ohne Parameterkenntnisse möglich, zumal wenn die Anwendung auch noch in FLEXe eingebettet wird. Als kommentierte Vorlage benutzt man die Datei V-STAND1.APR  oder  V-STAND2.APR  (letztere mit Gruppierung und Summierung) oder eine andere vorhandene ViP. 

Hier ein Beispiel: 
In der Datei   V-STAND2.APR  (für den Standard-View 2 ) findet man in der Mitte diesen Abschnitt: 

  #-A     (Oberhalb befindet sich das Kopfstück, der standardisierte Abschnitt view1.apt) 

  ****** Variabler Teil ******** 
  Nur hier muss man eingreifen, und zwar diejenigen Kategorien einsetzen, aus denen der View bestehen soll, 
  jeweils mit geeigneten Manipulationsbefehlen 

  Abschnitt für die ViewListen-Zeile: 

  #nr p'j!' e'!' =vY         Gruppierung gewuenscht 

  #76 +#40 x"*1" x">1449" e"." u e4 P'///' Avv
  #nr p"o.J.///" e7 Avv 
  #40 e" = " u e15 F" " P": " Avv 
  #20 u e40 Avv 
  #77 +D x"*1" x"r2" r7 F"." =vu 
  #nr p'00000000' e7 =vu 
  #+D      Sprung zur Verarbeitung von #uvv 

           Abschnitt fuer den Tabellenexport (Felder mit Trennzeichen) 
           aus VIEWTAB.FLX heraus mit "download view" 
  #-Q 
           #uzV enthaelt die aktuelle View-Zeile 
           mit 00000t|... beginnen Trennstrichzeilen, 
           mit 00000a|... beginnen Ueberschriftzeilen 
  #uzV +- c't|' B'|' f' |' e0 
  #uzV c'a|' B'|' f' |' F' ' 
   #76 +E 
   #nr p"o.J." e4 
  #-E 
  #t9 
  #40 e" = " 
  #t9 
  #20 
  #t9 
  #77 x"*1" e"." r7 
           mit 00000s|... beginnen Summenzeilen 
  #uzV c's|' B'|' f' |' F' ' e"." 

Nur die roten Zeilen sind zu verändern, alles andere kann übernommen werden, auch für andere Konfigurationen. 
Wichtig: Im ersten Abschnitt wird keine eigentliche Ausgabe gemacht! Es wird hier nur eine Variable #uvv erstellt, aus der dann weiter unten erst (unter #-D) die Zeilen der ViewListe gemacht werden. Dort braucht man allenfalls noch die Länge (default: 80 Zeichen) zu verändern, sonst weiter nichts. 
Will man für die ViewListe eine Spaltenanordnung, kann man das jeweils mit den Befehlen   en sn   erreichen, also z.B.  e20`s20 um die Länge des Abschnitts auf 20 Zeichen zu begrenzen und mit Leerzeichen aufzufüllen. 
Für die Differenzierung der Anzeige des Views gibt es zwei Möglichkeiten. Dabei wird nach dem Sortieren die Parameterdatei VIEWGRUP.APR  benutzt, die man unverändert auch für andere Kategoriesysteme einsetzen kann. 

1.	Gruppierung: Dazu ist hinter dem ersten Feld ein ':' nötig statt irgendeines anderen Trennzeichens, dann wird der Inhalt des ersten Feldes als Zwischenüberschrift verwendet 
2.	Summierung: Dazu hat vor dem letzte Feld ein '_' statt irgendeines anderen Trennzeichens zu stehen. Dies führt, wenn "Gruppierung" eingestellt ist, nicht nur zur Gesamtsummierung, sondern auch auch zur Errechnung von Zwischensummen für die Gruppen. 

Wenn beides zutrifft, hat das Feld TEXT also die Form: 

Gruppe:Text_Zahl 
Für Allegrologen: 
Daraus macht das Programm SRCH mit der Parameterdatei VIEWGRUP.APR eine übersichtliche ViewListe. Die Funktion der Zeichen  :  und  _  ist nicht im Programm "verdrahtet", sondern nur in VIEWGRUP.APR. Wer parametrieren kann, darf sich auch ganz andere Dinge ausdenken, um die ViewListe zu erstellen. 

Folgende Funktionen braucht man für den Umgang mit Views: 

1.	Ergebnismenge in eine ViewListe umwandeln : FLEXe  view1.flx  und  view2.flx  mit vorgegebenen ViPs, viewform.flx  und  viewpara.flx  für ad-hoc erstellbare ViPs. 
2.	ViewListe betrachten, Sätze auswählen und bearbeiten: FLEX-Befehl  View
3.	ViewListe exportieren: FLEX-Befehl  download view

Auch eine extern (mit PRESTO oder SRCH oder anders) erstellte ViewListe kann mit den Schritten 2 und 3 benutzt werden. 
Aber noch mehr: die schlichte Struktur der ViewListen erlaubt es sogar, Auswahllisten beliebiger Art in derselben Form zu erstellen, die dann mit dem Befehl  View  präsentiert werden können. Zeilen, die nicht mit einem Satz verbunden sind, sollten am Anfang die Angabe "0|" haben oder aber das Zeichen '|' nicht enthalten. Die ausgewählte Zeile geht dann in die interne Variable über und kann beliebig weiter verwertet werden. Im FLEX sieht das so aus: 

  ViewListe anzeigen: 
View dateiname      (Achtung: View mit großem V, sonst keine Anzeige, sondern nur Dateiöffnung)
  Es wurde [Esc] gedrückt: 
if cancel jump xxx 
  Es wurde eine Zeile ausgewählt (mit Enter oder [OK]): in #uaw kopieren 
ins #uaw 
... 

In #uaw hat man anschließend die ausgewählte Zeile aus der ViewList und kann damit beliebig umgehen. 
Tip: Um eine bestimmte ViewListe, die man vorher produziert hat, erneut zu sehen, kann man sie auch manuell aufrufen:  man gibt im Schreibfeld ein 
v dateiname

Verbesserungen von ASORT
Das DOS-Sortierprogramm `ASORT.EXE` wurde geeignet verbessert, um die Aufgaben des View-Konzepts wahrnehmen zu können, wenn auf DOS-Ebene eine ViewListe hergestellt werden soll: 

Option  -u3
beseitigt die Kategorie #u1 und verwandelt #u2 in eine reine Textzeile 
(Option -u1 würde nur  #u1  weglassen,. -u2 beseitigt #u1 und #u2) 

Option -r
sorgt für umgekehrte Sortierung (wird im Standardpaket nicht ausgenutzt). 

?h view=h view 
?Hauptseite zum Thema "Views"=h view 
?als Datei=h quick.vw 
?in ihrer Funktion als ViewListe=x View quick 
?Formular=h view 
?ASORT.EXE=h ac8 
?news 58=X gj view.htm 
?Auflistung und Bearbeitung=x var "*.vw"\ins #uwz\exec X param.flx