[Allegro] Vb.302 : Formulartechnik mit a35

Bernhard Eversberg b-eversberg at gmx.de
Fr Okt 19 12:06:28 CEST 2018


Verlautbarung 302 zur allegro-Entwicklung                    2018-10-19
-----------------------------------------

Formulartechnik mit a35
-----------------------

Katalogisierung per Browser wird immer mehr zur Methode der Wahl.
Systeme, die das nicht bieten, geraten ins Abseits. Administratoren
bevorzugen Systeme, die 
1. beim Mitarbeiter nur einen Standard-PC mit Internetzugang brauchen
2. keinerlei Installationen auf dem PC von Mitarbeitern fordern.
Diese steilen Anforderungen können nur browserbasierte Anwendungen
erfüllen. Heute ist das definitiv Mainstream.
Nun denn, mit a35 kann allegro solchen Ansprüchen entgegenkommen, das
ist inzwischen bekannt. Das Hauptproblem dabei:
Eingabe und Bearbeitung von Daten braucht Formulare. 

Grundsätzlich ist es möglich, in a35 per FLEX-Job ein komplettes HTML-
Formular für die Eingabe und Bearbeitung von Datensätzen zu erzeugen.
Das ist jedoch eine trickreiche Sache, und es wird richtig aufwendig 
und kenntnislastig, wenn man mehrere verschiedene Formulare braucht. 
Beispiele dafür in PHPAC waren form1.job und form2.job. Für den
praktischen Einsatz bei unterschiedlichsten lokalen Anforderungen war
diese Methodik jedoch nicht besonders geeignet.

Als erster neuerer Ansatz zur Formularerstellung war  autoform.php  
entstanden (2009), im Projekt a30. Darin wurde on-the-fly ein Job 
innerhalb eines PHP-Skripts erstellt. Eine unangenehm verzwickte Sache,
weil zwei ganz verschiedene Sprachen darin verquickt sind. Wer damit 
etwas konfigurieren will, muß beide gut kennen und sehr aufpassen mit 
den Anführungszeichen und anderen Sachen.

Im Nachfolgeprojekt a35 (ab 2012) wurde dieser Ansatz aufgegeben und
ein neuer erarbeitet. Zentrale Komponente ist "freeform.job", ein
FLEX-Skript für acon, dem man als Vorgabe für ein konkretes Formular
eine sehr einfache Formular-Definitionsdatei (Typ .frf) übergibt. Die
wird dann interpretiert und das komplette HTML-Formular draus gemacht.

Der freeform.job wird von ajax4.php gestartet, genau wie jeder andere Job. 
Übergeben wird ihm nur der Name der .frf-Datei. 
In den freeform.job braucht kein Anwender einzugreifen, in ajax4.php auch
nicht, sondern NUR in die Formular-Definitionsdateien .frf, und die 
erfordern weder PHP- noch FLEX-Wissen: Sowohl in ajax4.php wie auch 
freeform.job braucht man nichts zu tun, sie sind universell für alle Datenbanken.

Bei der Anwendung in konkreten Projekten hat sich ergeben, daß ein paar
wenige Ergänzungen noch sinnvoll waren. Diese haben jetzt das Teststadium
hinter sich und die DemoBank zeigt schon ein Ergebnis:

DemoBank :  http://www.allegro-b.de/db/demo2/

Wenn ein Satz angezeigt wird, gibt es einen Link "EDIT", mit dem eine
Formulardefinition  buch.frf  auf den aktuellen Satz angewendet wird.

Jetzt kommt nur noch die Frage:
Wie sehen diese Formular-Definitionen aus? 
Ein ganz kleines Beispiel ist unten im ANHANG zu sehen.
Die vollständige Beschreibung steht in dieser Doku:
  http://www.allegro-b.de/download/doku/aconflex.htm#part5

Der freeform.job entstand 2015. Es wurden noch ein paar Erweiterungen 
eingebaut, um die Sache noch flexibler zu machen,

Neu sind:

  Formularfeld nur anbieten, wenn das Feld im Satz belegt ist
##nnn ...    sonst kein Formularfeld dafür machen.
  (kann nur sinnvoll sein, wenn ein Satz *bearbeitet* werden soll,
   nicht für die *Neu-Erfassung* von Sätzen) 

