allegro
Wie arbeitet a35?
2020-08-07


Alle Quellcodes (Dateien der Typen .js, .css, .htm, .php, .job etc.) sind freigegeben, daher können Anwender die Oberfläche von a35 in jeder Einzelheit ändern und neue Funktionen für beliebige eigene Zwecke einbauen.
Hinweis: Mehr zu dem Zusammenhang mit dem avanti-Server, dem Konsolprogramm acon und der Skriptsprache FLEX findet man in einem eigenen Tutorial in englischer Sprache: http://www.allegro-b.de/doku/aconflex.htm.

1. Aufruf
Gestartet wird a35 aus einer PHP-Datei heraus, in die alles Nötige eingebaut ist.
Und zwar gibt es drei Startdateien für drei Gerätetypen:
a35-pc.php    für Desktop-Browser
a35-tab.php   für Tablets
a35-app.php   für SmartPhones

Jeweils zugehörige Dateien enthalten das Menü (z.B. a35-pc-menu.php) und die Oberflächenelemente (z.B. a35-pc-cont.php). Alle Teile kann man modifizieren, bes. die Menüdatei.
Hinweis: Die  a35-app.php  ist keine App - sie funktioniert deshalb im iPhone und in Android-Smartphones.

 

2. Start von a35
Dazu wird schlicht eine der genannten PHP-Dateien im Browser aufgerufen. (Zum Testen kann man auf einem PC auch die Tablet- bzw. SmartPhone-Version aufrufen und benutzen.)


Nach dem Start ist das Grundprinzip dieses:
a35 erhält vom Server bei jeder Aktion einen Strom von Textdaten, der gegliedert ist durch Labels der Form _!_
XYZ. Diese dreibuchstabigen Codes beziehen sich jeweils auf eines der Elemente von a35, z.B. ERG für den Ergebnismengen-Quadranten (bzw. das entsprechende Tab bei Tablet und SmartPhone).
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 Quadranten-Felder) oder um einen jeweils für das Ziel-Element geeignet strukturierten Text, z.B. Formulardaten.


5. Start der Funktion (falls allegro-Datenbank: Aufklappen des Registers)
Bei der Registersuche z.B. wird das Skript  a35ind.job gestartet, und zwar mit dem logischen Registernamen und Suchbegriff als Argument  VurS, d.h. es erfolgt ein Aufruf
.../ajax4.php?JOB=a35ind&VurS=PER goethe
Dann wird ein Ausschnitt des gewählten Registers gezeigt, mit anklickbaren Zeilen für den Zugriff auf die zugehörigen Daten. Im  a35ind.job  kommt die Variable  VurS  an als #urS. Genauso funktioniert es bei jedem Job, und es können auch mehrere solche Variablen übergeben werden. Auch $-Variablen kann man übergeben, und zwar wird aus  &Dabc  die Variable  $abc. (V statt # und D statt $ sind notwendig, weil man die Zeichen # und $ in solchen Aufrufen nicht verwenden kann.)

5.1 Registerwechsel
Wählt man über die Combo-Box ein anderes Register
, so wird aus der gerade angezeigten Registerliste die erste Zeile genommen und damit das Skript  a35ind.job  wieder gestartet, also z.B. mit  &VurS=TIT text.

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 die JavaScript-Funktion  reqLoad(satznummer) bei Einzeltreffer bzw. reqRes(suchbefehl) bei mehr als einem, und diese aktiviert den Job
a35get.job mit VuRN=inum     // Indexzeile mit Anzahl 1
  bzw.
a35erg.job mit VurF=reg text   //  Indexzeile mit mehr als 1
wobei  reg  der logische Registername ist bzw. der gewählte Funktionsname der Anwendung.

7a) Satzanzeige
Das Skript  a35get.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-khtm.apr (mit d-k.apt). Aber man kann im  a35get.job  den Export auch ohne Parameter machen, einfach mit write-Befehlen.

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

Das Skript liefert die Ergebnisliste so aus:  _!_ERG Kurzlistentext
Die Gestaltung der Kurzliste ist im Skript  a35erg.job  variierbar.

8) Wahl einer Zeile aus der Kurzliste
Hinter den Kurzzeilen stecken Aufrufe von  a35get.job  mit der internen Nummer des betr. Satzes., jeweils  mit  &VurN=interneNr  als Argument, ganz wie in 7a).

Wichtiger Tip zum Testen: Was die Skripte genau liefern, kann man studieren, indem man sie manuell aufruft, z.B. so:
.../demo/ajax4.php?JOB=a35erg&VurI=PER shakespeare, william
oder
.../demo/ajax4.php?JOB=a35get&VurN=256
Man sieht dann den Ergebnistext, so wie er bei a35 ankommt. Ein Blick in den Quelltext, und man sieht alle Einzelheiten. Das Skript  ajax4.php  sendet jeden Job zusammen mit dessen Argumenten an avanti und nimmt die Ergebnisse entgegen, um sie an den Browser weiterzureichen. Im Browser ist es die Funktion  receivE(), die für das Einordnen der Inhalte in die verschiedenen Bereiche (Quadranten etc.) zuständig ist:

Die Tabs
Den größten Raum nehmen die 4 "Quadranten" bzw. bei Tablet und Smartphone wahlweise einschaltbaren "Tab"-Bereiche ein. Was darin erscheint, ist allein die 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 : Aufbereitete Anzeige desselben Datensatzes mit Parameterdatei  d-khtm.apr
   Zwischen INT und EXT wird mit F5 umgeschaltet (wie in a99)
INF = Info : Gedacht zur Anzeige beliebiger Textinformation (HTM-Format), die auch Hyperlinks enthalten kann
ERG = Ergebnismenge : Zeigt die Kurztitelliste der aktuellen Ergebnismenge
REG = Indexregister : zum Blättern in den alphabetischen Registern und Auswahl von Titeln zur Anzeige


Wenn ein Skript z.B.  mit  _!_INF ...  etwas in das Info-Tab schreibt, wird es in dem Quadranten bzw. unter dem Tab sichtbar gemacht, denn der Bereich ist markiert mit  <div id="INF">.

Im Tab "Intern" gibt es oben über dem Datensatz drei Funktionen, wenn man eingeloggt ist:
   Edit : ausgelöst wird damit  presto.job
   Copy : desgl, aber mit uRN=0
   Del :  a35del.job  aber zuerst wird zwecks Bestätigung gefragt: "Wirklich?"
 

Das Menü  (Datei a35-pc-menu.php bzw. a35-tab-menu.php)
Im  Hauptfenster von a35 befindet sich oben in der Mitte ein Menü. Dies ist nicht als definitiv und unveränderlich anzusehen, sondern im der genannten Datei leicht änder- und erweiterbar.
Die ausgelieferte Menüdatei umfaßt z.B. diese Funktionen: (Tip: Mauszeiger drauf, dann sieht man, was dahintersteckt.)

Suchen

Bearbeiten 


Die Menüdateien sind sehr übersichtlich. Hier ist der Punkt, wo es am einfachsten ist, eigene Funktionen einzubauen, denn man braucht dazu nichts in  PHP oder JavaScript zu schreiben.
Dazu gehören nur zwei Dinge:

1. Eine neue HTML-Zeile, die z.B. so aussieht
:

     
<li><a href="javascript:reqJob('jobname');">Eigene Funktion</a></li>

2. Eine Jobdatei namens  
jobname .job, in der die FLEX-Befehle für avanti stehen.

Eine solche Zeile kann man überall einbauen, sie kann in jedem Bereich der Oberfläche erscheinen. Ein ganz einfaches Beispiel nach diesem Muster: Die Funktion soll heißen "Schlüssel des aktuellen Satzes anzeigen", und sie soll im Tab-Feld "INF" eben die Liste dieser Schlüssel anzeigen. (In a99 macht das F7.)
So geht es:

1. In eine HTM-oder PHP-Datei diese Zeile einbauen, die den Job  keys.job  ausführt:

     <button type="button" onclick="javascript:reqJob('keys');">
F7</button>
      Damit entsteht ein Button mit der Aufschrift F7, der die Anzeige der Schlüssel des aktuellen Satzes auslöst:  

2. Eine Jobdatei namens  keys.job  anlegen (es gibt sie aber schon, nur mit mehr ), in der steht:
  var "#" #uRN
  find
  write "_!_INF Indexschl&uuml;ssel zum Satz " i ":<br><pre>"
  write sk n "</pre>"

Die Variable #uRN enthält die aktuelle Satznummer. Sie wird von ajax4.php automatisch diesem Job übergeben.
Genauso erhält der Job die Variable #urI 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  keys.job  holt also dann den Satz, schreibt hinter dem Label  _!_INF  dessen Schlüssel (sk), und a35 macht dann den Text im bereich INF  sofort sichtbar.
Man erkennt: Alles, was mit der avanti-Jobsprache gelöst werden kann, muß man nicht in a35 einbauen, sondern kann es auf die gezeigte Weise realisieren.

Noch direkter geht es für den Kenner mit dem Kommando  X jobname  im Befehlsfeld: z.B. einfach  X keys  eingeben. Die Jobdatei  jobname.job  wird dann zuerst im Jobordner der Datenbank gesucht, und wenn sie dort nicht ist, im Ordner  scripts/jobs.

Nochmals zum Grundprinzip (s.o.):
Es lassen sich so gut wie alle Funktionen von a35 auf diese Weise auslösen.
Mit den diversen Buttons werden nur einige davon, die man öfter mal 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 hierbei entsprechend verarbeitet.
Ausgefallenes Beispiel:  h labels.txt
Dann sieht man plötzlich in allen mit Labels versehenen Bereichen die Namen der Labels und kurze Erklärungen.


Wie kann man a35 ausbauen und modifizieren?

1. Die PHP-Skripte modifizieren, neue Skripte oder Jobdateien erstellen und in eigene HTM-Seiten (Dateien wie a35menu.htm) einbinden.

2. Die Startdateien selbst verändern sowie die Skripte a35.js und ajax4.php. Damit hat man noch viel mehr Möglichkeiten an der Hand, weil man die Oberfläche in allen Aspekten verändern, aber auch ganz neue Elemente und Funktionen einbauen kann. 






Für Hinweise, Korrekturen, Kritik -> B.Eversberg, ©2020