UB BRAUNSCHWEIG
Symbolfoto
  • Impressum
  • Startseite
  • allegro-C von A-Z
  • Druckversion


a30 - Plattformunabhängiges Programm zur Nutzung von allegro-Datenbanken im Netz auf der Basis des Systems "Adobe Flex"


2. Wie arbeitet a30?

a30 ist ein Programm, das auch ganz ohne allegro-Datenbank etwas tun könnte: Seine Felder und Funktionsbereiche kann man mit eigenen Skripten auch mit ganz anderen Daten bedienen und betreiben. Es läuft im Client-PC und greift nicht selber auf die Datenbank zu. Außerdem wird sein Quellcode (Adobe Flex) freigegeben, daher können Anwender das Programm freizügig in jeder Einzelheit ändern und neue Funktionen für beliebige eigene Zwecke einbauen. Siehe dazu Anhang 6.
 

1. Aufruf
Das eigentliche Programm heißt a30.swf, es ist ein Flash-Programm.
Gestartet wird es nicht direkt, sondern automatisch aus einer PHP-Datei heraus, in die es eingebaut ist. Wie dies aussieht, wird in der index.php gezeigt, die zum a30-Paket gehört und mit  a30.swf  zusammen auf einem Verzeichnis im Dokumentenpfad des Webservers liegen muß. Man kann sie modifizieren und anders nennen. Der Endnutzer ruft nur ganz normal diese PHP-Datei auf.
Ferner: Um sofort zu einem bestimmten Datensatz, einer Ergebnismenge, einem Registerabschnitt oder einer Sonderfunktion zu gelangen, kann man dem Aufruf geeignete Parameter mitgeben; siehe dazu Anhang 4.
[Hat der Nutzer-PC noch keinen Flash-Player, wird dieser automatisch zum Installieren angeboten.]


 

2. Start von a30
a30.swf  installiert sich dann im Browser des Endnutzers, genau gesagt in dessen Cache. Ab dem zweiten Start geht der Aufruf deshalb spürbar schneller, weil es dann nicht nochmals vom Webserver geladen wird. [Wichtig beim Testen: hat man Änderungen an a30.swf oder an einem PHP-Skript gemacht, dann Cache leeren und a30 neu starten, denn das passiert nicht immer automatisch.]

3. Auswahl der Anwendung
a30.swf  liest die Datei angebot.txt, die auf demselben Verzeichnis liegt: darin steht die Liste der Angebote, die der Nutzer wählen kann.
Diese Datei ist simpel, sie hat für jede anzubietende Datenbank eine Zeile in folgender Form:

demo : Demo-Datenbank
Der Kurzname vor dem : ist zugleich der Verzeichnisname, parallel zum a30-Verzeichnis, auf dem die Skripte zu der betr. Anwendung liegen, hier also die "Demo-Datenbank" auf dem Verzeichnis ../demo.

Alternative:
Schritt 3 kann durch eine Einstellung in der Aufruf-PHP-Datei (s.u.) übersprungen werden, es erfolgt dann sofort Schritt 4, es gibt aber während des Programmlaufs dann keine Möglichkeit, die Anwendung (z.B. die allegro-Datenbank) zu wechseln. Von solchen PHP-Startdateien kann man natürlich mehrere für verschiedene Datenbanken und Nutzer(gruppen) haben. Der Endnutzer kann deshalb auch mehrere Datenbanken in mehreren getrennten Fenstern nutzen.


Von hier an gilt folgendes Grundprinzip:
a30 erhält vom Server einen Strom von Daten, der gegliedert ist durch Labels der Form _!_
XYZ, wobei XYZ ein dreibuchstabiger Code ist, der sich auf eines der Elemente von a30 bezieht, z.B. MEN für das Menu-Tab.
Was hinter 
XYZ folgt, bis zum nächsten Label, wird als Text in das betreffende Element eingestellt.
Es kann sich um HTML-Text handeln (im Falle der Tab-Felder) oder um einen jeweils für das Ziel-Element geeignet strukturierten Text. Mehr dazu siehe Anhang 1.