#nnn -1 >mark<
   Wenn #nnn belegt ist, wird an dieser Stelle kein Formularfeld erzeugt,
   aber zur Sprungmarke  <mark  gesprungen
   (Wo -1 steht, da steht sonst die Feldbreite, die dann keinen Sinn macht.

Auch wichtig sein kann der "Unbedingte Sprung" - der passiert in jedem Fall,
und zwar egal welche Felder belegt oder nicht sind

>mark    Springe von hier zur Zeile  <mark :

<mark    Diese Zeile ist die Sprungmarke, sie kann auch oberhalb stehen.

 Achtung: beide Sprünge beziehen sich auf den Vorgang beim Aufbauen des
 Formulars, sie haben nichts zu tun mit der Eingabe! Zum Zeitpunkt der
 Eingabe ist das Formular schon fertig aufgebaut und ändert sich nicht.
 Anders gesagt: Der Aufbau des Formulars kann vom Typus und Inhalt des 
 Satzes abhängen.

ACHTUNG Änderung: (wegen der neuen Sprungfunktion)

#nnn ... ;placeholder;
   Jetzt mit Semikolon vorn und hinten statt bisher  >placeholder<
   Wer so etwas verwendet hat, muß das leider ändern.

So kann man nun ganz nach Bedarf bedingte und unbedingte Sprünge 
einbauen. Damit ist erreicht, mit nur *einer* .frf-Datei für
unterschiedliche Satztypen auch unterschiedliche Formularinhalte
erzeugen zu können.

Mit  X gf freeform.job  kann man sich das Skript holen. Es gehört in 
den Ordner  ...scripts/jobs  der a35-Installation,
Verbesserungen waren aber auch zu machen in a35.js und ajax4.php.
Das Paket  a35.zip  wurde um alle aktualisierten Dateien 
bereichert:
  http://www.allegro-b.de/download/a35.zip

Zusatz-Tip: (in der Demo zu sehen und auszuprobieren)
In den a35get.job kann man sich folgende Zeile einbauen, diese läßt
dann einen Link "EDIT" in der Anzeige erscheinen:
wri '<div style="text-align:right;"><a href="javascript:reqJob(' 39 'freeform&Ddiv=FRE' 39 ');"><b>EDIT</b></a></div>'
und zwar direkt über dieser Zeile im a35get.job:
// Anz.param laden (Name steht in $Dispar in ajax4ini.php)
Genau solche Links kann man auch in das Menü einbauen.

Dann wird in der Titelanzeige oben rechts "EDIT" eingeblendet, und beim 
Klick darauf kommt das Formular "freeform.frf" - falls man eins hat. 
Soll es ein anderes sein mit Namen xyz.frf, dann den Link so ergänzen:
   ...&Ddiv=FRE&Dform=xyz...
Das Formular hat ohne vorheriges Login nur den Button "Test", sonst 
auch "Save".

ANHANG
------
Aufgabe: Ein kleines Formular, mit dem nur drei Felder für die Sach-
erschließung zur Bearbeitung angeboten werden sollen.
Die Formulardefinition dafür wäre z.B. eine Datei  se.frf  mit nur vier 
Zeilen, und daraus macht der freeform.job das fertige Formular:

//  Überschrift:  
H "Sachdaten zu: " #20(e":") "..."

//  Datenfelder für die Bearbeitung
#30a "Notation"
#31s "Sach-SW"
#31p "Personen-SW"

Manuell aufrufen kann man es mit dieser Eingabe im roten Rahmen:
X freeform&Dform=se
Will man das Formular in einem Extra-Fenster haben, dann 
X freeform&Dform=se&Ddiv=FRE  (oder auch FRL oder FRR statt FRE)

-----------------------------------------------------------------

Die o.g. buch.frf ist natürlich etwas länger:

Headline #20(u 0,30) "..."

#20 "TITEL:"
#0c.1 300 "Inhaltstyp" =Ctype=
#40 "Verf.Name:"
#75 200 "Verlag:"
+#76 50 "Jahr:" ;Jahr; 
#74$$ 200 "Ersch.Ort:"
+#74$g 50 "Land:"
#77 50 "Umfang" NOCOPY 
+#77.1 240 "Datenträger" =Mtype= 
#87 100 "ISBN:"
+#71 209 "Auflage:"
#85 "Serie:"

#90 "Signatur:"
#30a 80 "Sachgruppe:"
#37 60 "Sprache:" %value=ger%
#8e "URL: "
#41 "Hrsg.: "
#42 "Mitarb.: "
#43 "Bearb.: " 
#61 "beteil.  Körp.: "
#91 " Zug.Nr.: " ;NUMMER;
#31+ "Schlagwörter " ;#31.X;






Mehr Informationen über die Mailingliste Allegro