Accueil > Divers, UML / Enterprise Architect > Trier les éléments d’un paquetage par alias dans Sparx Enterprise Architect avec un script Project Browser

Trier les éléments d’un paquetage par alias dans Sparx Enterprise Architect avec un script Project Browser

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.

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.

Cet article présente l’installation du script SortByAlias pour trier par alias les éléments d’un paquetage sélectionné. 

Scripts Enterprise Architect de type « Project Browser »

Le script présenté dans cet article est de type « project browser ». Il permet d’être exécuté via un clic droit sur un paquetage sélectionné à partir de l’explorateur du projet (project browser), comme illustré 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 : cliquer sur « New Project Browser Group » pour créer un groupe de scripts de type Project Browser, et le nommer Project Browser scripts.

Étape : cliquer sur « new script > new VBScript » pour créer le script SortByAlias.

Étape : 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
!INC EAScriptLib.VBScript-Logging
'
' Script Name: SortbyAlias 
' Author: Guillaume FINANCE (Objet Direct)
' Purpose: Sort elements contained in the selected package from the Project Browser by the Alias name
' Date: 03/04/2014
'
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,1),strDict(Y,1),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 theItem
 dim eaelement
 for each objKey in objDict
 theItem = objDict.Item(objKey)
 Set eaelement = Repository.GetElementByGuid(theItem)
 '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)
 LOGInfo("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 )
 LOGInfo("Processing " & currentElement.Type & " no " & i & " with alias " & currentElement.Alias & "(" & currentElement.ElementGUID & ")")
 processedElements.Add currentElement.Alias, currentElement.ElementGUID
 next
 LOGInfo("Sorting package elements")
 SortDictionary processedElements
end sub
'
' Project Browser Script main function
'
sub OnProjectBrowserScript()
 Repository.ClearOutput "Script"
 LOGInfo( "Starting SortbyAlias script" )
 LOGInfo( "==============================" )
 ' 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 : enregistrer le script (ctrl-S).

Étape : 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 selon les valeurs du champ alias.

L’ordre d’affichage obtenu dans l’explorateur du projet correspond bien aux alias des exigences :

Remarque : le script SortByAlias pourrait à l’avenir être amélioré 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 propose différents moyens d’être adapté en rajoutant de nouvelles fonctionnalités. En effet Enterprise Architect permet de créer des scripts tels que SortByAlias présenté dans cet article, ou encore d’implémenter des extensions / add’ins dot net C#.