Jira: E-Mail-Benachrichtigung bei Vorgang geschlossen (Issue closed)

Jira feuert beim Übergang in den Status Vorgang geschlossen nicht automatisch ein entsprechendes event (Quelle).

Also muss man in den Folgefunktionen aller Übergänge (engl. transitions) in den Status Geschlossen das Standardevent Allgemeines Ereignis in Vorgang geschlossen ändern:

Anschließend gg.falls Arbeitsablauf-Entwurf veröffentlichen.

Anschließend natürlich noch in den Benachrichtigungen aufnehmen.

Jira Beobachter (engl. Watcher) in Vorgangssicherheit, Berechtigungen, usw. verwenden

Wer von einem E-Mail-basierten Ticketsystem (z.B. OTRS) auf Jira umsteigt, wird darüber stolpern, dass Jira die „CC-Funktionalität“ nicht out-of-the-box unterstützt. Konkret stellt man sich die Frage: Wie kann man in Jira abbilden, dass der vom Kunden per E-Mail geschickte Arbeitsauftrag (in Jira Vorgang genannt) nur von den Bearbeitern und von „erwünschten“ Kollegen eingesehen werden kann. Bei E-Mails nimmt man diese Kollegen ja einfach ins CC: Jeder dieser Kollegen kann die E-Mail weiteren Kollegen zu Gesicht bringen, indem er diese bei einer Antwort zusätzlich ins CC nimmt.

Grundsätzlich kann in Jira niemand ein Ticket einsehen, wenn er nicht in Projekteinstellungen -> Berechtigungen -> Projekte durchsuchen eingetragen ist. Das entspricht dem Verhalten einer E-Mail, denn vereinfacht gesagt, kann niemand eine E-Mail einsehen, wenn er nicht im CC steht.

Doch wie bildet man nun die CC-Funktionalität in Jira ab, also dass jeder, der das Ticket einsehen darf, weitere Kollegen die Einsicht in dieses Ticket erlauben darf? Die naheliegenden Felder Beobachter (engl. Watcher) im klassischen Jira oder Request Participiants im Produkt Jira Service Desk fallen für mich weg, da mit ihnen bzgl. Berechtigungen und Vorgangssicherheit keine Feinkonfiguration möglich ist: https://jira.atlassian.com/browse/JRASERVER-45488

Das geht bei Jira erstaunlicherweise nur mit einem Add-On, welches holprigerweise ein zusätzlich sichtbares Feld im Ticket mit sich bringt – aber diese Kröte muss man an dieser Stelle wohl schlucken …

Wir installieren also das Add-On Jira Watcher Field.

Dann schalten wir beim Add-On Allow users to be added as watchers regardless of Browse Issue permissions ein, denn ohne diesen Trick kann niemand einem Ticket zugeordnet werden, wenn er nicht die grundlegende Berechtigung Projekte durchsuchen hat.

Anschließend machen wir das neue Watcher Field verfügbar:

Und nennen es anschließend Ticket-Beobachter.

Als nächstes wird dieses benutzerdefinierte Feld noch für die entsprechenden Bildschirmmasken freigeschaltet.

Meines Erachtens ist es sinnvoll, die Projekt-Berechtigungen der Autoren auch 1:1 auf die Ticket-Beobachter zu übertragen. Also schalten wir im nächsten Schritt folgende Berechtigungen für die Ticket-Beobachter ebenfalls frei:

  • Projekte durchsuchen (damit das Ticket überhaupt eingesehen werden kann)
  • Vorgänge schließen (damit auch die Ticket-Beobachter ‚tote‘ Tickets wegräumen können)
  • Beobachter verwalten (damit jeder Ticket-Beoachter weitere Ticket-Beobachter hinzufügen kann)
  • Kommentar hinzufügen (jeder, der ein Ticket einsehen kann, sollte auch seinen Senf dazugeben dürfen)
  • Eigene Kommentare löschen
  • Eigene Kommentare bearbeiten
  • Anhänge erstellen
  • Eigene Anhänge löschen

Seltsamerweise reicht es nicht Beobachter verwalten an das Feld Ticket-Beobachter freizugeben, man muss zusätzlich noch für die Gruppe jira-users Beobachter verwalten freischalten

Die Projekt-Benachrichtigungen sind ebenfalls noch um die Ticket-Beobachter zu erweitern, z.B. so:

  • Vorgang erstellt
  • Vorgang geschlossen
  • Vorgang kommentiert
  • Vorgang erneut geöffnet

Tooltipp mit Link (in Bootstrap)

In CSS


/**************************************************************
* Tooltip beautifier
*
* according to: https://www.w3schools.com/css/css_tooltip.asp
*******/

/* Tooltip container */
.tooltip {
	position: relative;
}

/* Tooltip text */
.tooltip .tooltiptext {
	/* font-size: take the default from global design, to sync the tooltip size with the user's preferences (Ctrl +) (Ctrl -) */
	/* width: not set, to let the content of the tooltip decide the size */
	background-color: #484848;
	color: #FFF;
	text-align: center;
	border-radius: 5px;
	border: solid 2px #000;
	font-family: sans-serif;
	visibility: hidden;
	padding: 10px 5px;
	white-space: nowrap; /* prevent automatic linebreaks. The writer of the tooltip should be responsible of formatting his tooltip. */
	opacity: 0;
 
	/* Position the tooltip text without any gap, to let the user move the mouse in the tooltip text to click a link there. */
	top: -10px; /* -10px because we use a top padding of our tooltip-text of 10px */
	position: absolute;
	z-index: 1;
}

/* Link in tooltip text */
.tooltip .tooltiptext a {
	color: #82CAFA;
	text-decoration: underline;
}

