Berichtsvorlagen
Die Berichte (und daraus generierte PDF-Varianten) basieren auf MS Word-Templates, die Sie verändern können. Hier erklären wir Ihnen die wesentlichen Konfigurationsmöglichkeiten, die Ihnen in der Report-Engine zur Verfügung stehen.
Welche allgemeinen Anpassungen an der Handbuch-Vorlage sind möglich?
Die fest eingefügten Formatierungen und Layouts, ebenso die Logos und Texte, die Sie z.B. in den Kopf- und Fußzeilen sehen können, können Sie mit Hilfe der Word-Bordmittel abändern. Öffnen Sie dazu einfach Ihre Vorlage, bearbeiten Sie diese, indem Sie zum Beispiel an gewünschter Position das Logo ändern, und speichern Sie die Änderung in der Datei.
Achten Sie dabei auf mögliche Abschnittswechsel zwischen hochformatigen oder querformatigen Seiten in dem Dokument, denn möglicherweise sind nach einem solchen Abschnittswechsel wiederholte Änderungen z.B. in den Kopf- und Fußzeilen nötig.
Bemerkung
Möchten Sie die Schriftart Ihrer Berichtsvorlage ändern, beachten Sie bitte, dass die Report Engine bei der Generierung einer .pdf Datei nur bestimmte Schriftarten unterstützt. Die Nutzung nicht unterstützter Schriftarten kann zu Formatierungsverlusten, sowie einer Veränderung der Gesamtseitenzahl Ihrer .pdf Datei führen. Beachten Sie daher die Möglichkeit verwendete Schriftarten in Ihre Dokumente einzubetten. Eine genaue Auflistung der Schriftarten, welche von der Report Engine unterstützt werden, finden Sie hier.
Wie gebe ich die Eigenschaften eines Dokuments aus?
Im Kontext eines Templates steht Ihnen ein Diagramm mithilfe der Methode content.getSelection()
zur Verfügung. Wenn Sie das Diagramm abgefragt haben, können Sie beispielsweise die gepflegten Eigenschaften eines Dokuments ausgeben lassen.
Wenn Sie zum Beispiel den Autor Ihres Templates ausgeben möchten, gehen Sie wie folgt vor:
<<[content.getSelection().getDocument().getBuiltInProperty("Author").getValue()]>>
content.getSelection()
gibt Ihnen das Diagramm zurück. Danach können Sie auf bestimmte Informationen des Diagramms zugreifen und diese ausgeben lassen.content.getDocument()
gibt Ihnen das Dokument zurück. Anschließend können Sie auf Informationen zu Standard- und benutzerdefinierten Eigenschaften über das Dokument zugreifen und diese ausgeben.getBuiltInProperty()
gibt Ihnen die Möglichkeit, auf alle Standardeigenschaften der Template-Datei zuzugreifen. Das Beispiel oben bezieht sich auf die Eigenschaft „Author“ der Vorlage.
Sie bekommen mit getBuiltInProperty()
ein Attribut zurück. Daraufhin stehen Ihnen weitere Methoden zur Verfügung:
getValue()
gibt Ihnen den formatierten Wert der Eigenschaft in der aktuellen Inhaltssprache zurück.getRawValue()
gibt Ihnen den Wert der Eigenschaft in der aktuellen Inhaltssprache zurück.getName()
gibt Ihnen den Namen der Eigenschaft in der aktuellen Inhaltssprache zurück.getType()
gibt Ihnen den Attributtyp in der aktuellen Inhaltssprache zurück.
Wenn Sie eine benutzerdefinierte Eigenschaft Ihres Templates ausgeben möchten, gehen Sie wie folgt vor:
<<[content.getSelection().getDocument().getCustomProperty("Some name").getValue()]>>
content.getSelection()
gibt Ihnen das Diagramm zurück. Danach können Sie auf bestimmte Informationen des Diagramms zugreifen und diese ausgeben lassen.getCustomProperty()
erlaubt Ihnen den Zugriff auf alle benutzerdefinierten Eigenschaften für die Template-Datei.
Wie gebe ich die Diagrammgrafik im Template aus?
Um ein Diagramm als Grafik auszugeben, haben Sie zwei Möglichkeiten. Mit der Methode getImage()
wird das Diagramm in einer einzigen Grafik ausgegeben. Schreiben Sie die Methode in ein Textfeld, um die Größe und Position vorzugeben. Vor der Methode muss der Tag image
gesetzt werden:
<<image [content.getSelection().getImage()]>>
In einem Textfeld sollte diese Code-Zeile wie folgt eingebunden sein:
Alternativ können Sie die Methode getImageWithPrintSettings()
verwenden. Dabei wird das Diagramm entsprechend der Druckeinstellungen zerteilt und in mehreren Graphiken ausgegeben. Diese Methode bietet sich besonders bei großen Diagrammen an, um deren Lesbarkeit im Bericht zu gewährleisten. Sie können die Methode wie folgt in Ihre Berichtsvorlage einbinden. Achten Sie darauf, dass hier der Tag doc
erforderlich ist und diese Methode nicht in einem Textfeld aufgerufen werden darf.
<<doc [content.getSelection().getImageWithPrintSettings()]>>
Wie gebe ich Attribute eines Diagramms aus?
Im Kontext eines Templates steht Ihnen ein Diagramm zur Verfügung, welches Sie mit der Methode content.getSelection()
erhalten. Wenn Sie das Diagramm abgefragt haben, können Sie beispielsweise die gepflegten Attribute ausgeben lassen. Eine Liste der Bezeichner dieser Attribute finden Sie im Anhang.
Wenn Sie zum Beispiel den Namen Ihres ausgewählten Diagramms auf das Titelblatt schreiben lassen möchten, können Sie wie folgt vorgehen:
<<[content.getSelection().getAttribute("AT_NAME").getValue()]>>
content.getSelection()
gibt Ihnen das Diagramm zurück. Danach können Sie auf bestimmte Informationen des Diagramms zugreifen und diese ausgeben lassen.getAttribute()
gibt Ihnen die Möglichkeit auf ein konkretes Attribut zuzugreifen. Im Beispiel oben wird das Attribut Name des Diagramms abgefragt.
Wenn Sie mit getAttribute()
ein Attribut abfragen, stehen Ihnen daraufhin weitere Methoden zur Verfügung:
getName()
gibt Ihnen den Namen des Attributs in der aktuellen Inhaltssprache zurück.getValue()
gibt Ihnen den Wert des Attributs in der aktuellen Inhaltssprache zurück.getRawValue()
gibt Ihnen den Wert des Attributs in der Rohform zurück.
Wenn Sie die Beschreibung des Diagramms (AT_DESCRIPTION) ausgeben möchten, müssen Sie den Tag -html
ans Ende setzen. Dadurch wird der Text in der Beschreibung mit der richtigen Formatierung ausgegeben.
<<[content.getSelection().getAttribute("AT_DESCRIPTION").getValue()]-html>>
Es ist außerdem möglich, den Titel einer Anlage ausgeben zu lassen, in dem Sie den Tag -html
verwenden. Statt der vollen URL wird nur der Titel der Anlage ausgegeben. Dies ist auch möglich, wenn ein Diagramm mehrere Anlagen enthält.
Um die Titel auszugeben, können Sie wie folgt vorgehen:
<<foreach [title in content.getSelection().getAttribute(“AT_ATTACHMENT”).getValuesAsList()]>><<[title]-html>><</foreach>>
Bemerkung
Sie können den aktuellen Namen (getName()
) eines Attributs neben den Wert (getValue()
) stellen. Ein Vorteil wäre, dass auch ein geänderter Attributname im Report stets aktuell bleibt. Ein Nachteil wäre, dass der Name nicht ausgegeben werden kann, wenn der Wert nicht gepflegt wurde. Nicht gepflegte Attribute werden dem Report in Gänze nicht zur Verfügung gestellt. Alternativ können Sie den Namen des gewünschten Attributs direkt und somit statisch ins Template schreiben.
Wie kann ich das Format eines Datums bestimmen?
Bei der Ausgabe eines Attributs mit einem Datum als Wert können Sie das Format bestimmen. Dazu muss der Attributwert mit der getRawValue()
Methode ausgelesen werden. Das Format können Sie dann über eine gewünschte Kombination der Zeichen /, . oder - mit den Abkürzungen für die Zeiteinheiten setzen. Mögliche Abkürzungen sind die Folgenden:
Zeichen |
Bedeutung (Zeiteinheit) |
---|---|
YYYY oder yyyy |
Jahr |
yy oder YY |
Jahr im abgekürzten Format, z. B.“22“ für „2022“ |
MM |
Monat als Zahl |
MMM |
Monat als Abkürzung (ersten 3 Buchstaben in Englisch) |
MMMM |
Monat als Text |
dd |
Tag im Monat |
EE |
Wochentag Abkürzung (ersten 3 Buchstaben in Englisch) |
EEEE |
Wochentag als Text |
Es folgen einige Beispielformate. Dabei wird das Governance-Attribut „Gültig bis“ („AT_VALID_TO“) verwendet, das hier auf das Datum 24.08.2022
gesetzt sei. Der Befehl
<<[content.getSelection().getAttribute("AT_VALID_TO").getRawValue()]:"yyyy.MM.dd">>
ergibt die Ausgabe 2022.08.24
,
<<[content.getSelection().getAttribute("AT_VALID_TO").getRawValue()]:"dd/MM/YYYY">>
liefert die Ausgabe 24/08/2022
. Ein Format mit ausgeschriebenem Monat ergibt sich etwa mit
<<[content.getSelection().getAttribute("AT_VALID_TO").getRawValue()]:"dd. MMMM yyyy">>
als 24. August 2022
und der Wochentag lässt sich etwa mit
<<[content.getSelection().getAttribute("AT_VALID_TO").getRawValue()]:"EEEE, d MMM yyyy">>
als Wednesday, 24 Aug 2022
ausgeben.
Daten, die mit der getValue()
Methode templatisiert sind, werden immer im Format 24. August 2022 UTC
ausgegeben.
Das Format bei Systemattributen (z.B. lastModifiedDate) kann nicht geändert werden und zeigt standardmäßig das Datum und die Uhrzeit an. Wenn Sie jedoch das Datum ohne Uhrzeit in Ihrer Anwendung anzeigen möchten, können Sie den folgenden Befehl verwenden:
<<var [dateTime = content.getSelection().getLastModifiedDate()]>><<var [date = dateTime.substring(0, dateTime.lastIndexOf(“,”))]>><<[date]>>
Dieser Befehl extrahiert das Datum beispielsweise aus dem Systemattribut lastModifiedDate und formatiert es entsprechend für das deutsche Datumsformat.
Hinweis
Bitte beachten Sie, dass dieses Beispiel ausschließlich für das deutsche Datumsformat geeignet ist.
Wie kann ich das Format eines Zeitstempels ausgeben?
Bei der Ausgabe eines Attributs mit einem Zeitstempel als Wert können Sie das Format bestimmen. Dazu muss der Attributwert mit der getRawValue()
Methode ausgelesen werden. Das Format können Sie dann über eine gewünschte Kombination der Zeichens : mit den Abkürzungen für die Zeiteinheiten setzen. Mögliche Abkürzungen sind die Folgenden:
Zeichen |
Bedeutung (Zeiteinheit) |
---|---|
h |
Stunden (1-12) |
HH oder hh |
Stunden (0-23) |
mm |
Minuten |
ss |
Sekunden |
SS |
Millisekunden |
a |
Zeitangabe in AM/PM (englisch) |
z |
Zeitzone |
Z |
ISO 8601 Zeitzone (z.B. +0100) |
Es folgen einige Beispielformate. Dabei wird das Governance-Attribut „Gültig bis“ („AT_VALID_TO“) verwendet, das hier auf den Zeitstempel 16:34
gesetzt sei. Der Befehl
<<[content.getSelection().getAttribute("AT_VALID_TO").getRawValue()]:”hh:mm">>
ergibt die Ausgabe 16:34
,
<<[content.getSelection().getAttribute("AT_VALID_TO").getRawValue()]:”hh:mm:ss:SS">>
ergibt die Ausgabe 16:34:22:03
, wobei die Sekunden und Millisekunden in diesem Beispiel erfunden wurden. Die Zeitzone wird templatisiert als
<<[content.getSelection().getAttribute("AT_VALID_TO").getRawValue()]:”hh:mm z">>
und wird als 16:34 UTC
ausgegeben. Hier
<<[content.getSelection().getAttribute("AT_VALID_TO").getRawValue()]:”hh:mm Z z">>
wird die Zeitzone als 16:34 +0000 UTC
ausgegeben.
Bemerkung
Bitte beachten Sie, dass Sie das Format bei Systemattributen (z.B. dem lastModifiedDate) nicht ändern können.
Wie gebe ich Objekte eines Diagramms in einer Liste aus?
Am Diagramm stehen Ihnen zwei unterschiedliche Methoden zur Verfügung, um auf die Elemente des Diagramms zuzugreifen:
getEntities()
gibt Ihnen die verwendeten Objekte des Diagramms genau einmal aus. Sollten Sie beispielsweise das Risiko „Vollständigkeit“ also mehrfach verwendet haben, erhalten Sie es hierdurch nur einmal zur Ausgabe. Beachten Sie, dass Ausprägungsattribute an Entitäten („Objekten bzw. Katalogeinträgen“) nicht vorhanden sind.getNodes()
gibt Ihnen die Ausprägungen im Diagramm aus. Diese kommen ggf. redundant vor und beinhalten u. U. Ausprägungsattribute. Das bedeutet, dass das Risiko „Vollständigkeit“ aus dem Beispiel zuvor, möglicherweise mehrfach ausgegeben wird und die jeweilige Risikobewertung (ein Ausprägungsattribut) von Verwendung zu Verwendung variieren kann.
Nun können Sie natürlich festlegen, welche Objekte Sie betrachten möchten. Dies können beispielsweise alle Objekte eines bestimmten Typs sein. Von diesen Objekten möchten Sie z.B. den gepflegten Namen untereinander ausgeben lassen. Im Folgenden werden als Beispiel die Namen aller Risiken gelistet, die in dem Diagramm enthalten sind. Dies wird mit einer foreach
-Schleife erreicht. Wird vor dem schließenden foreach
ein Zeilenumbruch eingefügt, werden die Namen untereinander ausgegeben.
<<foreach [in content.getSelection().getEntities("ET_RISK")]>><<[getAttribute("AT_NAME").getValue()]>>
<</foreach>>
Enthält ein Diagramm die Risiken A, B und C, wird mit der obigen Vorlage die folgende Ausgabe generiert:
Alternativ können Sie auch eine kommaseparierte Liste in eine Zeile schreiben.
indexOf()
ermöglicht die Auflistung unter der Berücksichtigung eines Trennsymbols (hier,
). Zusätzlich wird das erste (bzw. nullte) Element nicht mit einem Komma davor versehen.
<<foreach [in content.getSelection().getEntities("ET_RISK")]>><<[indexOf() != 0 ? ", " : ""]>><<[getAttribute("AT_NAME").getValue()]>><</foreach>>
Hier wird beispielsweise folgende Ausgabe generiert:
Risiko A, Risiko B, Risiko C
Wenn Sie eine Aufzählung machen möchten, müssen Sie in Word den ersten Aufzählungspunkt selbst wählen. Dann folgt die foreach
-Schleife. Das schließende <</foreach>>
schreiben Sie in die nächste Zeile, aber ohne Aufzählungszeichen. Dann wird kein Aufzählungszeichen zu viel ausgegeben, wenn Ihre Liste am Ende angelangt ist.
• <<foreach [in content.getSelection().getEntities("ET_RISK")]>><<[getAttribute("AT_NAME").getValue()]>>
<</foreach>>
Das Ergebnis würde beispielsweise wie folgt aussehen:
Risiko A
Risiko B
Risiko C
Alternativ können Sie in der Vorlage auch eine nummerierte MS Word Liste festlegen, indem Sie als Aufzählungszeichen „1.“ nutzen:
1. <<foreach [in content.getSelection().getEntities("ET_RISK")]>><<[getAttribute("AT_NAME").getValue()]>>
<</foreach>>
Das Ergebnis würde im Beispiel wie folgt aussehen:
Risiko A
Risiko B
Risiko C
Außerdem können Sie für die getNodes()
-Methode die Reihenfolge festlegen, in der die Objekte ausgegeben werden, indem Sie den Parameter Sort.with(...)
ergänzen. Beispielweise erhalten Sie mit
content.getSelection().getNodes("ET_DOCUMENTS", Sort.with("byName"))
alle Dokumente alphabetisch sortiert. Analog werden die Objekte mit der Angabe „byCoords“ nach Ihren Koordinaten im Diagramm oder mit „byPath“ nach dem Auftreten im Pfadverlauf sortiert.
Wie gebe ich verbundene Knoten aus?
Auf einem Knoten in einer Menge aus getNodes()
können Sie getRelatedNodes()
ausführen. Die Knoten stellen die Ausprägungen der Objekte im Diagramm dar. Diese sind typischerweise mit anderen Knoten verbunden. Die Verbindungen dienen im Regelfall als Bedingung für die Ausgabe in separaten Listen oder Zusammenhängen.
getRelatedNodes()
gibt die verbundenen Ausprägungen zurück. Als Bedingung können der Objekttyp und/oder der Verbindungstyp gefiltert werden, der ausgegeben bzw. ausgewertet werden soll.
Im ersten Beispiel werden alle Aktivitäten in eine Variable namens activity
geschrieben. Dies ist nötig, um die Werte zwischenzuspeichern, da über diese Menge noch eine Schleife läuft. Mit dem Durchlauf der Schleife wird der Name jeder Aktivität ausgegeben. Des Weiteren wird pro Aktivität überprüft, ob verbundene Symbole vom Typ Rolle und mit der Verbindung Verantwortung
existieren. Es folgt die Ausgabe des Textes Durchführungsverantwortung:
und des gepflegten Namens der Rolle.
<<foreach [activity in content.getSelection().getNodes("ET_ACTIVITY")]>>
<<[activity.getAttribute("AT_NAME").getValue()]>>
<<foreach [in activity.getRelatedNodes("ET_ROLE","AST_RESPONSIBLE")]>>Durchführungsverantwortung: <<[getAttribute("AT_NAME").getValue()]>>
<</foreach>><</foreach>>
Im zweiten Beispiel wird die Methode getRelatedNodes()
zweimal verwendet. In einer Iteration über die Aktivitäten des Diagramms wie oben werden die jeweils damit verbundenen Risiken ausgegeben. Dabei werden die Risiken in der Variablen risk
gespeichert und anschließend die damit verbundenen Kontrollen bzw. deren Namen ausgelesen.
<<foreach [activity in content.getSelection().getNodes("ET_ACTIVITY")]>>
<<foreach [risk in activity.getRelatedNodes("ET_RISK")]>><<[risk.getAttribute("AT_NAME").getValue()]>>
<<foreach [in risk.getNodeAccess().getRelatedNodes("ET_CONTROL")]>><<[getAttribute("AT_NAME").getValue()]>>
<</foreach>><</foreach>><</foreach>>
Wie gebe ich alle Attribute eines Elements aus?
Die Methode getAttributes()
lässt sich auf Objekten, Knoten und auf dem Diagramm ausführen.
getAttributes()
gibt Ihnen die Menge der verfügbaren, gepflegten Attribute zurück. Diese könnten Sie dann beispielsweise einfach ausgeben oder weiter filtern.
Der folgende Code beinhaltet eine Schleife in einer Schleife, die alle Objekte des Diagramms mit all ihren Attributen ausgibt:
<<foreach [entity in content.getSelection ().getEntities (".*")]>>
<<[entity.getAttribute("AT_NAME").getValue()]>>
<<foreach [attribute in entity.getAttributes()]>><<[attribute.getName()]>>
<<[attribute.getValue()] -html>>
<</foreach>>
<</foreach>>
Hier wird eine Variable namens entity
erzeugt, die alle Objekte des Diagramms enthält. Von jedem Objekt wird der Name ausgegeben. Dann wird eine neue Variable namens attribute
angelegt, in die jeweils alle Attribute des Objekts geschrieben werden. Anschließend werden jeweils der Name und der Wert jedes Attributs untereinander ausgegeben.
Wie gebe ich mehrwertige Attribute eines Diagramms in einer Liste aus?
Die Methode getAttributes().getValue()
gibt Ihnen die Menge der verfügbaren, gepflegten Attribute in einer kommaseparierten Liste zurück. Der Code
<<[content.getSelection().getAttribute(“AT_EXAMINER”).getValue()>>
generiert beispielsweise folgende Ausgabe:
Prüfer 1, Prüfer 2, Prüfer 3
Mit Hilfe der .replace(", ", "\n")
-Methode geben Sie die Liste mit Zeilenumbrüchen aus.
<<[content.getSelection().getAttribute(“AT_EXAMINER”).getValue().replace(“, “, “\n”)]>>
Hier wird beispielsweise folgende Ausgabe generiert:
Bemerkung
Setzen Sie für eine Aufzählung einen Aufzählungspunkt „•“ oder ein Aufzählungszeichen „1.“ vor den Code.
Wie gebe ich meine Daten in Tabellen aus?
Sie können in Ihre Vorlage Tabellen einfügen, die entsprechend Ihrer Definition bei der Generierung des Reports mit Objekten und/ oder Attributen befüllt und erweitert werden. Nutzen Sie dafür die Word Tabellen und fügen beispielsweise in die erste Zeile Schleifen mit Methoden ein, die die Diagrammattribute, die enthaltenen Objekte oder deren Attribute ausgeben. Diese Daten werden dann in der gewählten Tabelle formatiert.
Im nachfolgenden Beispiel wird eine Tabellenzeile pro Aktivität erzeugt. Dies ist wichtig, denn sonst werden leere Zeilen nicht von der Report Engine entfernt, wenn sie nicht benötigt werden. Die Zeilen werden durchnummeriert und beinhalten die Risiken, Kontrollen und KPIs. Die gesamte Schleife pro Aktivität geht über die ganze Zeile.
Prozessschritt |
Risiko |
KPI |
|
---|---|---|---|
|
<<[activity.getAttribute(„AT_NAME“).getValue()]>> |
• <<foreach [risk in activity.getRelatedNodes(„ET_RISK“)]>><<[risk.getAttribute(„AT_NAME“).getValue()]>>
• <<foreach [in risk.getNodeAccess().getRelatedNodes(„ET_CONTROL“)]>><<[getAttribute(„AT_NAME“).getValue()]>>
<</foreach>>
<</foreach>>
|
|
Sie können zuvor beschriebene Schleifen auch kombinieren und in einer Tabelle ausführen lassen. Im nachfolgenden Beispiel wird pro Gruppe eine Kopfzeile eingefügt. Pro Eintrag in der Gruppe wird eine Zeile angelegt:
<<foreach [group in content.getSelection().getEntities(„.*“).where(p => !“ET_ACTIVITY,ET_EVENT,ET_XOR,ET_OR,ET_AND“.contains(p.getStereotypeName())).groupBy(p => p.getStereotypeName())]>><<[first().getStereotypeName()]>> |
|
---|---|
<<foreach [in group]>><<[getAttribute(„AT_NAME“).getValue()]>><<if [getAttribute(„AT_ATTACHMENT“).getValue().toString().length()!=0]>> (<<[getAttribute(„AT_ATTACHMENT“).getValue()]-html>>)<</if>> |
<<[getAttribute(„AT_DESCRIPTION“).getValue()]-html>><</foreach>><</foreach>> |
Hier werden zunächst alle Objekte des Diagramms in eine Variable namens group
geschrieben. Sie werden gefiltert, damit keine Aktivitäten, Ereignisse oder Regeln enthalten sind. Dann werden sie nach der Stereotyp-Bezeichnung gruppiert. Danach werden jeweils Namen und Beschreibungen ausgegeben. Falls es eine Anlage gibt, wird diese ebenfalls ausgegeben.
getStereotypeName()
gibt den Namen des Stereotyps des Elements zurück.contains()
definiert die beinhalteten Elemente als Bedingung.first()
wählt das erste Objekt aus der Liste aus.
Bedingung für Tabelle
Hinzu kommt, dass Sie ganze Tabellen in Bedingungen setzen können, damit eine Kopfzeile der Tabelle, ohne weitere Inhalte zu haben, ggf. nicht ausgegeben wird. Dafür können Sie die Methode any()
verwenden.
any()
vergleicht im folgenden Beispiel, ob Elemente vom Typ Rolle (ET_ROLE) oder Applikation (ET_APP_COMPONENT) vorhanden sind. Andernfalls (<<else>>
) wird der TextKeine weiteren Informationen.
anstatt einer leeren Tabelle ausgegeben.
Eine solche Tabelle könnten Sie dann beispielsweise wie folgt aufbauen:
<<if [content.getSelection().getEntities(".*").any(p => "ET_RISK,ET_APP_COMPONENT".contains(p.getStereotype()))]>>Hier die IT-Systeme:
Prozessschritt |
IT-System |
---|---|
<<foreach [activity in content.getSelection().getNodes(”ET_ACTIVITY”)]>><<[activity.getAttribute(„AT_NAME“).getValue()]>> |
• <<foreach [in activity.getRelatedNodes(„ET_APP_COMPONENT“)]>><<[getAttribute(„AT_NAME“).getValue()]>>
<</foreach>><</foreach>>
|
<<else>>Keine weiteren Informationen.<</if>>
Bemerkung
foreach
-Schleifen funktionieren nur innerhalb derselben Tabelle oder z. B. beginnend vor und endend nach einer Tabelle. Wenn die Schleife um eine Tabelle herum gelegt wurde, dann wird für jedes Element in der foreach
-Schleife eine neue Tabelle erstellt. Wenn Sie die Schleife aber außerhalb einer Tabelle starten und innerhalb enden lassen oder umgekehrt, dann funktioniert die Schleife nicht.
Wie gebe ich sortierte Listen mit bestimmten Bedingungen aus?
Falls Sie nur die Objekte ausgeben lassen möchten, die bestimmte Bedingungen erfüllen, können Sie die Vorlage entsprechend anpassen. Dabei sind die folgenden Methoden nützlich:
where()
wählt alle Objekte aus, die die Bedingung erfüllen.orderBy()
sortiert die Nodes nach dem gewünschten Wert. Um die Werte sortieren zu können, müssen sie in vergleichbare Zahlen umgewandelt werden.
Im ersten Beispiel werden die Aktivitäten mit einer Ausführungswahrscheinlichkeit (Attribut AT_PROBABILITY
, die höher als 75% ist, identifiziert und ausgegeben. Dabei wird im ersten Schritt nach der Wahrscheinlichkeit sortiert. Der Wert wird dazu noch in den Datentyp double umgewandelt. Mit den double-Werten kann z. B. auch gerechnet werden. Anschließend wird jeweils geprüft, ob die Wahrscheinlichkeit über 75% liegt. Nur entsprechende Aktivitäten werden in dieser Schleife ausgegeben.
<<foreach [in content.getSelection().getNodes("ET_ACTIVITY").orderBy(p => ((Double)(p.getAttribute("AT_PROBABILITY").getRawValue())).where(p => ((Double)p.getAttribute("AT_PROBABILITY").getRawValue()) > 75)]>><<[getAttribute("AT_NAME").getValue()]>><</foreach>>
Analog dazu können Sie nach den längsten Bearbeitungszeiten suchen und nur diese Aktivitäten ausgeben. Im nächsten Beispiel werden alle Aktivitäten ausgegeben, die eine gepflegte Bearbeitungszeit von über 20 Minuten haben.
<<foreach [in content.getSelection().getNodes("ET_ACTIVITY").orderBy(p => (Double)(p.getAttribute("AT_PROCESS_TIME").getRawValue())).where(p => ((Double)p.getAttribute("AT_PROCESS_TIME").getRawValue()) > 20)]>><<[getAttribute("AT_NAME").getValue()]>><</foreach>>
Bemerkung
Java-Code ist generell in der Report-Engine möglich. Beispiele dafür finden Sie hier und in der Report-Vorlage des Systems.
Wie kann ich die ausgegebene Sprache im Template ändern?
Wenn eine andere als die aktuelle Inhaltssprache ausgegeben werden soll, benötigt das System einen entsprechenden Hinweis. Dafür muss bei getValue()
eine Zeichenkette als Sprachkürzel eingetragen werden. Dafür können Sie die Sprachcodes nach dem Standard ISO-639-1.
Im Beispiel wird als Diagrammname der Wert ausgegeben, der für die Inhaltssprache Englisch gepflegt wurde.
<<[content.getSelection().getAttribute("AT_NAME").getValue("en")]>>
Die folgende Liste ist ein Auszug aus dem ISO Standard.
Sprachcode |
Sprache |
---|---|
ar |
Arabisch |
zh |
Chinesisch |
de |
Deutsch |
en |
Englisch |
fr |
Französisch |
it |
Italienisch |
es |
Spanisch |
Wie verwende ich Variablen, um Daten zu speichern?
Um Daten oder Objekte in einer Variable zu speichern, wird der <<var [...]>>
-Tag verwendet. In Variablen kann jeder Datentyp gespeichert werden. Der Variablenname und der Datentyp kann nachträglich nicht verändert werden.
In der folgenden Zeile wird die Variable i deklariert und mit dem Wert „0“ initialisiert.
<<var [i = 0]>>
Soll der Wert einer bestehenden Variable geändert werden, wird der gleiche Tag wie bei der Definition der Variable verwendet. Im Beispiel wird der Variable i der neue Wert „1“ zugewiesen. In der nächsten Zeile wird die Variable um den Wert 1 erhöht.
<<var [i = 1]>>
<<var [i = i+1]>>
Die Variablen können analog auch Objekte speichern, etwa Aktivitäten:
<<var [activities = content.getSelection().getEntities("ET_ACTIVITY")]>>
<<var [activities = activities.concat(content.getSelection.getEnitites("ET_ACTIVITY"))]>>
Eine Variable hat die gleichen Funktionalitäten wie das entsprechende normale Objekt.
Wie verwende ich Diagramme, um Daten zu visualisieren?
Die Reportfunktion unterstützt auch die visuelle Darstellung mittels Diagramm. Nutzen Sie dafür die Word Diagramme und fügen Sie die Methoden ein, die die gewünschten Diagrammattribute, die enthaltenen Objekte oder deren Attribute ausgeben. Diese Daten werden dann im gewählten Diagramm formatiert.
Dazu muss Folgendes beachtet werden:
Im Diagrammtitel muss ein
<<foreach[...]>>
-Tag wie bei allen anderen Schleifen begonnen werden.Der
<<foreach [...]>>
-Tag muss nicht geschlossen werden.Im Diagrammtitel muss die x-Achsen-Beschriftung oder der x-Wert mittels
<<x[...]>>
-Tag festgelegt werden.Im Datenbereich muss in der Datenreihenbeschriftung der y-Wert mittels
<<y[...]>>
-Tag definiert werden.
Das folgende Beispiel stellt eine Vorlage für ein Säulendiagramm dar, welches die enthaltenen Organisationseinheiten vergleicht. Die Kategorien des Säulendiagramms (Organisationseinheiten) werden im Titel mittels content.getSelection().getNodes("ET_ORG_UNIT")
ausgelesen und alphabetisch sortiert (orderBy()
). Je Kategorie werden die Anzahl der Rollen, Stellen und Personen mit unterschiedlichen Säulen visualisiert.
Im Bericht für ein BIC Process Design Diagramm mit den Organisationseinheit „Entwicklung“, „Geschäftsführung“, „Human Resources“ und „Sales“ wird damit das folgende Säulendiagramm erzeugt.
Wie verwende ich Zahlen im Template?
Mit der Methode getValue()
wird das Attribut in der aktuellen Inhaltssprache als Text ausgegeben. Mit Hilfe der Methode getRawValue()
können die Attribute als Zahl bezogen werden. Dazu müssen sie jedoch in den passenden Typ formatiert werden. Dies ist möglich indem ein Datentyp in runden Klammern vor den Aufruf gesetzt wird. Im Beispiel werden die Attribute als Datentypen (Long)
und (Double)
ausgegeben.
<<[(Long) content.getSelection().getNodes("ET_RISK").first().getAttribute("AT_RISK_CATEGORY").getRawValue()]>>
<<[(Double) content.getSelection().getNodes("ET_ACTIVITY").first().getAttribute("ET_PROCESS_TIME").getRawValue()]>>
In folgenden Datentyp können die Attribute formatiert werden:
Attributtyp ID |
Datentyp |
---|---|
AT_ACTUAL_VALUE |
Long |
AT_AT_CONFIDENTIALITY_REASON |
String |
AT_AT_CONFIDENTIALITY_REASON |
String |
AT_ATTACHMENT |
String |
AT_AVAILABILITY |
Long |
AT_AVAILABILITY_REASON |
String |
AT_CALL_ACTIVITY |
Boolean |
AT_CALL_CONVERSATION |
Boolean |
AT_CAPACITY |
Long |
AT_COLLECTION |
Boolean |
AT_COMPENSATION_TASK |
Boolean |
AT_CONFIDENTIALITY |
Long |
AT_CONTROL_EFFECT |
Long |
AT_DAMAGE_CONTROL_MEASURES |
String ( |
AT_DATA_SOURCE |
String |
AT_DATA_STATE |
String |
AT_DATA_UNIT |
String |
AT_DATATYPE |
Long |
AT_DEFAULT_VALUE |
String |
AT_DESCRIPTION |
String ( |
AT_DEVELOPMENT_COSTS |
Double |
AT_EMAIL |
String |
AT_END_EVENT_TYPE |
Long |
AT_EVENT_GATEWAY_TYPE |
Long |
AT_EVENT_TYPE |
Long |
AT_EXECUTION_INTERVAL |
Long |
AT_EXECUTION_TYPE |
Long |
AT_EXTERNAL |
Boolean |
AT_FOCUS_ON_TARGET |
String ( |
AT_GATEWAY_INSTANTIATE |
Boolean |
AT_GROUP |
Boolean |
AT_HEADCOUNT |
Long |
AT_IDENTIFIER |
String |
AT_IDENTIFYING |
Boolean |
AT_IDLE_TIME |
Double |
AT_IMPACT_ON_OCCURRENCE |
Long |
AT_INPUT_OUTPUT |
Long |
AT_INSTANCES |
String |
AT_INTEGRITY |
Long |
AT_INTEGRITY_REASON |
String |
AT_INTERMEDIATE_EVENT_TYPE |
Long |
AT_IS_WEAK |
Boolean |
AT_ITEM_COLLECTION |
Boolean |
AT_KEYWORDS |
String |
AT_LIFE_CYCLE |
Long |
AT_MANUFACTURER |
String |
AT_MATERIAL_COSTS |
Double |
AT_MULTIPLE_INSTANCE_TYPE |
Long |
AT_MULTIPLE_INSTANCES |
Boolean |
AT_NAME |
String |
AT_NON_INTERRUPTING |
Boolean |
AT_OCCURRENCE_PROBABILITY |
Long |
AT_OPERATION_REFERENCE |
String |
AT_OPERATIONAL_TIME_END |
Long |
AT_OPERATIONAL_TIME_START |
Long |
AT_ORG_RES_CAPACITY |
Double |
AT_PERSONAL_DATA |
Long |
AT_PHONE |
String |
AT_PRIMARY_KEY |
Boolean |
AT_PRIORITY |
Long |
AT_PRIVACY_BY_DEFAULT |
Boolean |
AT_PRIVACY_BY_DESIGN |
Boolean |
AT_PROBABILITY |
Double |
AT_PROCESS_TIME |
Double |
AT_PROCESS_TYPE |
Long |
AT_PROCESSING_CRITICAL_DATA |
Boolean |
AT_PROCESSING_PURPOSE |
String |
AT_RELEASE |
String |
AT_RES_COST_RATE |
Double |
AT_RISK_CATEGORY |
Long |
AT_RISK_MITIGATION_MEASURES |
String ( |
AT_RISK_PROBABILITY |
Double |
AT_RISK_PROBABILITY_CLASSIFICATION |
Long |
AT_ROOT_CAUSE |
String ( |
AT_SETUP_TIME |
Double |
AT_STAFF_CAPACITY |
Double |
AT_START_EVENT_TYPE |
Long |
AT_STATE |
Long |
AT_STRUCTURE_REFERENCE |
String |
AT_TARGET_VALUE |
Double |
AT_TASK_TYPE |
Long |
AT_TEMPORAL_BINDING |
Double |
AT_TRANSFER_THIRD_COUNTRY |
Boolean |
AT_TRANSPORT_TIME |
Double |
AT_UNIT_COSTS |
Double |
AT_VALID_FROM |
Long |
AT_VALID_TO |
Long |
AT_VERSION |
String |
Wie kann ich auf Vorgangsdaten zugreifen, wenn ich einen Bericht erstelle?
Im Rahmen eines Templates haben Sie die Möglichkeit, die gespeicherten Prozessvariablen eines Vorgangs auszugeben.
Wenn Sie beispielsweise den Namen des ausgewählten Vorgangs anzeigen lassen möchten, können Sie wie folgt vorgehen:
<<[case.getName()]>>
case.getName()
gibt Ihnen den Name des Vorgangs zurück.case.getCreationDate()
gibt Ihnen das Erstellungsdatum des Vorgangs zurück.case.getDueDate()
gibt Ihnen das Fälligkeitsdatum des Vorgangs zurück.case.getCreator()
gibt Ihnen Informationen über den Ersteller zurück.
Sie erhalten die folgenden Informationen über den Ersteller wie folgt:
case.getCreator().getType()
gibt Ihnen zurück, wer den Vorgang erstellt hat (z.B. Benutzer, Timer, etc.).case.getCreator().getId()
gibt Ihnen die ID des Erstellers zurück.case.getCreator().getName()
gibt Ihnen den Namen des Erstellers zurück.case.getCreator().getEmail()
gibt Ihnen die E-Mail-Adresse des Erstellers zurück.
Hinweis
Wenn Sie case.getCreator()
verwenden, ohne auf ein bestimmtes Feld zuzugreifen, wird der Name des Erstellers als Platzhalter eingesetzt: case.getCreator() ~ case.getCreator().getName()
Wie kann ich auf Prozessvariable in einem Formularfeld für einen Vorgang zugreifen?
Im Kontext eines Templates haben Sie die Möglichkeit, auf Prozessvariablen in einem Formularfeld für einen Vorgang zuzugreifen, indem Sie die Methode case.getVariable()
verwenden.
Wenn Sie zum Beispiel die ID und den Wert einer Variable ausgeben möchten, können Sie wie folgt vorgehen:
<<[case.getVariable(“customer”).getName()]>>: <<[case.getVariable(“customer”).getValue()]>>
getName()
gibt Ihnen die ID der Prozessvariable zurück.getValue()
gibt Ihnen den Wert der Prozessvariable zurück.getRawValue()
gibt Ihnen den Wert der Variable ohne jegliche Formatierung zurück.
In Ihrem Template besteht zusätzlich die Möglichkeit, auf Prozessvariablen vom Typ Array zuzugreifen.
Um eine durch Kommata getrennte Liste von Werten im Array zu erhalten, können Sie wie folgt vorgehen:
<<[case.getVariable("myArray").getValue()]>>
Um eine Liste zu erhalten, die die gesamte Sammlung von Arrays zurückgibt, so dass sie direkt durchlaufen werden kann, können Sie wie folgt vorgehen:
<<[case.getVariable(“myArray”).asList()]>>
Alternativ können Sie sich die Variablen auch untereinander ausgeben lassen. Dies wird mit einer foreach
-Schleife erreicht. Wird vor dem schließenden foreach
ein Zeilenumbruch eingefügt, werden die Namen untereinander ausgegeben.
<<foreach [field in case.getVariables()]>><<[field.getName()]>>: <<[field.getValue()]>><</foreach>>
Hinweis
Wenn Sie auf den Wert einer nicht vorhandenen Variable zugreifen, zum Beispiel mit case.getVariable("nonExistingVariable").getValue()
, wird das Template trotzdem erstellt. Anstelle des Werts der nicht vorhandenen Variable wird Ihnen in dem Fall die folgende Meldung angezeigt: Die Variable „nonExistingVariable“ ist nicht verfügbar.
Warnung
Es steht nur das case-Objekt zur Verfügung. Der Versuch, andere nicht definierte Objekte zu verwenden, wird nicht berücksichtigt. Entweder wird nichts im resultierenden Template angezeigt oder es erscheint eine entsprechende Fehlermeldung.
Wie kann ich auf die Aufgaben innerhalb eines Vorgangs zugreifen?
Im Kontext eines Templates habe Sie die Möglichkeit, auf die Aufgaben innerhalb eines Vorgangs zuzugreifen. Die bereitgestellten Informationen umfassen sowohl Benutzer-Aufgaben als auch automatische Aufgaben. Darüber hinaus sind sowohl offene Aufgaben enthalten, die noch ausstehend und zu bearbeiten sind, als auch erledigte Aufgaben, die erfolgreich abgeschlossen wurden.
Mit dem folgenden Code können Sie alle Informationen bezüglich der Aufgaben eines Vorgangs ausgeben:
<<foreach [task in case.getTasks()]>><<[task.getStatus()]>> <<[task.getName()]>><<[task.getDescription()]>> <<[task.getStartDate()]>> <<[task.getEndDate()]>> <<[task.getAssignee()]>><<[task.getDueDate()]>><</foreach>>
Wird vor dem schließenden foreach
ein Zeilenumbruch eingefügt, können Sie sich die Informationen untereinander ausgeben lassen. Die Aufgaben werden nach dem Startdatum sortiert ausgegeben.
Die folgenden Informationen sind enthalten:
task.getStatus()
gibt Ihnen den Status der Aufgabe zurück.task.getName()
gibt Ihnen den Namen der Aufgabe in Ihrer eingestellten Standardsprache zurück.task.getDescription()
gibt Ihnen die Beschreibung der Aufgabe in Ihrer eingestellten Standardsprache zurück.task.getStartDate()
gibt Ihnen das Startdatum der Aufgabe zurück.task.getEndDate()
gibt Ihnen das Enddatum der Aufgabe zurück.task.getAssignee()
gibt Ihnen die zuständigen Personen für die Aufgabe zurück.task.getDueDate()
gibt Ihnen das Fälligkeitsdatum der Aufgabe zurück.
Welche weiteren Möglichkeiten habe ich mit der Report Engine?
Nachfolgend werden weitere Möglichkeiten aufgelistet.
all(Predicate)
gibt alle Objekte aus, die die Bedingung erfüllen.
<<foreach [in content.getSelection().getEntities("ET_ROLE").all(p => ((Boolean)p.getAttribute("AT_EXTERNAL").getRawValue())]>><<[getAttribute("AT_NAME").getValue()]>>
<</foreach>>
In diesem Beispiel werden alle beteiligten externen Rollen ausgegeben.
any()
überprüft, ob ein Objekt in der Liste existiert und kann als Bedingung eingesetzt werden.
<<[content.getSelection().getEntities("ET_ROLE").any()]>>
In diesem Beispiel wird überprüft, ob es beteiligte Personen gibt.
any(Predicate)
überprüft, ob ein Objekt in der Liste existiert, das die Bedingung erfüllt.
<<[content.getSelection().getEntities("ET_ROLE").any(p => ((Boolean) p.getAttribute("AT_EXTERNAL").getRawValue()))]>>
In diesem Beispiel wird überprüft, ob eine externe Person beteiligt ist.
average(Selector)
berechnet den Mittelwert der übergebenen Eigenschaft.
<<[content.getSelection().getNodes("ET_ACTIVITY").average(p => ((Double)p.getAttribute("AT_MATERIAL_COSTS").getRawValue()))]>>
In diesem Beispiel wird der Mittelwert aller Kosten in dem Prozess berechnet.
concat(Iterable)
vereint zwei Listen zu einer, indem die zweite Liste an die erste angehangen wird.
<<[content.getSelection().getEnitites("ET_ROLE").concat(content.getSelection().getEntities("ET_DOCUMENT")).count()]>>
In diesem Beispiel wird die Liste der Personen mit der Liste der Dokumente verbunden.
union(Iterable)
vereint zwei Listen zu einer, indem die zweite Liste an die erste angehangen wird.
<<[content.getSelection().getEnitites("ET_ROLE").union(content.getSelection().getEntities("ET_DOCUMENT")).count()]>>
In diesem Beispiel wird die Liste der Personen mit der Liste der Dokumente verbunden.
count()
zählt die Objekte in einer Liste.
<<[content.getSelection().getEntities("ET_ROLE").count()]>>
In diesem Beispiel werden die beteiligten Personen gezählt.
count(Predicate)
zählt die Objekte in einer Liste, die die Bedingung erfüllen.
<<[content.getSelection().getEntities("ET_ROLE").count(p => ((Boolean)p.getAttribute("AT_EXTERNAL").getRawValue()))]>>
In diesem Beispiel werden alle externen Mitarbeiter gezählt.
first()
wählt das erste Objekt aus der Liste aus.
<<[content.getSelection().getEntities("ET_ROLE").first().getAttribute("AT_NAME").getValue()]>>
In diesem Beispiel wird der Name des ersten beteiligten Mitarbeiters ausgegeben.
first(Predicate)
wählt das erste Objekt, das die Bedingung erfüllt, aus der Liste aus.
<<[content.getSelection().getEnitites("ET_ROLE")first(p => ((Boolean)p.getAttribute("AT_EXTERNAL").getRawValue())).getAttribute("AT_NAME").getValue()]>>
In diesem Beispiel wird der Name des ersten externen Mitarbeiters ausgegeben.
groupBy(Selector)
sortiert die Objekte nach der Eigenschaft in Gruppen ein.
<<foreach [type in content.getSelection().getEntities(".*").groupBy(p => p.getStereotype())]>><<[first().getStereotype()]>>
<<foreach [in type]>><<[getAttribute("AT_NAME").getValue()]>>
<</foreach>><</foreach>>
In diesem Beispiel wird eine Aufzählung erstellt, in welcher alle Entitäten nach dem Stereotyp sortiert aufgeführt werden.
last()
gibt das letzte Objekt aus.
<<[content.getSelection().getEnitites("ET_ROLE").last().getAttribute("AT_NAME").getValue()]>>
In diesem Beispiel wird der Name des letzten Mitarbeiters ausgegeben.
last(Predicate)
gibt das letzte Objekt aus, das die Eigenschaft besitzt
<<[content.getSelection().getEnitites("ET_ROLE").last(p => ((Boolean)p.getAttribute("AT_EXTERNAL").getRawValue())).getAttribute("AT_NAME").getValue()]>>
In diesem Beispiel wird der Name des letzten externen Mitarbeiters ausgegeben.
max(ComparableSelector)
gibt den maximalen Wert aus
<<[content.getSelection().getNodes("ET_ACTIVITY").max(p => (Double)p.getAttribute("AT_PROCESS_TIME").getRawValue())]>>
In diesem Beispiel wird die längste Bearbeitungszeit ausgegeben.
min(ComparableSelector)
gibt den minimalen Wert aus
<<[content.getSelection().getNodes("ET_ACTIVITY").min(p => (Double)p.getAttribute("AT_PROCESS_TIME").getRawValue())]>>
In diesem Beispiel wird die kürzeste Bearbeitungszeit ausgegeben.
orderBy(ComparableSelector)
sortiert die Objekte in der Liste nach dem Parameter
<<foreach [in content.getSelection().getEntities("ET_ROLE").orderBy(p => ((String) p.getAttribute("AT_NAME").getValue()))]>><<[getAttribute("AT_NAME").getValue()]>><</foreach>>
In diesem Beispiel werden alle Mitarbeiter nach dem Namen sortiert ausgegeben.
skip(int)
überspringt n Objekte in der Liste.
<<foreach[in content.getSelection().getNodes("ET_ACTIVITY").orderBy(p => ((Double)p.getAttribute("AT_PROCESS_TIME").getRawValue())).skip(5)]>>
<<[getAttribute("AT_NAME").getValue()]>><</foreach>>
In diesem Beispiel werden alle Aktivitäten, bis auf die ersten fünf, ausgegeben.
<<[content.getSelection().getNodes("ET_ACTIVITY").orderBy(p => p.getAttribute("AT_MATERIAL_COSTS").getValue().toString()).skip(2).first().getAttribute("AT_NAME").getValue()]>>
In diesem Beispiel wird die drittteuerste Aktivität in dem Prozess ausgegeben.
skipWhile(Predicate)
überspringt solange Objekte bis die Bedingung nicht mehr erfüllt ist
<<foreach[in content.getSelection().getNodes("ET_ACTIVITY").orderBy(p => p.getAttribute("AT_PROCESS_TIME").getValue().toString()).skipWhile(p => ((Double)p.getAttribute("AT_PROCESS_TIME").getRawValue()) < 5)]>>
<<[getAttribute("AT_NAME").getValue()]>><</foreach>>
In diesem Beispiel werden alle Aktivitäten ausgegeben, deren Bearbeitung mindestens 5 Minuten dauert.
sum(Selector)
summiert die Attribute der Objekte in der Liste.
<<[content.getSelection().getNodes("ET_ACTIVITY").sum(p => ((Double)p.getAttribute("AT_PROCESS_TIME").getRawValue()))]>>
In diesem Beispiel wird die Gesamtbearbeitungszeit ausgegeben.
take(int)
wählt die ersten n Objekte aus der Liste aus.
<<foreach [in content.getSelection().getNodes("ET_ACTIVITY").orderBy(p => ((Double)(p.getAttribute("AT_PROCESS_TIME").getRawValue())).take(5)]>><<[getAttribute("AT_NAME").getValue()]>><</foreach>>
In diesem Beispiel werden die fünf Aktivitäten mit der kürzesten Bearbeitungszeit ausgegeben.
takeWhile(Predicate)
wählt solange Objekte aus bis die Bedingung nicht mehr erfüllt ist.
<<foreach [in content.getSelection().getNodes("ET_ACTIVITY").orderBy(p => ((Double)(p.getAttribute("AT_PROCESS_TIME").getRawValue())).takeWhile(p => ((Double)p.getAttribute("AT_PROCESS_TIME").getRawValue()) < 5)]>><<[getAttribute("AT_NAME").getValue()]>><</foreach>>
In diesem Beispiel werden alle Aktivitäten ausgegeben, die eine Bearbeitungszeit von unter 5 Minuten haben.
where(Predicate)
wählt alle Objekte aus, die die Bedingung erfüllen.
<<foreach [in content.getSelection().getNodes("ET_ACTIVITY").orderBy(p => ((Double)(p.getAttribute("AT_PROCESS_TIME").getRawValue())).where(p => ((Double)p.getAttribute("AT_PROCESS_TIME").getRawValue()) < 5)]>><<[getAttribute("AT_NAME").getValue()]>><</foreach>>
In diesem Beispiel werden alle Aktivitäten ausgegeben, die eine Bearbeitungszeit von unter 5 Minuten haben.
AT_PROCESS_TIME
,AT_SETUP_TIME
undAT_TRANSPORT_TIME
werden gebraucht, um die Bearbeitungszeit zu berechnen.
<<foreach [activity in content.getSelection().getEntities(”ET_ACTIVITY”)]>>
<<var[process = activity.getAttribute(“AT_PROCESS_TIME”).getRawValue().getClass().getSimpleName().equals(“Double”)? (double) activity.getAttribute(“AT_PROCESS_TIME”).getRawValue():0]>>
<<var[setup = activity.getAttribute(“AT_SETUP_TIME”).getRawValue().getClass().getSimpleName().equals(“Double”)? (double) activity.getAttribute(“AT_SETUP_TIME”).getRawValue():0]>>
<<var[transport = activity.getAttribute(“AT_TRANSPORT_TIME”).getRawValue().getClass().getSimpleName().equals(“Double”)? (double) activity.getAttribute(“AT_TRANSPORT_TIME”).getRawValue():0]>>
<<var[cycle =(double)process+(double)setup+(double)transport]>>
<<[activity.getAttribute(“AT_NAME”).getValue()]>>
<<[cycle]>>
<</foreach>>
In diesem Beispiel wird die Bearbeitungszeit einer Aktivität für jede Aktivität in einem Prozess berechnet.
<<if […]>><</if>>
überprüft, ob einen Bedingung wahr ist.
<<if [content.getSelection().getEntities("ET_ROLE").any(p => ((Boolean)p.getAttribute("AT_EXTERNAL").getRawValue()))]>>Prozess mit externer Beteiligung.<<else>>Keine externe Beteiligung.<</if>>
In diesem Beispiel wird überprüft, ob externe Rollen vorkommen. Ist dies der Fall, wird ein entsprechender Hinweis ausgegeben. Andernfalls (<<else>>
) wird ausgegeben, dass „Keine externe Beteiligung“ gefunden wurde.
equals(...)
überprüft, ob ein boolescher Wert gesetzt wurde.
<<foreach [activity in content.getSelection().getEntities(”ET_ACTIVITY”)]>>
<<[activity.getAttribute(“AT_NAME”).getValue()]>>
<<if [activity.getAttribute(“AT_COMPENSATION_TASK”).getRawValue().equals(true)]>>JA<<else>>NEIN<</if>>
<</foreach>>
In diesem Beispiel wird überprüft, ob ein boolescher Wert gesetzt oder nicht gesetzt wurde. Demzufolge wird der Text (JA/NEIN) ausgegeben.
<<foreach [in …]>><</foreach>>
wendet die Methode auf alle Objekte an, die sich in der Datensammlung befinden.
<<foreach [in content.getSelection().getEntities("ET_ROLE")]>><<[getAttribute("AT_NAME").getValue()]>>
<</foreach>>
In diesem Beispiel werden die Namen aller Rollen im Diagramm aufgelistet.
Hinweis
Bitte beachten Sie, dass die Nutzung des <<doc>>-Tags sowie der Zugriff auf Inhalte von anderen Dateien innerhalb von Report-Templates nicht unterstützt wird.
Cast-Notwendigkeit
Da die Attribute der Objekte aus BIC Process Design als Object exportiert werden und vorher sämtliche Datentypen als String formatiert werden, die anschließend in Objects formatiert werden, ist es bei Prädikaten notwendig, die Attribute wieder zu parsen. Dazu muss ein (<Datentyp>)
verwendet werden. Dieses formatiert die Objects wieder in den gewünschten Datentyp, wodurch das Vergleichen wieder möglich wird.