a30-Fortbildung

18. FreiRaum

    2010-07-16
----> Vollständige FreiRaum-Doku
18. Rezepte für den Umgang mit der neuen Freiheit

Es gibt überraschend viele Möglichkeiten, den FreiRaum zu nutzen - aber hätte er sonst diesen Namen verdient?
Hier sind die Grundrezepte. (Am Ende eine Übersicht zu den Dateistandorten)

1.1 Schnellschuß
An den Anfang gehört ein erhellendes Erfolgserlebnis.
Dazu gehen wir zur DemoBank, um ein Mini-Experiment zu machen:

http://www.biblio.tu-bs.de/db/a30/demo.htm

Dann kopieren Sie mit Copy&Paste diese Zeile

_!_FRE \nBU Info|a30dbi_!_SET FRE Test


in das Befehlsfeld von a30, und Enter.
Der FreiRaum öffnet sich, zu sehen ist aber nur ein kleiner Button, auf dem "Info" steht.
Ein Klick auf denselben öffnet das Tab "Info" und darin zeigt sich die "Info zur Datenbank", die von dem Job  a30dbi.job  erzeugt wird.
Mit der scheinbar kryptischen Befehlszeile haben wir dem Programm einen "Datenstrom" manuell übergeben, der ihm folgendes mitteilt.
(Das \n heißt "neue Zeile"; vor _!_ braucht es nicht zu stehen)
Die Zeile besteht aus drei Befehlen:

Befehl                       Bedeutung für a30
_!_FRE                   Achtung, nachfolgend kommen Befehle für den
                               FreiRaum. Das Tab erscheint, aber mehr noch nicht
BU Info|a30dbi      Setzt einen Button, auf dem "Info" steht und
                              der den Job  a30dbi.job  starten soll
_!_SET FRE Test    Macht den FreiRaum sichtbar und
                              schreibt "Test" auf das Tab

1.2 Zweiter Schnellschuß
Nun ein Beispiel mit zwei weiteren Befehlen: Textfeld und Eingabefeld:

_!_FRE \nTE Register:|80\nIN VurS|140\nBU Get|a30ind_!_SET FRE

Auch das ist schnell erklärt: (Anfang und Ende wie oben)
TE Register:|80      TExtfeld mit 80 px Länge; der Text erscheint ganz oben
                      links (da fängt's immer an im FreiRaum)
IN VurS|140          Ein INputfeld von 140 Pixel Länge.
                      Was da eingegeben wird, kommt in #urS
BU Reg|a30ind        BUtton mit Aufschrift Reg, startet
                      Job a30ind, übergibt ihm  #urS

In dem Eingabefeld kann man z.B. vor dem Klicken des Buttons eingeben:
    per shakespeare
Mit der Schnellschußmethode geht's natürlich in der Praxis nicht, die ist nur für ganz kleine Testzwecke gedacht.

2. Formular als Textdatei
Dasselbe Beispiel können wir auch als Datei anlegen mit dem Namen  test2.txt  im Skriptordner (wo die PHP-Dateien der Datenbank liegen):
//     Datei  test2.txt
_!_FRE3
TE Register:|80
IN VurS|120      
TT Eingabe z.B.: per shakespeare
BU Get|-a30ind
_!_SET FRE Test2

So eine Datei kann man hernach viel leichter ausbauen und testen. Ziffer 3 bewirkt, daß das Formular in einem eigenen FreiRaum-Fenster mit Nummer 3 erscheint.
Das
- vor dem Jobnamen a30ind  bewirkt, daß das Fenster 3 unsichtbar gemacht wird.
Die Zeile mit TT produziert einen ToolTip für das Eingabefeld.
Diese Form eignet sich für satzunabhängige Formulare, also immer dann, wenn keine Inhalte der Datenbank in das Formular einzubauen sind. Ein Beispiel dafür ist auch  find.txt, mit dem ein Suchformular dargestellt wird.

Die Textdatei kann man holen lassen mit dem Befehl   h test2.txt,  oder in einen event:-Link packen:

<a href="event:test2.txt">Test2</a>

etwa in der Datei  a30men.htm  oder einer anderen solchen Datei. 

3. Formular als FreiRaum-Liste
Kürzer und bequemer ist es, wenn wir eine FreiRaum-Liste machen!
Diese schreibt man in der intuitiven Einfachstnotation, die extra für den FreiRaum entwickelt wurde.
Man macht eine Datei  test2.frl, aufzulegen im Datenordner der Datenbank:

#urS
Registerstelle:
+Button Get|-a30ind

Nur zwei Zeilen also! Ist diese Datei angelegt, starten wir sie manuell mit

X freiraum--VuFR=test2.frl

Der Universaljob  freiraum.job  macht dann aus  test2.frl  genau das, was oben steht, und gibt es an a30.
Achtung: Eine FreiRaum-Liste einfach so im Datenstrom an a30 zu geben, das bringt nichts! Man muß den freiraum.job die Arbeit machen lassen.

Aus einer HTM-Datei geht's aber besonders bequem (der freiraum.job  wird dann automatisch bemüht):

<a href="event:F test2">Test2</a>

4. Formular aus irgendeinem Job heraus erscheinen lassen
Die Zeilen der Textdatei kann man auch innerhalb eines Jobs erzeugen, der noch beliebige andere Aufgaben erledigt:

...
wri "_!_FRE" n
wri "TE Register:" n
wri "IN VurS|120" n
wri "BU reg|a30ind" n
wri "_SET FRE Regist" n
...

Das ist deutlich mehr Schreibarbeit und man muß mehr aufpassen, vor allem das n am Zeilenende nicht vergessen.
Bei diesen Zeilen ist der Datenstrom, der an a30 geht, exakt gleich! (a30 sieht nicht  wri "_!_FRE" n, sondern nur  _!_FRE)

5. Kombination Job + Textdatei
Eine Textdatei wie in 2. kann man auch in einen Job mit einbauen, aber dann muß sie im Datenordner liegen:
...
var "F" D "test2.txt"
write
...

Nützlich ist das, wenn man dasselbe Formular in verschiedene Jobs einbeziehen will.
Genauso kann man auch andere statische Teile von Jobdateien in Textdateien auslagern und einbeziehen; das ist also eine "include"-Variante. (Statische Teile sind solche, in denen keine Datenbankzugriffe vorkommen.)

6. Einbau ins Menü  (s. Fortbildung Kap.5)
a) Textdatei : Eine auf dem Skriptverzeichnis liegende Textdatei  test2.txt  bindet man so ein:
wri '<menuitem label="Test2" data="h test2.txt"/>'
b) Job: Dazu ist die allgemeine Form diese (ob der Job nun ein Formular macht oder was auch immer):
wri '<menuitem label="Test2" data="X jobname"/>'

