Eigene Berichtsvorlagen in upmesh erstellen

Berichte
Firmenverwaltung

In upmesh kannst du an mehreren Stellen Berichte erstellen: als Tagesbericht, Ticketbericht oder Projektbericht. Für Tagesberichte und Ticketberichte stehen dir bereits Standardberichte zur Verfügung. Als Firmenadmin kannst du zusätzlich in der Firmenverwaltung eigene Berichtsvorlagen hochladen.

Um eigene Berichte zu erstellen, benötigst du:

  • MS Office oder ein anderes Programm, mit dem sich .doc oder .docx Dateien erstellen lassen

  • Die Dokumentation und die Variablen aus dem Infodialog unter https://app.upmesh.de/company/reportTemplates

  • Das Wissen, wie diese Informationen angewendet werden. Genau das vermitteln wir dir in dieser Anleitung.

Wie funktionieren die Variablen?

In den Tabs "Ticketbericht", "Tagesbericht" und "Projektbericht" findest du die Variablen, die für den jeweiligen Bericht zur Verfügung stehen. Sie sind nach Kategorie sortiert und zeigen dir jeweils eine Beschreibung, einen Datentyp und die Schreibweise der Variable.

Der Datentyp verrät dir, ob es sich um einen String (einen Text) handelt, der direkt in das Dokument eingefügt werden kann, oder ob ein besonderer Umgang erforderlich ist. Unter "Variable" siehst du den Pfad, über den du die Variable verwenden kannst.

Achtung: Steht in diesem Pfad ein [], bedeutet das, dass es sich um ein Array (eine Liste) handelt. Um zum Beispiel den Titel eines Tickets auszugeben, musst du entweder festlegen, welches Ticket ausgegeben werden soll, oder mit einer Schleife alle Tickets durchlaufen und jeweils den Titel abdrucken. Mehr dazu im Abschnitt "For Schleifen".

Datentypen und wie sie verwendet werden

Schauen wir uns zunächst die Datentypen an und gehen dabei davon aus, dass die Variable kein [] in ihrem Pfad hat.

Strings sind Texte und können ohne weitere Vorbereitung eingefügt werden. Du verwendest sie, indem du sie in zwei geschweifte Klammern setzt. Der Name des Projektes könnte so aussehen: {{project.title}}. Die Klammern zeigen an, dass es sich um ein Code Snippet handelt, das bei der Berichtserstellung ersetzt wird.

Number Variablen (Zahlen) kannst du genauso einfügen wie Strings.

Date (Datum) kannst du ebenfalls wie einen String einfügen. Das Ergebnis sieht dann allerdings so aus: 2026-07-07T11:41:41.928Z. Schöner wird es, wenn du die Codebeispiele aus dem ersten Tab des Infodialogs verwendest. Hier findest du verschiedene Darstellungsweisen:

  • Datum inklusive Uhrzeit: {{ new Date( DATE-FIELD ).toLocaleString('de-DE') }}

  • Nur die Uhrzeit des Datums: {{ new Date( DATE-FIELD ).toLocaleTimeString('de-DE') }}

  • Nur den Tag des Datums: {{ new Date( DATE-FIELD ).toLocaleDateString('de-DE') }}

  • Heutiges Datum: {{ new Date(new Date()).toLocaleDateString('de-DE') }}

Hinweis: MS Word ersetzt je nach Spracheinstellung die eingegebenen Anführungszeichen in der letzten Klammer durch andere. Diese funktionieren nicht. Du erkennst sie daran, dass sie anders geformt sind und das erste Anführungszeichen unten statt oben steht. Es empfiehlt sich daher, die Anführungszeichen zu kopieren und einzufügen, statt sie neu zu tippen.

"Null" bedeutet, dass der Typ leer sein kann. Der Typ "Date | null" bedeutet entweder Datum oder leer. Wichtig: Stelle in diesem Fall mit einer IF Abfrage sicher, dass die Variable vorhanden ist, bevor du sie verwendest.