4. Start der Anwendung
Vom gewählten Verzeichnis, hier demo (parallel zu ./a30) ruft a30 den Job  a30ind.job  auf, und zwar ohne Argument. Dieser Job liefert dann z.B. eine Liste von Zeilen, die in der zweiten Combo-Box zur Auswahl präsentiert werden. Bei einer allegro-Anwendung ist dies die Liste der (logischen) Register der betr. Datenbank, also z.B.  PER Personennamen. In einer anderen Anwendung könnte dies z.B. eine Auswahl von Funktionsbereichen sein - dies wäre in  a30ind.job  einzubauen.
Die Liste wird vom Skript mit einem vorangestellten Label  _!_NAM  geliefert, siehe  a30ind.job. Die erste Zeile enthält die Positionen und Namen der Sortierpunkte für die Anzeige von Ergebnismengen, siehe 7b). Abhängig von der Datenbank können die Sortierpunkte wahlfrei eingestellt werden. 

5. Start der Funktion (falls allegro-Datenbank: Aufklappen des Registers)
Gestartet wird jetzt  _start.job, ein Skript, das ebenfalls auf dem Skriptverzeichnis der Datenbank liegen sollte.
Das Standardskript zeigt einen Ausschnitt des Registers 1, beginnend bei "a".
Das Skript liefert die Daten so:  (die Zwischenräume sind je ein TAB-Zeichen)
_!_REG inum     anz     text
inum    anz    text
inum    anz    text
...
Dabei ist  
inum = Interne Satznummer des (ersten) zu text gehörigen Datensatzes
anz  = Anzahl der Einträge (Treffer) zu  text
text = Registerzeile
Empfehlung: In den  _start.job  als letzten Befehl diesen einbauen:
wri "_!_FOR Identif" n "*VuPW ***" n
Dann wird sofort das Formular "Identifikation" geöffnet (siehe a30for.xml), mit dem man sich per Username und Password identifizieren kann (siehe Sicherheitskonzept).

5.1 Funktionswechsel
Wählt man über die Combo-Box ein anderes Register (eine andere Funktion) 
XYZ, so wird aus der Registerliste die aktuelle Zeile  text  genommen, auf der gerade der blaue Balken steht, und damit der Job  a30ind.job  wieder gestartet, diesmal also mit  urS=XYZ text. Ist die Anwendung eine allegro-Datenbank, wird deren Register XYZ an der Stelle  text  aufgeschlagen. (Eine andere Anwendung könnte etwas völlig anderes tun.)

6. Anzeige des Datensatzes / der Ergebnismenge
nach Auswahl (Doppelklick oder Enter) einer Zeile des Registers
Es kommt darauf an, ob zur Registerzeile ein einzelner Treffer gehört oder mehrere. Aufgerufen wird dann das Skript
a30get.job mit urN=inum     // einzelner Treffer
  bzw.
a30res.job mit urN=inum, urS=regname text   //  mehrere Treffer
wobei  regname  der logische Registername ist bzw. der gewählte Funktionsname der Anwendung.

7a) Satzanzeige
Der Job  a30get.job  erhält den Wert  urN  und liefert den zugehörigen Satz, und zwar in zweifacher Ausführung, Intern und Extern. Dies geschieht, indem das Skript die Daten mit zwei verschiedenen Labels davor liefert: _!_INT  bzw.  _!_EXT.  Die darauf folgenden Texte kommen in die Tab-Felder "Intern" bzw. "Extern".  Standardmäßig verwendet das Skript dafür die Exportparameter  e-unihtm.apr  bzw. d-a30.apr (mit d-k.apt).

7b) Ergebnismengenanzeige
Der Job  a30res.job  liefert die Kurzliste zu der mit dem Befehl  f regname text  gebildeten Ergebnismenge,
also z.B. f PER shakespeare, william.

Das Skript liefert dann diese Form:  _!_COM f regname text_!_LIS Kurzliste
Der Text  Kurzliste  hat eine Zeile je Datensatz, jede in der Gestalt   inum:Kurzzeile
Gezeigt wird in der Liste dann nur die Kurzzeilen, dahinter stecken aber die internen Nummern 
inum  der Sätze.
Darauf beruht:

8) Wahl einer Zeile aus der Kurzliste
Es wird wieder der Job  a30get.job  gestartet, wieder mit  urN=inum  als Argument, ganz wie in 7a).

9) Testen
Wichtiger Tip zum Testen: Was die Skripte genau liefern, kann man studieren, indem man sie per Browser manuell aufruft, z.B. so:
.../demo/a30ajax.php?JOB=a30res&VurS=PER shakespeare, william
oder
.../demo/a30ajax.php?JOB=a30get&VurN=256
Man sieht dann den Ergebnistext, so wie er bei a30 ankommt. Ein Blick in den Quelltext, und man sieht alle Einzelheiten.
Allgemein geht das Testen einer Jobdatei im Browser so:   

.../demo/a30ajax.php?JOB=jobname&VurN=satznummer&VurS=suchbefehl

Andere Möglichkeit:

In den Job Schreibanweisungen einbauen, die etwas in das INF-Tab schreiben.


Die Tabs
Den größten Raum nehmen die 8 wahlweise einschaltbaren "Tab"-Bereiche ein. Was darin erscheint, ist Sache der Skripte, denn der Inhalt ist in keiner Weise festgelegt. Erwähnt wurden schon INT und EXT.
Die Standard-Skripte liefern folgende Inhalte: (der dreibuchstabige interne Name wird nicht sichtbar)
INT = Intern : Internformat-Anzeige (mit Kategorienummern) eines Datensatzes mit der Parameterdatei  e-unihtm.apr
EXT = Extern : Beliebig parametrierte Anzeige des Datensatzes, kann Hyperlinks enthalten
FOR = Form : Datensatz zur Bearbeitung in einem Formular
GRI = Grid : Datensatz zur Bearbeitung in einer Art Tabelle anzeigen, dem sog. "Grid"
INF = Info : Gedacht zur Anzeige beliebiger Textinformation (HTM-Format), die auch Hyperlinks enthalten kann
MEN = Menu : Wie Info, gedacht in erster Linie für Menüs, die aus Hyperlinks bestehen, Beispiel  a30men.htm
HTE = HTML-Editor : Nur sichtbar bei entspr. Berechtigung
FRE = FreiRaum : Für die frei gestaltbaren Formulare, Beispiele "FreiRaum" und "Simpel" in  a30men.htm

LIS = Kurzliste : Kein Tab, sondern das Zusatzfenster, in dem Ergebnis-Kurzlisten erscheinen.

Hat ein Skript z.B.  mit  _!_INF ...  etwas in das Info-Tab geschrieben, und am Ende des Skripts steht noch _!_SET INF, dann wird dieses Tab dadurch auch sichtbar gemacht.

Im Tab "Intern" gibt es unten sechs Buttons (die ersten zwei auch im Tab "Form"):
   Satz wieder speichern : ausgelöst wird  a30put.php?VurN=satznummer
   als Neusatz speichern : a30put.php?VurN=0
   Satz löschen :  a30put.php?VurN=satznummer&VueD=-1
   Edit+ : Der Aktuelle Satz wird mit Feld- und Unterfeldbezeichnungen im Tab INT präsentiert (a30edp.job )
              auch in dieser Form kann man den Satz bearbeiten und wieder speichern
   Form : Der Aktuelle Satz wird mit  a30for.job  im Formular präsentiert (muß abgestimmt sein mit  a30for.xml)
   Grid : Der Aktuelle Satz wird
mit  a30gri.job  im Grid präsentiert


Das Menü
Im  Hauptfenster von a30 befindet sich rechts oben ein Menü mit den zwei Überschriften  "Daten" und "Hilfe". Dies ist nicht als definitiv und unveränderlich anzusehen, sondern erstens ist es im Quellprogramm von a30 leicht erweiter- und änderbar, und zwar in einer XML-Struktur, die auch eine Verschachtelung ermöglicht. Zweitens kann man auch zur Laufzeit in einem Job das Menü komplett auswechseln, indem man eine andere  XML-Struktur mit dem Label  _!_BAR  übermittelt.
Das ausgelieferte Programm hat als Standard diese Funktionen:

Daten
   Eigenes Menü : Zeigt im Menu-Tab die Datei  a30men.htm  mit eingebauten event-Links, die man frei verändern kann (s.u.)
   Drucken : damit kann man den Inhalt des aktiven Tab-Bereichs drucken
   DB-Info : Führt den Job  a30dbi.job  aus. Das mitgelieferte zeigt dann einige Angaben im Tab "Info"
   FullScreen ein/aus : Dies funktioniert nicht bei jeder Browsereinstellung, außerdem geht dann keine Tasteneingabe außer Esc
   Kurzliste als Text : Die Erg.Menge wird als Kurzliste in der vorher eingstellten Sortierung in das INF-Tab kopiert

Hilfe : zeigt HTML-Dateien an, deren Inhalt beliebig veränderbar ist.
   zur Datenbank : Zeigt die Datei  a30hdb.htm  im Info-Tab
   zum System
: Zeigt die Datei  a30hsy.htm  im Info-Tab


Das "Eigene Menü"

Hier ist der Punkt, wo es am einfachsten ist, eigene Funktionen einzubauen, denn man kommt ohne XML aus.
Dazu gehören nur zwei einfache Dinge:

1. Eine neue HTML-Zeile in der Datei  a30men.htm. Eine solche Zeile sieht so aus:
     <a href="event:X jobname">Eigene Funktion</a>

2. Eine Jobdatei für die Eigene Funktion, namens  jobname .job, in der die nötigen FLEX-Befehle stehen.

Ein ganz einfaches Beispiel nach diesem Muster: Die Funktion soll heißen "Schlüssel des aktuellen Satzes anzeigen", und sie soll im Tab-Feld "Info" eben die Liste dieser Schlüssel anzeigen. (In a99 macht das F7.)
So geht es:

1. In die Datei  a30men.htm  diese Zeile einbauen:

     <a href="event:X schluessel">Schlüssel des aktuellen Satzes anzeigen</a>

2. Eine Jobdatei namens  schluessel.job  anlegen, in der steht:
  var "#" #urN     // den Satz mit der Nummer #urN laden
  find
  export p e-unicod  // Output soll Unicode sein
  export wX          // Umcodierung einschalten (Sprungmarke #-X in e-unicod.apr)
  write "_!_INF "    // Nachfolgender Text soll in das Tab INF
  write sk n         // Sondervariable sk = Liste der Schluessel des Satzes
  write "_!_SET INF"   // Tab INF sichtbar machen

Die Variable #urN enthält die aktuelle Satznummer. Sie wird von  a30ajax.php  automatisch diesem Job übergeben.
Genauso erhält der Job die Variable #urS mit dem Suchbefehl, der die aktuelle Ergebnismenge bildet. Diese wird hier nicht benutzt, man hat sie aber in jedem solchermaßen eingebundenen Job zur Verfügung.
Der Job holt also dann den Satz, schreibt hinter dem Label _!_INF dessen Schlüssel (sk) und schaltet dann das Tab INF in a30 ein, damit der Text sofort sichtbar wird.
Man erkennt: Alles, was mit der avanti-Jobsprache gelöst werden kann, muß man nicht in a30 einbauen, sondern kann es auf die gezeigte Weise realisieren.

Noch direkter geht es für den Kenner mit dem Kommando  X jobname  in der Befehlszeile: einfach  X schluessel  eingeben. Genauso geht es ja in a99, wenn man FLEXe direkt aufrufen will.

Nochmals zum Grundprinzip (s.o.):
Es lassen sich so gut wie alle Funktionen von a30 auf  diese Weise auslösen!
Mit den diversen Buttons werden nur einige davon, die man des öfteren braucht, auf bequemere Weise bereitgestellt.

Wenn die Inhalte, die gezeigt werden sollen, statisch sind, d.h. sie stehen in einer Textdatei, kann man diese Datei auch mit dem Befehl  
h dateiname  
herbeiholen. Die darin evtl. eingebetteten Labels mit _!_ werden auch in diesem Fall entsprechend verarbeitet.
Beispiel:  h a30hsy.htm

ein Kapitel zurück zurück zum Inhaltsverzeichnis ein Kapitel vor



[i] zuletzt aktualisiert: 06.05.2013
Email: ub@tu-bs.de