Wie funktioniert a35?

Kurz & bündig

Nach dem Aufruf, z.B. mit http://www.allegro-c.de/demo/a35-pc.php, sieht man zuerst ein Bild mit vier Quadranten: (ohne die roten Beschriftungen!)

a35 Doku-Bild

a35 sitzt dann quasi als Client  im Browser und wartet nur ständig auf Datenströme, die vom Server  kommen (abgesandt von den Programmen avanti + acon).

Ein Datenstrom  - wie sieht der aus? Es handelt sich immer um Zeichenfolgen, mal kurz, mal lang. Wenn so ein Datenstrom eingetroffen ist, dann sieht man noch nichts, denn er geht in einen Zwischenspeicher, und  dann erst  passiert das Wichtige: a35 sucht darin nach diesen drei Zeichen: _!_. Wenn es eine solche Sequenz findet, und dahinter drei Buchstaben, z.B. INF, dann nimmt es den Abschnitt, der hinter diesem „Label“ kommt, z.B. also hinter _!_INF , bis zum nächsten Label  _!_XYZ. Und was wird nun mit diesem Abschnitt aus dem Datenstrom? a35 schaut nach, ob es in seinem Innern ein Feld findet, das ein Attribut  id="INF" hat. Im Bild oben sieht man, welches Feld das ist. Der Inhalt dieses Feldes wird dann überschrieben durch den besagten Datenabschnitt und wird sichtbar. Dann kommt der nächste Abschnitt dran, bis zum nächsten Label _!_XYZ, usw.  Eins nach dem andern, aber das fällt nicht auf, weil es so schnell geht. (Für Programmierer: Diese ganze Arbeit mit dem Datenstrom macht die Funktion receivE()  in a35.js. Man braucht sie aber nicht zu ändern, wenn man eigene neue Labels einbaut in das Grundgerüst  a35-*-cont.php.)

Das ist alles! Im Vergleich zu HTML oder gar XML scheint das äußerst primitiv zu sein. Es ist aber so, daß der Inhalt eines Abschnitts eine komplette HTML5-Datei sein kann, mit allem drum und dran. (Meistens aber weniger aufwendig: nur eine Textdatei mit eingestreuten HTML-Auszeichnungen nur da, wo es sinnvoll ist.) Die Labels _!_ mit drei Buchstaben dahinter trennen also sozusagen eine Folge von Textdateien, die in dem Datenstom alle hintereinander angekommen sind. Die Labels bilden, könnte man sagen, eine ganz simple Superstruktur oberhalb HTML. (Warum gerade _!_ als Steuerzeichen - könnten die nicht auch ganz normal in einer HTML-Datei vorkommen? Theoretisch ja, praktisch haben wir sie aber in großen Mengen Dateien nirgends gefunden. Auch nicht, und das ist noch wichtiger, in z.B. Bibliotheksdatensätzen (Millionen MARC-Daten der LC und BL wurden durchsucht), denn solche können innerhalb von a35-Datenströmen vorkommen! Wer’s aber durchaus will, könnte auch eine andere, noch ausgefallenere Kombination nehmen, wie etwa >&>. Änderungen wären dann nötig in  a35.js  und in den Jobdateien.)

Das kann nicht alles sein, denken Sie jetzt? Wie geht's denn weiter, wie kommt die Dynamik zustande? Das geht so: Überall in den Abschnitten des Datenstroms können - es ist ja alles HTML  - wieder spezielle Links stecken, mit denen dynamisch neue Datenströme abgerufen werden, meistens erzeugt von Job-Skripten. Um also a35 neue Tricks beizubringen, braucht man die Oberfläche nicht zu ändern, braucht keine neuen Sachen in JavaScript und PHP zu schreiben, sondern nur neue Jobs. Nennt man einen Job z.B.  trick17.job,  dann läßt er sich sofort mit einem speziellen Link in dieser Form  
<a href="javascript:reqJob('trick17');">  
aktivieren.  Oder auch manuell direkt aufrufen mit  X trick17, siehe unten Punkt 2a/b.

