[inhalt]
Projekt BISO 3 - Handbuch

Dynamische und formatierte Briefvorlagen

Briefvorlagen in BISO werden via Apache FOP PDF-Prozessor in ein PDF "verwandelt". Um den Apache FOP die notwendigen Daten zu liefern, sind von BISO folgende Dokumente notwendig:

BISO geht noch einen Schritt weiter: Auch das Datendokument wird vorprozessiert: Aus der Datenbank werden die Briefdaten (Inhalts-Abschnitte, Absender, Empfänger, Termindaten etc...) zusammengesucht, und das XML-Datendokument damit aufbereitet. Dies wird von der Template-Engine "Smarty" erledigt.

Dies hat den Vorteil, dass die Brievorlagen sehr dynamisch gestaltet werden können, und wir haben in BISO die Möglichkeit, die Briefvorlagen anhand von BISO-Daten zu verändern, ohne dass dazu Programmieraufwand notwendig ist.

Zusammengefasst wird ein PDF folgendermassen erstellt:

Ablauf PDF Erstellung

Brief-Abschnitte: Formatierungen

Brief-Abschnitte weden in BISO über die Werteliste "Brief-Vorlagen" definiert. Die Brief-Abschnitte unterstützen gewisse Auszeichnungs-Tags, um Texte zu formatieren. Auszeichnugs-Tags werden in spitzen Klammern um den auzuzeichnenden Text herum platziert (analog HTML):

Abschnitt mit Auszeichnungs-Tag

Folgende Auszeichnugs-Tags werden unterstützt:

Tag Bedeutung Beispiel
strong, b stellt Text fett dar <strong>Fetter Text</strong>
<b>Fetter Text</b>
i, em stellt Text kursiv dar <em>Kursiver Text</em>
<i>Kursiver Text</i>
u unterstreicht Text <u>unterstrichener Text</u>
super hochgestellter Text Quadratmeter: m<super>2</super>
sub tiefgestellter Text Wasser: H<sub>2</sub>O
inl_box umrandeter Text <inl_box>Dieser Text ist umrahmt</inl_box>

Beispiel-Abschnitt:

<strong>Fetter Text</strong>
<b>Fetter Text</b>
<em>Kursiver Text</em>
<i>Kursiver Text</i>
<u>unterstrichener Text</u>
Quadratmeter: m<super>2</super>
Wasser: H<sub>2</sub>O
<inl_box>Dieser Text ist umrahmt</inl_box>

Brief-Abschnitte: Aufzählungslisten

Ebenso wie Auszeichnungen können Aufzählungslisten definiert werden:

ungeordnete Liste:
<ul>
  <li>Eintrag 1</li>
  <li>Eintrag 2</li>
</ul>

geordnete Liste (Numerierung):
<ol>
  <li>Eintrag 1</li>
  <li>Eintrag 2</li>
</ol>

Brief-Abschnitte: Tabellen

Komplexer sind Tabellen, hier ein komplettes Beispiel:

<tgroup cols="2" width="150mm">
    <colspec column-number="1" colwidth="25mm" />
    <colspec column-number="2" colwidth="125mm" />
    <tbody>
        <row>
            <entry column-number="1"><p><strong>Wann:</strong></p></entry>
            <entry column-number="2"><p><strong>14.07.2015, 14:00 Uhr</strong></p></entry>
        </row>
        <row>
            <entry column-number="1"><p><strong>Wo:</strong></p></entry>
            <entry column-number="2"><p><strong>biz Uster</strong></p></entry>
        </row>
    </tbody>
</tgroup>

Brief-Abschnitte: Platzhalter

Dank Smarty (siehe oben) können vor dem Generieren der Abschnitte diverse Platzhalter durch ihren dynamischen Inhalt ersetzt werden. So können in Abschnitten die Absender-Namen, Termine etc. dynamisch gesetzt werden.

Anmerkung: Bevor diese dynamischen Platzhalter verwendet werden können, sind Anpassungen an den Briefvorlagen notwendig. Bitte wenden Sie sich an Kaden & Partner (Stichwort: Smarty-eval von Abschnitten)

Folgendes Beispiel zeigt die Generierung des Einladungs-Termins aufgrund des gewählten Termines in der Brief-Erstellen-Maske:

Gerne lade ich Dich zur Erstberatung ein:

<strong>am {$termin->termin_datum|date_format_utf8:'%A, %d. %B %Y'} um {$termin->zeit_beginn|date_format_utf8:'%H:%M'} Uhr im {$AbsenderInstitution->name_kurz}</strong>

Dieses Beispiel zeigt diverse Aspekte der dynamischen Platzhalter:

