# Kommentare lesen mit Jira Expressions

Eines der interessantesten Features in Jira Cloud sind die sogenannten Jira Expressions. Eigentlich als Entwickler-Feature gedacht, erobern sich Jira Expressions aufgrund ihrer Flexibilität beim Definieren von Bedingungen und Validatoren gerade einen Platz im Herzen vieler Jira Admins. In diesem Artikel wollen wir dieses Feature kurz vorstellen und die Kommentare eines Vorgangs lesen.

TIP

Um die Expressions in diesem Artikel direkt auszuprobieren haben wir die freie Jira Cloud App Expression Tester entwickelt. Damit lassen sich Jira Expressions spielend leicht direkt in Jira ausprobieren. Am besten gleich installieren – die App ist kostenlos!

# Aber was genau sind Jira Expressions?

Zuerst die kurze Antwort: Jira Expressions sind eine domänenspezifische Sprache mit der Daten aus Jira mit einem kurzen Ausdruck selektiert, aggregiert und verglichen werden können.

So, und nun die besser verständliche Antwort. Eine Jira Expression ist letztlich nichts weiter als eine kurze Formel, die von Jira ausgewertet wird und ein Ergebnis zurück liefert. Meistens begegnet man diesen Expressions beim Anlegen von benutzerdefinierten Workflow-Bedingungen und -Validatoren. Aber mit Jira Expressions lässt sich noch einiges mehr machen. So können App-Entwickler über Jira Expressions bestimmt UI-Elemente ein- und ausblenden oder Expressions über die REST API auswerten lassen. Die offizielle Dokumentation von Atlassian enthält einige Beispiele und eine komplette Referenz aller Datentypen. Wir von Jodocus sind richtig große Fans von Jira Expressions und verwenden diese recht häufig in den verschiedensten Anwendungsfällen.

# Ein erstes Beispiel

Für unser erstes Beispiel nehmen wir einfach mal, wir wollten alle Kommentare eines Vorgangs sehen, aber sonst nicht weiter. Dies kann recht einfach über die folgende Jira Expression erreicht werden:

issue.comments
  .map(c => c.body.plainText)

Diese Expression liefert den Text aller Kommentare eines Vorgangs zurück, etwa so:

[
 "Hello World ",
 "A small comment made by me",
 "some comment"
]

Ganz nett, oder? Exakt nur die Daten, die wir brauchen und sonst nichts. Keinerlei Overhead! Aber wie funktioniert das nun genau?

Eine Jira Expression wird immer in einem bestimmten Kontext ausgewertet. Der Kontext sind in diesem Zusammenhang die Daten die während der Auswertung zur Verfügung stehen. In unserem obigen Beispiel ist das der Vorgang CTP-1, welcher als 'issue' in der Formel zur Verfügung steht. Einfach nur 'issue' ist bereits eine eigenständige Jira Expression, wenn auch keine sehr komplizierte oder nützliche; issue gibt einfach nur den Vorgang selbst als Datensatz zurück.

Einfache Expression

Wir wollen jetzt aber die Kommentare lesen und diese sind als Attribut des Vorgangs verfügbar. Ein Attribut auslesen klappt einfach mit einem Punkt und dem Namen des Attributs:

issue.comments
Einfache Expression mit Kommentaren

Schon sehr viel besser, aber immer noch nicht ganz was wir wollen. Klar, das sind alle Kommentare, aber auch noch so viel mehr Informationen als wir wollen. Hier kommt uns die map()-Funktion entgegen. Mit map() können wir eine kleine Formel auf alle Elemente einer Liste anwenden und bekommen so eine angepasste Liste zurück. Wir können also auf jeden Kommentar in der Liste der Kommentare eine Formel anwenden, das von einem großen Kommentar-Datensatz nur den Text zurück liefert. Und diese Formel heißt:

c => c.body.plainText

In natürliche Sprache übersetzt: Hey Jira, für jeden Kommentar-Datensatz aus dieser Liste, nennen wir den mal c, hätte ich gerne das Attribut c.body.plainText.

Und genau das macht Jira dann auch, und wir bekommen eine hübsche Liste mit nur den Kommentartexten:

Vollständige Expression mit Kommentaren

Und das ist es auch schon: Eine kurze, nette Jira Expression mit der wir alle Kommentartexte zu einem Vorgang erhalten können. Damit könnte man jetzt zum Beispiel die REST-API befragen oder die Expression im Expression Tester ausführen und das Ergebnis als JSON herunterladen.

Und es geht natürlich noch mehr: Im nächsten Artikel sehen wir uns an, wie wir diese Expression erweitern und als Workflow-Bedingung verwenden können.