Tip:
 In der a35-Demo den Mauszeiger auf einzelne Links oder Menüpunkte setzen, dann sieht man, wie solche "speziellen Links" gestaltet sind.

Kurz zusammengefaßt und ganz schematisch sieht also ein Datenstrom, den a35 bekommt, so aus (hier nur ein Ausschnitt):

..... _!_ERG Text1_!_INF Text2 _!_EXT Text3 _!_..........

Und a35 steckt dann den Text1 in das Feld ERG, Text2 in das Feld INF und Text3 in das Feld EXT. Ein Beispiel für einen solchen Datenstrom ist die Datei  a35start.htm, die a35 gleich nach seinem Start als ersten Datenstrom überreicht bekommt. Und in jedem Text können beliebige "spezielle Links" vorkommen. Einfach mal reinschauen in die Dateien und vergleichen, wie das im a35 dann ausschaut.

Wie aber kommen die „Datenströme“ denn zustande und wer sendet sie an a35? Sie kommen vom selben Webserver, aus dem a35 in den Browser geladen wurde. Der Webserver sendet nicht von sich aus Daten an den Browser sondern dazu braucht es einen Klick auf einen Link innerhalb des a35-Fensters oder  ein ausdrückliches Anfordern von Daten mit einem Direktbefehl:

Ein Direktbefehl  wird von Hand eingegeben, und zwar gibt es zwei Typen: 
h dateiname  (Datei-Aufruf)   und    X jobname (Job-Aufruf)
Beides ganz wie beim Windows-Programm a99, wenn Sie das kennen.
Dazu vier Beispiele, die Sie mit der Demobank sofort ausprobieren können:

1a. h a35examp.htm, dann wird direkt die Datei  a35examp.htm  an das a35 im Browser gesendet, und zwar als Datenstrom, den a35 dann in der beschriebenen Weise auseinandernimmt. In diesem Fall findet a35 darin nur ein einziges Label, nämlich  _!_INF, gefolgt von dem Text, den es  dann im Feld INF erscheinen läßt. Dieser Aufruf steckt auch hinter dem Menüpunkt "Datei / Link-Beispiele". Setzen Sie da den Mauszeiger drauf, um zu sehen, wie der spezielle Link zum Aufruf dieser Datei aussieht.

1b. h a35find.txt: Der Dateityp muß gar nicht .htm sein, trotzdem klappt's. Ein kleines Eingabeformular erscheint, mit dem man eine Suche starten kann. Dieser Aufruf findet sich auch hinter dem Menüpunkt "Datei / Simple Suche". 

2a. X a35dbi : Ruft die "Datenbank-Info" ab. Erstellt wird sie vom Job  a35dbi.job, der zum Standardumfang von a35 gehört. Dieser Aufruf liegt auch hinter dem Menüpunkt "Ansicht / Info zur Datenbank".

2b. X kalend : Fordert den Kalender für den aktuellen Monat an. Geliefert wird der vom Job  kalend.job, der auch zum Standardumfang von a35 gehört.
Wenn man genauer Bescheid weiß, kann man auch einen anderen Monat gezielt anfordern, z.B. so:  
  X kalend&Vuyr=1989&Vumo=11
 für den November 1989.
Hinter dem X kann der Name einer Jobdatei angegeben werden. Die wird dann ausgeführt, und was der Job ausgibt (mit write-Befehlen), das ist der Datenstrom, den a35  dann bekommt. Der Job ist also dafür zuständig, seinen Ausgabetext mit den korrekten Labels zu versehen. Wenn demnach im Job stünde:

write "_!_INF Dies ist eine Information_!_EXT <b>HALLO</b>"

Dann würden die Texte  Dies ist eine Information  bzw.  HALLO  anschließend in den Feldern INF  bzw.  EXT  erscheinen. Dieser Aufruf ist auch eingebaut in den Menüpunkt 

