Important :
- Le script SortByAlias a été amélioré et mis à jour le 1/09/2014 afin de fonctionner lorsque des éléments du paquetage comportent des alias vides.
- Les fonctions de ce script sont désormais intégrées et maintenues dans l'add-in eaUtils ; cliquer ici pour plus d'informations.
J'ai récemment travaillé sur un nouveau projet Enterprise Architect dans lequel j'ai importé les exigences initiales à partir d'un fichier Excel avec eaDocX. Chacune des exigences comportait alors les informations suivantes sous Enterprise Architect : titre, référence (importée dans le champ Alias), description. Par défaut, Sparx Enterprise Architect tri le nom des exigences d'un paquetage sélectionné par ordre alphabétique. Lorsqu'un paquetage contient plusieurs types d'éléments (ex : classes, interfaces, cas d'utilisations, exigences, etc.), chaque groupe d'éléments du même type est trié séparément. La capture d'écran suivante présente un paquetage possédant un mélange d'exigences, de classes, et d'interfaces, triées par type puis par nom dans l'ordre alphabétique :
Après avoir importé mes exigences, j'avais besoin de les trier par alias (exemple : REQ-TEST-001, REQ-TEST-002, REQ-TEST-003, etc). La capture d'écran suivante illustre sur la partie gauche les exigences affichées dans l'explorateur du projet (Project Browser), et sur la partie droite l'ordre d'affichage souhaité i.e. triées par alias.
Le script présenté dans cet article permet de trier les éléments d'un paquetage sélectionné par alias. Un script supplémentaire est disponible en fin d'article pour trier les éléments d'un paquetage sélectionné selon la valeur d'une Tagged Value dédiée à ce besoin, nommée "SortingOrder".
Scripts Enterprise Architect de type "Project Browser"
Les scripts présentés dans cet article sont de type "project browser". Ils présentent en effet la spécificité d'être accessibles via un clic droit sur un paquetage sélectionné à partir de l'explorateur (project browser), comme représenté ci-dessous :
Script "Sort by alias" pour trier les éléments d'un paquetage par alias
La procédure suivante décrit les étapes nécessaires pour installer puis utiliser le script SortByAlias :
Étape 1: ouvrir la vue "scripting" à partir du menu Tools > Scripting.
Étape 2: cliquer sur "New Project Browser Group" pour créer un groupe dédié aux scripts utilisateurs de type Project Browser, par exemple Project Browser scripts.
Étape 3: cliquer sur "new script > new VBScript" pour créer le script de tri par alias, par exemple SortByAlias.
Étape 4: ouvrir le nouveau script (vide) et copier/coller le contenu suivant (alternative : télécharger le fichier VBScript).
- option explicit
- !INC Local Scripts.EAConstants-VBScript
- '
- ' Script Name: SortbyAlias
- ' Author: Guillaume FINANCE, guillaume[at]umlchannel.com
- ' Purpose: Sort elements contained in the selected package from the Project Browser by the Alias name
- ' Date: 03/04/2014, updated on the 1/09/2014 (works when the package contains empty aliases, using Session.Output)
- '
- sub SortDictionary (objDict)
- ' constants
- Const dictKey = 1
- Const dictItem = 2
- ' variables
- Dim strDict()
- Dim objKey
- Dim strKey,strItem
- Dim X,Y,Z
- ' get the dictionary count
- Z = objDict.Count
- ' sorting needs more than one item
- If Z > 1 Then
- ' create an array to store dictionary information
- ReDim strDict(Z,2)
- X = 0
- ' populate the string array
- For Each objKey In objDict
- strDict(X,dictKey) = CStr(objKey)
- strDict(X,dictItem) = CStr(objDict(objKey))
- X = X + 1
- Next
- ' perform a a shell sort of the string array
- For X = 0 To (Z - 2)
- For Y = X To (Z - 1)
- If StrComp(strDict(X,dictItem),strDict(Y,dictItem),vbTextCompare) > 0 Then
- strKey = strDict(X,dictKey)
- strItem = strDict(X,dictItem)
- strDict(X,dictKey) = strDict(Y,dictKey)
- strDict(X,dictItem) = strDict(Y,dictItem)
- strDict(Y,dictKey) = strKey
- strDict(Y,dictItem) = strItem
- End If
- Next
- Next
- ' erase the contents of the dictionary object
- objDict.RemoveAll
- ' repopulate the dictionary with the sorted information
- For X = 0 To (Z - 1)
- objDict.Add strDict(X,dictKey), strDict(X,dictItem)
- Next
- ' sort the package elements based on the new sorting order
- dim newOrder
- newOrder = 0
- dim eaelement
- for each objKey in objDict
- Set eaelement = Repository.GetElementByGuid(objKey)
- 'change the position of the element in the package to the new sorting order value
- eaelement.TreePos = CLng(newOrder)
- eaelement.Update()
- newOrder = newOrder + 1
- next
- end if
- end sub
- sub sortElementsbyAlias (selectedPackage)
- Session.Output("Processing selected package " & selectedPackage.Name)
- dim elements as EA.Collection
- dim i
- dim processedElements
- set processedElements = CreateObject( "Scripting.Dictionary" )
- set elements = selectedPackage.Elements
- for i = 0 to elements.Count - 1
- dim currentElement as EA.Element
- set currentElement = elements.GetAt( i )
- Session.Output("Processing element " & i & " with type " & currentElement.Type & ", alias """ & currentElement.Alias & """ and guid " & currentElement.ElementGUID & ")")
- processedElements.Add currentElement.ElementGUID, currentElement.Alias
- next
- Session.Output("Sorting package elements")
- SortDictionary processedElements
- end sub
- '
- ' Project Browser Script main function
- '
- sub OnProjectBrowserScript()
- Repository.ClearOutput "Script"
- Session.Output( "Starting SortbyAlias script" )
- Session.Output( "==============================" )
- ' Get the type of element selected in the Project Browser
- dim treeSelectedType
- treeSelectedType = Repository.GetTreeSelectedItemType()
- select case treeSelectedType
- case otPackage
- ' Code for when a package is selected
- dim thePackage as EA.Package
- set thePackage = Repository.GetTreeSelectedObject()
- sortElementsbyAlias thePackage
- Repository.RefreshModelView (thePackage.PackageID)
- case else
- ' Error message
- Session.Prompt "This script does not support items of this type.", promptOK
- end select
- end sub
- OnProjectBrowserScript
Étape 5: enregistrer le script (ctrl-S).
Étape 6: lancer un clic droit sur le paquetage cible dans lequel les éléments doivent être triés par alias, puis sélectionner Scripts > SortbyAlias
Résultat : les exigences (éléments de type "requirement") du paquetage sélectionné ont été triées par ordre alphabétique à partir du champ alias.
L'ordre d'affichage obtenu dans l'explorateur du projet correspond bien aux alias des exigences :
Script "Sort by tagged value - sortingorder" pour trier les éléments d'un paquetage selon une tagged value dédiée
Dans certains cas, il n'est pas possible d'utiliser le champ Alias pour trier les exigences. Aussi je suis parti du script SortByAlias pour créer le script SortbyTaggedValue_SortingOrder, dont l'objectif est de trier les éléments d'un paquetage selon la valeur d'une "tagged value", SortingOrder, créée spécialement pour ce besoin.
Afin de tester ce script, j'ai créé la tagged value SortingOrder dans chaque exigence :
La procédure suivante décrit les étapes nécessaires pour installer puis utiliser le script SortbyTaggedValue_SortingOrder :
Étape 1: ouvrir la vue "scripting" à partir du menu Tools > Scripting.
Étape 2: ouvrir le groupe de scripts Project Browser intitulé Project Browser scripts (créé précédemment).
Étape 3: cliquer sur "new script > new VBScript" pour créer le script de tri par tagged value, par exemple SortbyTaggedValue_SortingOrder.
Étape 4: ouvrir le nouveau script (vide) et copier/coller le contenu du fichier téléchargeable ici.
Étape 5: enregistrer le script (ctrl-S).
Étape 6: lancer un clic droit sur le paquetage cible dans lequel les éléments doivent être triés par la valeur de SortingOrder, puis sélectionner Scripts > SortbyTaggedValue_SortingOrder.
Résultat : les exigences (éléments de type "requirement") du paquetage sélectionné ont été triées selon le valeur de la tagged value SortingOrder.
Remarque : les scripts SortByAlias et SortByTaggedValue pourraient à l'avenir être améliorés afin de trier également les éléments de chaque sous-paquetage.
Cet article a démontré que l'outil Sparx Enterprise Architect est ouvert et permet par différents moyens d'être adapté en créant par exemple de nouvelles fonctionnalités afin de répondre aux besoins de divers contextes. En effet Enterprise Architect permet de créer des scripts tels que SortByAlias ou SortByTaggedValue présentés dans cet article, ou pour importer en masse des fichiers XMI présenté dans un précédent article, ou encore d'implémenter des extensions / add'ins dot net C#.