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:

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):

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>
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>
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>
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:
{ ... } umrandet| 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:
String: Dies sind einfache Texte, und können als Smarty-Variable eingefügt werden. Bsp: {$Betreff}Timestamp: ein Zeitstempel (Unix-Timestamp), welcher in ein Datum gewandelt werden kann: {$datum|date_format:'%d.%m.%Y'}Record: Dies sind Objekte mit weiteren Eigenschaften. Beispielsweise hat das Objekt $termin die Eigenschaft termin_datum: Diese können folgendermassen verwendet werden:{$termin->termin_datum}, oder sogar mit Smarty-Filter-Methoden: {$termin->termin_datum | date_format:'%d.%m.%Y' }Record-Array: eine Liste mit Records, welche mittels eines for-Loops ausgegeben werden kannEin 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>
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.
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.
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.