Name der Variable Typ Inhalt / Bedeutung
$beratungsfall Record Beratungsfall-Objekt des aktuellen Falles
$EmpfaengerPerson Record Person-Objekt für den Empfänger
$EmpfaengerInstitution Record Institution-Objekt für den Empfänger
$AbsenderPerson Record Person-Objekt für den Absender
$AbsenderInstitution Record Institution-Objekt für den Absender
$Betreff String (Text) Der (dynamische) Betreff-Text
$mentor Record der Mentor-Personen-DS des Falles
$kunde Record der Personen-DS des Kunden
$lehrer Record der Personen-DS des Lehrers
$schulhaus Record der Institutions-DS des zugewiesenen Schulhauses
$schulstufe Record Schulstufe-Record
$schulklasse Record Schulklasse-Record
$zuw_institution Record Die Institution 'Zugewiesen durch'
$zuw_berater Record Der Berater 'Zugewiesen durch'
$ausbildung Record Der Ausbildungs-DS aus 'ausbildung'
$situation Record Der Situations-DS aus 'situation'
$bbt_fragestellung Record Der DS zur Fragestellung aus 'bbt_b8_thema'
$bbt_ergebnis Record Der DS zum Ergebnis aus 'bbt_b8_thema'
$modul Record Der DS zum modul
$datum Timestamp Das im Dok-Erstellen-Form eingegebene Datum
$termine Record-Array Alle Termin-DS als Objekt-Array
$ersttermin Record BfTermin-Objekt des (wahrgenommenen) Ersttermins
$brief_vorlage Record Datensatz der BriefVorlage
$anrede String (Text) Anrede-String
$kopie_an String (Text) Kopie-An-Text
$treffpunkt Record Treffpunkt-Datensatz, falls gewaehlt
$termin Record angewaehlter Termin (BfTermin)
$verschiebe_termin Record angewaehlter Verschiebe-Termin (BfTermin, bei Vorlagen, welche dies unterstützen)
$beilagen Record-Array Array mit gewählten Beilage-Records

Je nach Platzhalter-Typ können die Werte in den Briefvorlagen entsprechend eingesetzt werden:

Ein paar Beispiele:

Ausgabe des Absender-Namens: {$AbsenderPerson->name} {$AbsenderPerson->vorname}

Ausgabe des gewählten Termins: {$termin->termin_datum|date_format:"%d.%m.%Y"}

Ausgabe der gewählten Berater-Funktion: {$funktion->funktion}

komplexes Beispiel: Ausgabe einer Tabelle mit dem aktuellen Termin, Datum, Treffpunkt:
<tgroup cols="2" width="150mm">
    <colspec column-number="1" colwidth="25mm" />
    <colspec column-number="2" colwidth="125mm" />
    <tbody>
        <row>
            <entry column-number="1"><p><strong>Wann:</strong></p></entry>
            <entry column-number="2"><p><strong>{$termin->termin_datum|date_format_utf8:'%A, %d. %B %Y'}, {$termin->zeit_beginn|date_format_utf8:'%H:%M'} Uhr</strong></p></entry>
        </row>
        <row>
            <entry column-number="1"><p><strong>Wo:</strong></p></entry>
            <entry column-number="2"><p><strong>{$AbsenderInstitution->name_kurz|escape:html}</strong></p></entry>
        </row>
    </tbody>
</tgroup>

Bedingungen

Neben dem einfachen Ausgeben von dynamischen Werten können auch Bedingungen formuliert werden. Ein Beispiel:

Das erste Treffen mit {if $AbsenderPerson->geschlecht == 'm'}Ihrem Berater{else}Ihrer Beraterin{/if} ....

Dieses Beispiel unterscheidet das Geschlecht des Absenders und verwendet so je nachdem die männliche oder weibliche Form.

Ein weiteres Beispiel:

Bitte {if $beratungsfall->kunde_alter_aktuell > 15}bringen Sie{else}bringe{/if} die besprochenen Unterlagen mit.

Hier wird die Formulierung nach Alter unterschieden.

Ausgeben aller Eigenschaften einer Record-Variable

Eine komplette Auflistung aller möglichen Eigenschaften einer Variablen geht hier zu weit. Die Eigenschaften können jedoch jederzeit im Template ausgegeben werden.

Untenstehend wird gezeigt, wie alle Eigenschaften einer Record-Variable ausgegeben werden können, um so die Namen der Eigenschaften herauszufinden. Die angegebenen Anweisungen sind in einem Abschnitt-Text zu platzieren, so erscheinen sie auf dem PDF-Dokument:

Ausgabe einer Record-Variable:
{($beratungsfall|get_object_vars)|print_r:true}

Ausgegeben werden alle Eigenschaften und deren aktuellen Werte der gegebenen Variablen.

vollständige Syntax

Die hier gezeigen Platzhalter werden mit der Smarty Template Engine Version 3 prozessiert. Eine vollständige Beschreibung der Möglichkeiten ist in deren Dokumentation zu finden.