Ein Bericht sollte nur so viel Spalten haben wie maximal benötigt werden. In der Standardauslieferung werden alle Spalten gezeigt. Ein Beispiel für ein Standard-Schluss-select:
select name, akt_soll,einnahmen,aus,fest,verfuegbar from tmp_erg
Wenn eine Hochschule nicht alle Spalten oder die Spalten in einer anderen Reihenfolge sehen möchte, wird in x_repository eine Variable CUSTOM_XXXXXX (Maskennummer) angelegt, welche einen customize-Hash und in diesem die Felder, welche angezeigt werden sollen, definiert. field ist Feldname in der tmp_erg-tabelle, caption Spaltenüberschrift, width für xil-proplist und bei Bedarf kann auch explanation ergänzt werden:
<#assign customize={"resulttable":inkl.Einnahmen und Reste (Haushalterisch: Aktuelles Soll)"}, {"field":"einnahmen","caption":"Einnahmen","width":10}, {"field":"aus","caption":"Ausgaben","width":10}, {"field":"fest","caption":"Festgelegt","width":10}, {"field":"verfuegbar","caption":"verfügbar","width":12,"explanation":"@@@fin_verfuegbar@@@"}}/>
Dies wäre die gleich Ausgabe wie im Standard.
Möchte eine Hochschule beispielsweise verfügbar weiter vorne stehen haben und akt_soll gar nicht sehen, wird der Eintrag folgendermaßen geändert:
<#assign customize={"resulttable":[ {"field":"name","caption":"Gliederung","width":14}, {"field":"verfuegbar","caption":"verfügbar","width":12,"explanation":"@@@fin_verfuegbar@@@"}, {"field":"einnahmen","caption":"Einnahmen","width":10}, {"field":"aus","caption":"Ausgaben","width":10}, {"field":"fest","caption":"Festgelegt","width":10} ]}/>
Im Masken-sql gegen Ende baut man ein
<#if CUSTOM_xxxxxx?exists<#if CUSTOM_xxxxxx?exists> <#assign inlineTemplate=CUSTOM_xxxxxx?interpret<#assign inlineTemplate=CUSTOM_xxxxxx?interpret> <@inlineTemplate/>
#if>
Falls eine Hochschule ein custom_xxxxxx angelegt hat, wird der Inhalt interpretiert und ein customize-Hash steht zur Verfügung.Das Abschluss-select prüft also
<#if customize?exists<#if customize?exists> select <#foreach f in customize.resulttable<#foreach f in customize.resulttable> ${f.field} <#if h_has_next<#if h_has_next>,#if>
#foreach>
from tmp_erg2 ; <#else> -- kein customize objekt existiert, standard abschluss select
select name,akt_soll,einnahmen,ausgaben,fest,verfügbar from tmp_erg; #if>
Für die XIL-Proplist muss es genauso laufen:
XIL List --freemarker template <#if CUSTOM_xxxx?exists<#if CUSTOM_xxxx?exists> <#assign inlineTemplate=CUSTOM_xxxx?interpret<#assign inlineTemplate=CUSTOM_xxxx?interpret> <@inlineTemplate/>
#if>
<#if customize?exists<#if customize?exists> <#foreach f in customize.resulttable<#foreach f in customize.resulttable> Column CID=0 heading_text="${f.caption}" center_heading explanation="<#if f.explanation?exists<#if f.explanation?exists>${f.explanation}#if>"
row_selectable col_selectable heading_platform readonly width=${f.width} #foreach>
<#else> --standard xil list
Column CID=0 heading_text="Name explanation="" center_heading row_selectable col_selectable heading_platform readonly width=9 text_size=0 Column CID=0 heading_text="aktsoll explanation="" center_heading row_selectable col_selectable .. #if>
complex, but coool,
for the super nerds,
Technik kann man sogar mit eigenen Freemarker-Funktionen verbinden, z.B. dynamsiche Spalten nach customizing und Link-Spalten zur Einzelbuchung nur anzeigen, wenn Rechte für Einzelbuchungen da sind. Aus dem Kontext, XIL:
<#function isWanted field<#function isWanted field> <#assign result=true<#assign result=true> <#if field?starts_with('linkbuch')&&Einzelbuchrecht?exists&&Einzelbuchrecht?is_number&&Einzelbuchrecht=0<#if field?starts_with('linkbuch')&&Einzelbuchrecht?exists&&Einzelbuchrecht?is_number&&Einzelbuchrecht=0><#assign result=false/<#assign result=false/>#if>
<#if (field='einnahmen'||field?starts_with('linkbuchein')||field='offsoll_e'||field?starts_with('linkbuchoffsolle'))&&"<>"="'nein'">
<#assign result=false/<#assign result=false/>#if>
<#return result<#return result> <#if customize?exists<#if customize?exists> <#foreach f in customize.resulttable<#foreach f in customize.resulttable> <#if isWanted(f.field)<#if isWanted(f.field)> Column CID=2 heading_text="${f.caption}" center_heading explanation="<#if f.explanation?exists<#if f.explanation?exists>${f.explanation}#if>"
row_selectable col_selectable heading_platform readonly width=${f.width} #if>
#foreach>
<#else>
...