De plus en plus de problématiques intégrées dans JIRA impliquent la mise en place de demandes liées sur plusieurs niveaux hiérarchiques, créant au final une arborescence de demandes.
Vous pouvez créer ces types d’organisations grâce à certains add-ons : EXOCET par exemple, fournit des opérations pour créer des demandes et des tableaux listant les demandes liées. Cependant, aucune des solutions actuelles ne permettent d’avoir une vue globale de l’arborescence. Ainsi, si on imagine une architecture de demandes sur 3 niveaux, lorsqu’on se positionne sur la demande de troisième niveau, nous aurons un lien vers la demande de deuxième niveau (fourni par JIRA ou enrichi par Exocet) mais nous n’aurons pas d’information concernant la demande de premier niveau.
Pour pallier à ce manque, nous pouvons créer un fil d’Ariane dynamique qui vous donnera une vue de la hiérarchie de la demande et vous permettra de remonter aux demandes « parents ».
Comment faire ?
Pour illustrer cette problématique, nous allons implémenter le cas d’utilisation de la gestion des notes de frais :
Pour un Projet informatique en cours, un consultant a la possibilité de créer une ou plusieurs notes de frais. Pour chacune des notes de frais, les types de dépenses devront être distingués (Restaurant, Parking, Frais kilométriques etc…).
D’un point de vue conceptuel, nous obtenons ceci :
Créer sa hiérarchie de demandes
3 demandes seront utilisées pour démontrer ce cas d’utilisation :
- La demande WPM-27 de type « Project » sera notre « niveau 1 » :
- La demande WPM-28 de type « Expenses Report » sera notre « niveau 2 » :
- La demande WPM-30 de type «Mileage expense» sera notre « niveau 3 » :
Ces demandes sont liées de la manière suivante :
- La WPM-27 a pour Note de Frais la WPM-28 :
- La WPM-28 a pour Type de Frais la WPM-30 :
Des tableaux Exocet sont configurés :
- Un tableau « Notes de Frais » affiche les notes de frais créées pour un Projet.
- Un tableau «Types de frais» affiche dans la liste des frais pour chacune des notes de frais.
Créer et configurer un champ personnalisé Scripted Field
Créez un champ personnalisé «Navigation Path » de type « Champ Scripté » et ajoutez le aux écrans de vue de votre projet.
Ensuite, dans le menu “Scripted Field”, associez le script suivant au champ que vous venez de créer :
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.ManagerFactory
enableCache = {-> false}
def componentManager = ComponentManager.getInstance()
def issueLinkManager = componentManager.getIssueLinkManager()
String navPath
String separator = " > "
String urlJIRA1 = "<a class='issue-link' href='http://localhost:8080/browse/"
String urlJIRA2 = "'>"
String urlJIRA3 = "</a>"
//If issue type is "Level 2" (id = 10104) and issue link is "L1 to L2" (id = 10130)
if(issue.getIssueTypeId().equals("10104")){
issueLinkManager.getInwardLinks(issue.id).each {issueLink ->
if (issueLink.issueLinkType.id == 10130) {
def linkedIssue = issueLink.sourceObject
navPath = urlJIRA1+linkedIssue.key+urlJIRA2+linkedIssue.key+urlJIRA3+separator+issue.key
}
}
}
//If issue type is "Level 3" (id = 10200) and issue link is "L3 to L2" (id = 10031)
if(issue.getIssueTypeId().equals("10200")){
issueLinkManager.getInwardLinks(issue.id).each {issueLink2ndLevel ->
//Get Issue in 2nd Level
if (issueLink2ndLevel.issueLinkType.id == 10031) {
def linkedIssue2ndLevel = issueLink2ndLevel.sourceObject
//Get Issue in First level
//If issue type is "Level 2" (id = 10104) and issue link is "L1 to L2" (id = 10130)
if(linkedIssue2ndLevel.getIssueTypeId().equals("10104")){
issueLinkManager.getInwardLinks(linkedIssue2ndLevel.id).each {issueLinkFirstLevel ->
if (issueLinkFirstLevel.issueLinkType.id == 10130) {
def linkedIssueFirstLevel = issueLinkFirstLevel.sourceObject
navPath = urlJIRA1+linkedIssueFirstLevel.key+urlJIRA2+linkedIssueFirstLevel.key+urlJIRA3+separator+urlJIRA1+linkedIssue2ndLevel.key+urlJIRA2+linkedIssue2ndLevel.key+urlJIRA3+separator+issue.key
}
}
}
}
}
}
return navPath
Utilisation du fil d’Ariane
Un fil d’Ariane apparaît alors dans la vue de vos demandes et est désormais utilisable dans les demandes de niveau 2 et de niveau 3 :
- Exemple dans le niveau 2 :
Ainsi il sera possible de remonter à la demande WPM-27 depuis la demande WPM-28 :
- Exemple dans le niveau 3 :
Ainsi il sera possible de remonter à la demande WPM-27 ou à la demande WPM-28 depuis la demande WPM-30.
Des demandes liées hiérarchiquement organisées
Ainsi, grâce à cet exemple très simple à implémenter dans vos instances JIRA, vous pourrez afficher l’arborescence des demandes liées et permettre à vos utilisateurs d’y naviguer rapidement et simplement.
Cela correspond à l’un de vos besoins? N’hésitez pas à l’essayer et à partager vos retours et suggestions en commentaire !