7. Einbau in die Anzeigeparameter
Wenn es darum geht, zum aktuellen Datensatz ein spezifisches Formular zu präsentieren, baut man dessen Abruf am besten in die Anzeigeparameter ein, mit denen die Anzeige unter dem Tab  "Extra" erzeugt wird.
Standardparameter für das A-Schema ist die Datei  d-a30.apr + d-k.apt.
Sagen wir, zum aktuellen Satz soll das Formular "Sonderbearbeitung" angeboten werden, das in einer FreiRaum-Liste  sonder.frl  notiert ist. So bindet man es in die Parameter ein, an beliebiger Stelle:

#t{ C '<a href="event:F sonder">Sonderbearbeitung</a>' }

Der Linktext, hier "Sonderbearbeitung", ist natürlich vollkommen frei.
Soll statt Text ein Icon den Hyperlink darstellen, z.B. extra.gif, dann statt dessen

#t{ C '<a href="event:F sonder"><img src="extra.gif"></a>' }

Das Icon muß dann im Skriptordner liegen, wo ja auch die HTML-Dateien zur Datenbank liegen müssen. (Der Text, den a30 unter "Extern" zeigen soll und der von den Parametern generiert wird, ist aus Sicht des Programms eine HTML-Datei.)
Zu jedem Datensatz kann man mehrere solche Links generieren.


Wenn es sich um einen Job handelt, der das Formular generiert, z.B.  sonder.job, dann schreibt man  
event:X sonder  statt  event:F sonder.  

Steckt das Formular in einer Textdatei (d.h. es ist satzunabhängig), z.B.  find.txt, dann:

#t{ C '<a href="event:find.txt">Suchbefehlsformular</a>' }

also ohne einen Befehlsbuchstaben vor  find.txt, weil eine solche Datei unverändert an a30 gegeben wird, ohne Zugriff auf die Datenbank.
Achtung: Job- und Textdateien liegen unter dem Skriptordner, nicht im Datenbankordner.

Dateistandorte
Hier noch ein Überblick, wo die verschiedenen Dateien zu liegen haben:

Skriptordner (.php, .htm, .txt)
c:\xampp\htdocs\demo


Jobordner
(.job)
c:\xampp\htdocs\demo\djobs
Dann muß in der Datei  a30_ini.php  die Angabe  $Jobdir="djobs/"  stehen.

Datenbankordner  (.frl, .apr, .apt)
c:\allegro\demo2
Dazu muß in der Datei  avanti.con  die Angabe  directory = c:\allegro\demo2  stehen.

Hiermit hat man das gesamte Rüstzeug beisammen, um sich im FreiRaum austoben zu können.



B.Eversberg, 2010-04-07 / 2010-07-16