Fast alle Links, die man im a35-Fenster sieht, enthalten im Kern einen solchen Direktbefehl, meistens vom Typ 2. Das sind also Befehle, die irgendeinen Job starten. Das gesamte Menü ist zu finden in der Datei  a35-pc-menu.php. Darin findet man alle Arten von Beispielen für spezielle Datei- oder Job-Aufrufe. Es ist in HTML geschrieben und damit leicht zu modifizieren.

Ein Job ist zunächst eine Datei vom Typ .job - eine schlichte Textdatei, die aus Befehlen in der allegro-Sprache FLEX besteht. Und zwar ist es die avanti-Variante von FLEX. Die aktuelle Dokumentation können sie mit a99 studieren, sie gehört zum sog. „Gesamtpaket“ des allegro-Systems. (Auch die Demo-Version enthält die komplette, aktuelle FLEX-Dokumentation.) Ohne FLEX kann man von außen gar nicht auf eine allegro-Datenbank zugreifen! Wer also eine allegro-Datenbank ins Netz stellen will, kommt an FLEX nicht vorbei. Der wichtigste Punkt bei a35 ist eigentlich, daß man nur  FLEX braucht, d.h. Job-Dateien in dieser Sprache zu schreiben hat! Weder PHP noch JavaScript braucht man zu beherrschen, und mit HTML5 und CSS sind nur die Kenntnisse nötig, die ohnehin jeder besitzt, der für das Web etwas programmiert. Zum Glück sind die Grundfunktionen, die zur Anbindung einer allegro-Datenbank unbedingt gebraucht werden, alle schon im Standardpaket vorhanden. Man kann sie erst einmal fast alle unbesehen übernehmen und einsetzen. Z.B. produziert der Job  a35ind.job  die Registerseiten, die im Feld REG erscheinen, und a35get.job erstellt die Anzeige des Datensatzes, den man im Feld EXT zu sehen bekommt; zugleich die Anzeige des oben nicht sichtbaren Feldes INT, das hinter EXT liegt und mit F5 sichtbar wird.
Die Felder FRE und FRR werden nur bei Bedarf sichtbar, falls ein Label _!_FRE bzw. _!_FRR auftritt. Sie taugen, wie man oben sieht, vor allem für Eingabedialoge, die nicht ständig gebraucht werden.  Geben Sie bei der Demo z.B. mal dieses ein:    h a35find.htm.  Dann gucken Sie sich im Browser den Quelltext an, um das Label _!_FRR zu sehen und die speziellen Links im <form>-Bereich, die den Job a35fts.job bzw. a35erg.job aktivieren und ihm die Variablen des Formulars übergeben.
Für Fehler- und andere Meldungen gibt es ein Sonderfeld POP, mit dem man wichtige Mitteilungen erscheinen lassen kann. Dazu schreibt man im Job logischerweise nur  write "_!_POP Es ist ein Fehler aufgetreten!" oder sowas.

Letzte Frage: Wie funktionieren die zwei anderen Modelle, für Tablets und Smartphones? Genauso. Nur die Oberfläche ist anders angeordnet, darunter passiert dasselbe. Das bedeutet, man braucht nicht drei Varianten eines Jobs zu schreiben. Sondern was einmal funktioniert, das klappt in allen drei Modellen. Nur das PC-Modell hat vier gleichzeitig sichtbare Quadranten, die anderen haben "Tabs", die jeweils ein "Panel" einschalten, aber die entsprechen je einem Quadranten. Das Tab-Modell hat eine eigene Menüdatei namens a35-tab-menu.php, das  App-Modell hat beim Start kein Menü. Aber man kann eins aufrufen, das dann unter dem Tab "Extras" erscheint, wenn man in den roten  Rahmen unter dem Tab "Ergebnisse" eingibt  h a35-menu.htm. Man wird in dieser Datei natürlich nur solche Funktionen bereitstellen, die auf dem Mobiltelefon wirklich sinnvoll und erwünscht sind.



 

B.Eversberg 2014-05-04