Booleans können nur einen von zwei Werten haben: true oder false (wahr oder falsch). Verwendest du sie wie einen String, wird genau dieser Wert abgedruckt. Mit einem IF Statement kannst du die Darstellung ändern, zum Beispiel druckt {{IF $ticket.archived}}archiviert{{END-IF}} das Wort "archiviert" ab, wenn ticket.archived true ist.

Objekte werden entweder als "object" angegeben oder durch geschweifte Klammern mit weiteren Variablennamen darin dargestellt. Die Tags im Ticketbericht sind zum Beispiel ein Objekt Array: {tagName: string; groupName: string; color: string }[].

Ein Objekt enthält immer weitere Informationen. Gibst du es wie einen String aus, wird es im gleichen Format angezeigt wie der Datentyp, allerdings mit ausgefüllten Daten. Ein Tag könnte so aussehen: {tagName: Tag, groupName: Gruppe, color: #ffffff }. Diese Anzeige kann dir beim Testen und bei der Fehlersuche helfen. Achtung: Dabei werden nicht immer alle Eigenschaften eines Objekts angezeigt, wenn diese nicht ausgefüllt sind.

Um in diesem Beispiel den Tagnamen anzuzeigen, kannst du {{ $t.tagName}} schreiben, wenn du zuvor t als einen einzelnen Tag definiert hast (siehe die Abschnitte "For Schleifen" und "Variablen & Berechnungen").

IF & END-IF

IF Abfragen sagen upmesh: "Wenn X, dann mache Y." Sie starten immer mit IF und enden mit END-IF. In der ersten geschweiften Klammer nach dem IF steht die Bedingung (wenn X), und zwischen den geschweiften Klammern von IF und END-IF steht, was passieren soll (dann mache Y).

Wird das END-IF vergessen, schlägt die Berichtserstellung fehl. Am besten schreibst du direkt nach dem IF schon das END-IF, bevor du irgendetwas anderes machst. So vergisst du es nicht.

Beispiel:

{{IF project.title === 'upmesh'}}
{{project.title}}
{{END-IF}}

Das sagt aus: "Wenn der Projektname 'upmesh' lautet, dann schreibe den Projektnamen an dieser Stelle in den Bericht."

Auch das Gegenteil ist möglich:

{{IF project.title !== 'upmesh'}}
{{project.title}}
{{END-IF}}

Das sagt aus: "Wenn der Projektname nicht 'upmesh' lautet, dann schreibe den Projektnamen an dieser Stelle in den Bericht."

In Listen kann das so aussehen:

{{IF Array(custom.Projekte).toString().includes('upmesh')}}Ja{{END-IF}}
{{IF Array(custom.Projekte).toString().includes('upmesh')== false}}Nein{{END-IF}}

Wenn das benutzerdefinierte Listenfeld "Projekte" den Wert "upmesh" enthält, schreibt upmesh "Ja" an dieser Stelle in den Bericht. Enthält das Feld den Wert "upmesh" nicht, schreibt upmesh "Nein".

IF Abfragen sind unbedingt erforderlich bei Variablen, die null oder nicht vorhanden sein können, da die Berichtserstellung sonst fehlschlägt:

{{IF tickets[0]}}
{{tickets[0]}}
{{END-IF}}

Das bedeutet: "Wenn mindestens ein Ticket vorhanden ist, drucke dieses ab."

{{IF tickets[0] && tickets[0].assignee}}
{{tickets[0].assignee}}
{{END-IF}}

Das bedeutet: "Wenn mindestens ein Ticket vorhanden ist und dieses einen Zugewiesenen hat, drucke diesen ab."

Da ein neuer Bericht beim Speichern mit einem kleinen Testprojekt im Hintergrund geprüft wird, kann ein vergessenes IF Statement schon beim Speichern zu Fehlermeldungen führen. Das muss aber nicht so sein, besonders ineinander verschachtelte IF Abfragen fallen häufig erst später auf. Im Zweifelsfall baust du lieber eine IF Abfrage zu viel als zu wenig ein.

For Schleifen

For Schleifen dienen dazu, Listen durchzugehen. Sie sagen upmesh: "Für jedes Element dieser Liste tue X."

{{FOR ticket IN tickets}}
#{{$ticket.ticketNumber}} {{$ticket.title}}
{{END-FOR ticket}}

Diese Schleife geht die Tickets durch und legt dabei eine neue Variable namens ticket an, die das aktuelle Listenelement enthält. Da es sich um eine eigene Variable handelt, musst du ein $ vor den Namen setzen, wenn du sie verwendest. Im Beispiel werden Ticketnummer und Titel abgedruckt.

Die Schleife endet mit END-FOR. Die Angabe von ticket im END-FOR ist optional, macht das Ganze aber übersichtlicher, wenn mehrere FOR Schleifen ineinander verschachtelt sind, zum Beispiel wenn du innerhalb einer Ticket Schleife eine weitere Schleife erstellst, um die Tags des einzelnen Tickets durchzugehen.

Fehlt das END-FOR, schlägt der Bericht fehl. Am besten schreibst du direkt nach dem FOR x IN y schon das END-FOR und legst erst danach fest, was mit den Elementen geschehen soll.

Variablen & Berechnungen

Du kannst auch eigene JavaScript Snippets erstellen und in einem Bericht ausführen. Diese werden nicht abgedruckt, sondern dazu genutzt, Funktionen oder Konstanten zu definieren, die du an anderer Stelle im Bericht nutzen kannst.

Das funktioniert so:

{{EXEC
MEINE_KONSTANTE = 3;
}}

Alles, was zwischen {{EXEC und }} steht, wird Teil des Code Snippets. Du kannst diesen Bereich auch nutzen, um Berechnungen auszuführen, ein gutes Beispiel dafür ist die Skalierung von Bildern im nächsten Abschnitt.

Bilder einfügen

Bilder sind Objekte im Format { width: number; height: number; data: string | ArrayBuffer; extension: string}. width und height geben Breite und Höhe des Bildes an. Veränderst du diese Werte, wird das Bild in einem anderen Format abgedruckt. data enthält die Bilddaten, extension gibt die Dateiendung an.

Du fügst Bilder ein, indem du IMAGE in die geschweiften Klammern vor dem Variablennamen schreibst, zum Beispiel {{ IMAGE $ticket.plan.large}} (vorausgesetzt, du hast ticket zuvor als ein bestimmtes Ticket definiert, siehe Abschnitt "For Schleifen"). Das druckt den Plan in voller Größe ab.

Soll das Bild kleiner sein, kannst du das Objekt vorher in eine Variable kopieren und dann height und width anpassen. Ein Beispiel für eine solche Berechnung:

{{FOR ticket IN tickets}}
{{IF $ticket.plan.large}} 
{{EXEC 
targetHeight = 7;
scaled = targetHeight / $ticket.plan.large.height;
targetWidth = $ticket.plan.large.width * scaled;
newImage = { width:targetWidth,height:targetHeight,data:$ticket.plan.large.data, extension:$ticket.plan.large.extension }; 
}}
{{IMAGE newImage}} 
{{END-IF}} 
{{END-FOR ticket}}

Elemente kombinieren

Alle diese Elemente kannst du jetzt kombinieren, um einen Bericht zu erstellen. Du kannst mehrere IF Abfragen ineinander schachteln, mehrere For Schleifen ineinander verschachteln oder auch IF und FOR miteinander kombinieren.

Es empfiehlt sich, den Bericht Stück für Stück aufzubauen und zwischendurch immer wieder zu testen. Das erleichtert die Fehlersuche, denn du kannst besser eingrenzen, wo der Fehler liegen könnte, wenn du weißt, was sich seit dem letzten Test geändert hat.

Die Formatierung von Variablen, also Textfarbe, Textgröße und Schriftart, wird in den ausgefüllten Bericht übertragen. Jetzt ist es an dir, deinen eigenen Bericht zu erstellen und so zu formatieren, wie du ihn brauchst.

War dieser Artikel hilfreich?