/* Fade in the tooltip text when you mouse over the tooltip container */
.tooltip:hover .tooltiptext {
	visibility: visible;
	opacity: 1;
	transition: opacity 1.25s;
	transition-delay: 0.75s;
}

/* Tooltip left-arrow */
.tooltip .tooltiptext::after {
	content: " ";
	position: absolute;
	top: 13px; /* position the arrow in the right upper corner of the 'hoverable' element */
	right: 100%; /* To the left of the tooltip */
	margin-top: -5px;
	border-width: 5px;
	border-style: solid;
	border-color: transparent black transparent transparent;
}

dann:


<div class="tooltip">Hover over me
  <span class="tooltiptext"><a href='http://www.google.de'>Tooltip text</a></span>
</div>

In Bootstrap
hierbei ist jedoch das Problem, dass die eingebundene CSS-Datei das default-Design zerschießen kann

<html>
  <head>
    <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%20src%3D%22%2F%2Fajax.googleapis.com%2Fajax%2Flibs%2Fjquery%2F1.11.1%2Fjquery.min.js%22%3E%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="&lt;script&gt;" title="&lt;script&gt;" />
    <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%20src%3D%22%2F%2Fmaxcdn.bootstrapcdn.com%2Fbootstrap%2F3.3.4%2Fjs%2Fbootstrap.min.js%22%3E%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="&lt;script&gt;" title="&lt;script&gt;" />
    <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet">
  </head>

  <body>
    <a href="#" role="button" class="btn popovers" data-toggle="popover" data-trigger="hover" title="Hallo" data-content="test content <a href='https://www.google.com/' title='test add link'>link on content</a>" data-original-title="test title">test link</a>
    <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%3E%20%24(%22%5Bdata-toggle%3Dpopover%5D%22).popover(%7Bhtml%3Atrue%2C%20delay%3A%7B%22show%22%3A100%20%2C%20%22hide%22%3A%203000%7D%7D)%3B%20%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="&lt;script&gt;" title="&lt;script&gt;" />
  </body>
</html>

JIRA per URL steuern

Hintergründe: https://confluence.atlassian.com/jirakb/creating-issues-via-direct-html-links-159474.html

Create Issue Dialog (ohne Fehlermeldung, wenn die Zusammenfassung fehlt)

z.B. http://deinserver/secure/CreateIssueDetails!default.jspa?pid=10101&amp;issuetype=10402

Achtung: „To have the reporter field default to the currently logged in user, the user must be logged in and must not have the Modify Reporter permission.“

Achtung: Es gibt wahrscheinlich keine Möglichkeit, Jira so zu konfigurieren, dass man in diesem Dialog noch zwischen verschiedenen Issue-Types auswählen kann. Das wäre dann nur über den u.g. Vordialog abbildbar.

Create Issue Dialog (mit Fehlermeldung, wenn die Zusammenfassung fehlt)

z.B. http://deinserver/secure/CreateIssueDetails!init.jspa?pid=10101&issuetype=10402

Create Issue Vordialog

z.B. http://deinserver/secure/CreateIssue!default.jspa?selectedProjectId=10101&amp;issuetype=10402

Jira konfigurieren

Das abgespeckteste Projekttyp scheint mir Aufgabenverwaltung – daher nutze ich diesen als Ausgangspunkt meines Jira-Proof Of Concepts.

Hipchat-Anzeige nervt, wenn man kein Chat-Tool verwenden möchte. Da dieses Feature ohnehin abgekündigt ist, deaktiviere alle (drei) Plugins mit Hipchat im Namen.

Um Stichworte (engl. Tags) aus allen Anzeigen rauszunehmen, blende es in der entsprechenden Feld-Konfiguration aus.

Sinnvolles Prioritäten-Schema erstellen und Deinem Projekt zuweisen.

CC-Funktionalität abbilden

Abstimmen (engl. Voting) abschalten, weil das den Otto-Normal-Nutzer erstmal verwirren dürfte: System->General Configuration->Allow users to vote on issues (kann man nicht Projekt-fein abschalten, nur Installations-weit)

Für mich ist der Standard-Workflow etwas zu kompliziert. Ich habe also einen einfachen Workflow eingerichtet mit nur drei Status: OPEN, IN ARBEIT und GESCHLOSSEN. Damit beim Übergang in den Status geschlossen eine Benachrichtigung per E-Mail ausgelöst werden kann, muss das explizit konfiguriert werden.

Die linke Projekt-Seitenleiste ausblenden.

Mögliche Painpoints

– Konfiguration ist nicht trivial – 2-3 Mannwochen Einarbeitungszeit erforderlich; danach sollte man (fast) alle Konfigurationswünsche umsetzen können.
– Viele Anpassungswünsche sind nicht out-of-the-box umsetzbar (hier ruht sich Atlassian m.E. etwas zu sehr auf seiner marktbeherrschenden Stellung aus). Die meisten Wünsche davon sind jedoch irgendwie über den Einsatz eines Addons lösbar.
Kann nicht wirklich mehrere Bearbeiter (engl. Assignees) zuordnen. Das gefällt mir aber eigentlich, weil es dem Prinzip Ownership entgegen kommt: es gibt genau einen Mitarbeiter, der für die Lösung eines Auftrags verantwortlich ist.
Mehrere verschiedene Create-Issue-Masken (z.B. für jede Rolle eine eigene) sind schwer implementierbar.
Spaltenbreite der Dashboards nicht anpassbar.
Feld: Prioritäten in Wichtigkeit umbenennen ist etwas umständlich nur über das Languagefile möglich.
– Jira bietet keine Lösung, die Projekt Seitenleiste per default zu verstecken oder einzuklappen.