- <itemizedlist>
- <listitem>
- <para>Hashref (evtl später Objekt)</para>
- </listitem>
-
- <listitem>
- <para>Wird pro Request neu initialisiert.</para>
- </listitem>
-
- <listitem>
- <para>Keine Unterstruktur garantiert.</para>
- </listitem>
- </itemizedlist>
-
- <para><varname>$::request</varname> ist ein generischer Platz um
- Daten "für den aktuellen Request" abzulegen. Sollte nicht für action
- at a distance benutzt werden, sondern um lokales memoizing zu
- ermöglichen, das garantiert am Ende des Requests zerstört
- wird.</para>
-
- <para>Vieles von dem, was im moment in <varname>$::form</varname>
- liegt, sollte eigentlich hier liegen. Die groben
- Differentialkriterien sind:</para>
-
- <itemizedlist>
- <listitem>
- <para>Kommt es vom User, und soll unverändert wieder an den
- User? Dann $::form, steht da eh schon</para>
- </listitem>
-
- <listitem>
- <para>Sind es Daten aus der Datenbank, die nur bis zum Ende des
- Requests gebraucht werden? Dann $::request</para>
- </listitem>
-
- <listitem>
- <para>Muss ich von anderen Teilen des Programms lesend drauf
- zugreifen? Dann $::request, aber Zugriff über
- Wrappermethode</para>
- </listitem>
- </itemizedlist>
- </sect3>
- </sect2>
-
- <sect2>
- <title>Ehemalige globale Variablen</title>
-
- <para>Die folgenden Variablen waren einmal im Programm, und wurden
- entfernt.</para>
-
- <sect3>
- <title>$::cgi</title>
-
- <itemizedlist>
- <listitem>
- <para>war nötig, weil cookie Methoden nicht als
- Klassenfunktionen funktionieren</para>
- </listitem>
-
- <listitem>
- <para>Aufruf als Klasse erzeugt Dummyobjekt was im
- Klassennamespace gehalten wird und über Requestgrenzen
- leaked</para>
- </listitem>
-
- <listitem>
- <para>liegt jetzt unter
- <varname>$::request->{cgi}</varname></para>
- </listitem>
- </itemizedlist>
- </sect3>
-
- <sect3>
- <title>$::all_units</title>
-
- <itemizedlist>
- <listitem>
- <para>war nötig, weil einige Funktionen in Schleifen zum Teil
- ein paar hundert mal pro Request eine Liste der Einheiten
- brauchen, und de als Parameter durch einen Riesenstack von
- Funktionen geschleift werden müssten.</para>
- </listitem>
-
- <listitem>
- <para>Liegt jetzt unter
- <varname>$::request->{cache}{all_units}</varname></para>
- </listitem>
-
- <listitem>
- <para>Wird nur in
- <function>AM->retrieve_all_units()</function> gesetzt oder
- gelesen.</para>
- </listitem>
- </itemizedlist>
- </sect3>
-
- <sect3>
- <title>%::called_subs</title>
-
- <itemizedlist>
- <listitem>
- <para>wurde benutzt um callsub deep recursions
- abzufangen.</para>
- </listitem>
-
- <listitem>
- <para>Wurde entfernt, weil callsub nur einen Bruchteil der
- möglichen Rekursioenen darstellt, und da nie welche
- auftreten.</para>
- </listitem>
-
- <listitem>
- <para>komplette recursion protection wurde entfernt.</para>
- </listitem>
- </itemizedlist>
- </sect3>
- </sect2>
- </sect1>
-
- <sect1 id="dokumentenvorlagen-und-variablen">
- <title>Dokumentenvorlagen und verfügbare Variablen</title>
-
- <sect2 id="dokumentenvorlagen-und-variablen.einführung">
- <title>Einführung</title>
-
- <para>Dies ist eine Auflistung der Standard-Dokumentenvorlagen und
- aller zur Bearbeitung verfügbaren Variablen. Eine Variable wird in
- einer Vorlage durch ihren Inhalt ersetzt, wenn sie in der Form
- <function><%variablenname%></function> verwendet wird. Für
- LaTeX- und HTML-Vorlagen kann man die Form dieser Tags auch verändern
- (siehe <xref
- linkend="dokumentenvorlagen-und-variablen.tag-style"/>).</para>
-
- <para>Früher wurde hier nur über LaTeX gesprochen. Inzwischen
- unterstützt Lx-Office aber auch OpenDocument-Vorlagen. Sofern es nicht
- ausdrücklich eingeschränkt wird, gilt das im Folgenden gesagte für
- alle Vorlagenarten.</para>
-
- <para>Insgesamt sind technisch gesehen eine ganze Menge mehr Variablen
- verfügbar als hier aufgelistet werden. Die meisten davon können
- allerdings innerhalb einer solchen Vorlage nicht sinnvoll verwendet
- werden. Wenn eine Auflistung dieser Variablen gewollt ist, so kann
- diese wie folgt erhalten werden:</para>
-
- <itemizedlist>
- <listitem>
- <para><filename>SL/Form.pm</filename> öffnen und am Anfang die
- Zeile "<command>use Data::Dumper;</command>" einfügen.</para>
- </listitem>
-
- <listitem>
- <para>In <filename>Form.pm</filename> die Funktion
- <function>parse_template</function> suchen und hier die Zeile
- <command>print(STDERR Dumper($self));</command> einfügen.</para>
- </listitem>
-
- <listitem>
- <para>Einmal per Browser die gewünschte Vorlage "benutzen", z.B.
- ein PDF für eine Rechnung erzeugen.</para>
- </listitem>
-
- <listitem>
- <para>Im <filename>error.log</filename> Apache steht die Ausgabe
- der Variablen <varname>$self</varname> in der Form <varname>'key'
- => 'value',</varname>. Alle <varname>key</varname>s sind
- verfügbar.</para>
- </listitem>
- </itemizedlist>
- </sect2>
-
- <sect2 id="dokumentenvorlagen-und-variablen.variablen-ausgeben">
- <title>Variablen ausgeben</title>
-
- <para>Um eine Variable auszugeben, müssen sie einfach nur zwischen die
- Tags geschrieben werden, also z.B.
- <varname><%variablenname%></varname>.</para>
-
- <para>Optional kann man auch mit Leerzeichen getrennte Flags angeben,
- die man aber nur selten brauchen wird. Die Syntax sieht also so aus:
- <varname><%variablenname FLAG1 FLAG2%></varname>. Momentan
- werden die folgenden Flags unterstützt:</para>
-
- <itemizedlist>
- <listitem>
- <para><option>NOFORMAT</option> gilt nur für Zahlenwerte und gibt
- den Wert ohne Formatierung, also ohne Tausendertrennzeichen mit
- mit einem Punkt als Dezimaltrennzeichen aus. Nützlich z.B., wenn
- damit in der Vorlage z.B. von LaTeX gerechnet werden soll.</para>
- </listitem>
-
- <listitem>
- <para><parameter>NOESCAPE</parameter> unterdrückt das Escapen von
- Sonderzeichen für die Vorlagensprache. Wenn also in einer
- Variablen bereits gültiger LaTeX-Code steht und dieser von LaTeX
- auch ausgewertet und nicht wortwörtlich angezeigt werden soll, so
- ist dieses Flag sinnvoll.</para>
- </listitem>
- </itemizedlist>
-
- <para>Beispiel:</para>
-
- <programlisting><%quototal NOFORMAT%></programlisting>
- </sect2>
-
- <sect2 id="dokumentenvorlagen-und-variablen.verwendung-in-druckbefehlen">
- <title>Verwendung in Druckbefehlen</title>
-
- <para>In der Admininstration können Drucker definiert werden. Auch im
- dort eingebbaren Druckbefehl können die hier aufgelisteten Variablen
- und Kontrollstrukturen verwendet werden. Ihr Inhalt wird dabei nach
- den Regeln der gängigen Shells formatiert, sodass Sonderzeichen wie
- <function>`...`</function> nicht zu unerwünschtem Verhalten
- führen.</para>
-
- <para>Dies erlaubt z.B. die Definition eines Faxes als Druckerbefehl,
- für das die Telefonnummer eines Ansprechpartners als Teil der
- Kommandozeile verwendet wird. Für ein fiktives Kommando könnte das
- z.B. wie folgt aussehen:</para>
-
- <programlisting>send_fax --number <%if cp_phone2%><%cp_phone2%><%else%><%cp_phone1%><%end%></programlisting>
- </sect2>
-
- <sect2 id="dokumentenvorlagen-und-variablen.tag-style"
- xreflabel="Anfang und Ende der Tags verändern">
- <title>Anfang und Ende der Tags verändern</title>
-
- <para>Der Standardstil für Tags sieht vor, dass ein Tag mit dem
- Kleinerzeichen und einem Prozentzeichen beginnt und mit dem
- Prozentzeichen und dem Größerzeichen endet, beispielsweise
- <function><%customer%></function>. Da diese Form aber z.B. in
- LaTeX zu Problemen führen kann, weil das Prozentzeichen dort
- Kommentare einleitet, kann pro HTML- oder LaTeX-Dokumentenvorlage der
- Stil umgestellt werden.</para>
-
- <para>Dazu werden in die Datei Zeilen geschrieben, die mit dem für das
- Format gültigen Kommentarzeichen anfangen, dann
- <function>config:</function> enthalten, die entsprechende Option
- setzen und bei HTML-Dokumentenvorlagen mit dem Kommentarendzeichen
- enden. Beispiel für LaTeX:</para>
-
- <programlisting>% config: tag-style=($ $)</programlisting>
-
- <para>Dies würde Lx-Office dazu veranlassen, Variablen zu ersetzen,
- wenn sie wie folgt aussehen: <function>($customer$)</function>. Das
- äquivalente Beispiel für HTML-Dokumentenvorlagen sieht so aus:</para>
-
- <programlisting><!-- config: tag-style=($ $) --></programlisting>
- </sect2>
-
- <sect2 id="dokumentenvorlagen-und-variablen.zuordnung-dateinamen">
- <title>Zuordnung von den Dateinamen zu den Funktionen</title>
-
- <para>Diese folgende kurze Auflistung zeigt, welche Vorlage bei
- welcher Funktion ausgelesen wird. Dabei ist die Dateiendung
- "<filename>.ext</filename>" geeignet zu ersetzen:
- "<filename>.tex</filename>" für LaTeX-Vorlagen und
- "<filename>.odt</filename>" für OpenDocument-Vorlagen.</para>
-
- <variablelist>
- <varlistentry>
- <term><filename>bin_list.ext</filename></term>
-
- <listitem>
- <para>Lagerliste</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><filename>check.ext</filename></term>
-
- <listitem>
- <para>?</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><filename>invoice.ext</filename></term>
-
- <listitem>
- <para>Rechnung</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><filename>packing_list.ext</filename></term>
-
- <listitem>
- <para>Packliste</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><filename>pick_list.ext</filename></term>
-
- <listitem>
- <para>Sammelliste</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><filename>purchase_delivery_order.ext</filename></term>
-
- <listitem>
- <para>Lieferschein (Einkauf)</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><filename>purcharse_order.ext</filename></term>
-
- <listitem>
- <para>Bestellung an Lieferanten</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><filename>request_quotation.ext</filename></term>
-
- <listitem>
- <para>Anfrage an Lieferanten</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><filename>sales_delivery_order.ext</filename></term>
-
- <listitem>
- <para>Lieferschein (Verkauf)</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><filename>sales_order.ext</filename></term>
-
- <listitem>
- <para>Bestellung</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><filename>sales_quotation.ext</filename></term>
-
- <listitem>
- <para>Angebot an Kunden</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><filename>zahlungserinnerung.ext</filename></term>
-
- <listitem>
- <para>Mahnung (Dateiname im Programm konfigurierbar)</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><filename>zahlungserinnerung_invoice.ext</filename></term>
-
- <listitem>
- <para>Rechnung über Mahngebühren (Dateiname im Programm
- konfigurierbar)</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </sect2>
-
- <sect2 id="dokumentenvorlagen-und-variablen.dateinamen-erweitert">
- <title>Sprache, Drucker und E-Mail</title>
-
- <para>Angeforderte Sprache und Druckerkürzel in den Dateinamen mit
- eingearbeitet. So wird aus der Vorlage
- <filename>sales_order.ext</filename> bei Sprache
- <function>de</function> und Druckerkürzel <function>lpr2</function>
- der Vorlagenname <filename>sales_order_de_lpr2.ext</filename>.
- Zusätzlich können für E-Mails andere Vorlagen erstellt werden, diese
- bekommen dann noch das Kürzel <filename>_email</filename>, der
- vollständige Vorlagenname wäre dann
- <filename>sales_order_email_de_lpr2.ext</filename>. In allen Fällen
- kann eine Standarddatei <filename>default.ext</filename> hinterlegt
- werden. Diese wird verwendet, wenn keine der anderen Varianten
- gefunden wird.</para>
-
- <para>Die vollständige Suchreihenfolge für einen Verkaufsauftrag mit
- der Sprache "de" und dem Drucker "lpr2", der per E-Mail im Format PDF
- verschickt wird, ist:</para>
-
- <orderedlist>
- <listitem>
- <para><filename>sales_order_email_de_lpr2.tex</filename></para>
- </listitem>
-
- <listitem>
- <para><filename>sales_order_de_lpr2.tex</filename></para>
- </listitem>
-
- <listitem>
- <para><filename>sales_order.tex</filename></para>
- </listitem>
-
- <listitem>
- <para><filename>default.tex</filename></para>
- </listitem>
- </orderedlist>
-
- <para>Die kurzen Varianten dieser Vorlagentitel müssen dann entweder
- Standardwerte anzeigen, oder die angeforderten Werte selbst auswerten,
- siehe dazu <xref
- linkend="dokumentenvorlagen-und-variablen.allgemeine-variablen.meta"/>.</para>
- </sect2>
-
- <sect2 id="dokumentenvorlagen-und-variablen.allgemeine-variablen">
- <title>Allgemeine Variablen, die in allen Vorlagen vorhanden
- sind</title>
-
- <sect3 id="dokumentenvorlagen-und-variablen.allgemeine-variablen.meta"
- xreflabel="Metainformationen zur angeforderten Vorlage">
- <title>Metainformationen zur angeforderten Vorlage</title>
-
- <para>Diese Variablen liefern Informationen darüber welche Variante
- einer Vorlage der Benutzer angefragt hat. Sie sind nützlich für
- Vorlagenautoren, die aus einer zentralen Layoutvorlage die einzelnen
- Formulare einbinden möchten.</para>
-
- <variablelist>
- <varlistentry>
- <term>template_meta.formname</term>
-
- <listitem>
- <para>Basisname der Vorlage. Identisch mit der <link
- linkend="dokumentenvorlagen-und-variablen.zuordnung-dateinamen">Zurordnung
- zu den Dateinamen</link> ohne die Erweiterung. Ein
- Verkaufsauftrag enthält hier
- <constant>sales_order</constant>.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>template_meta.language.description</term>
-
- <listitem>
- <para>Beschreibung der verwendeten Sprache</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>template_meta.language.template_code</term>