Cet article présente un script permettant d'importer en une seule fois plusieurs fichiers XMI dans un paquetage du projet Enterprise Architect, cette fonctionnalité n'étant pas directement disponible dans l'outil.
L'utilité du script XMIImportFiles s'inscrit dans le cadre suivant : l'ensemble des diagrammes, éléments de modélisation (ex : classes, cas d'utilisation...), et paquetages existants dans un paquetage du modèle peuvent être exportés au format XMI dans un fichier XML. Le format XMI ou XML Metadata Interchange permet l'échange de modèles UML au format XML ; ce format est utilisé par Enterprise Architect pour exporter des parties du modèles. Ces fichiers XML peuvent alors être importés dans le même projet ou dans un projet Enterprise Architect différent. Lorsque de nombreux fichiers doivent être importés, cela nécessite de lancer un import XMI pour chaque fichier : pour cela il faut ouvrir le navigateur (Project Browser), lancer un clic droit depuis le paquetage cible, sélectionner Import Model from XMI, puis sélectionner le fichier à importer.
Le script présenté dans cet article permet de renseigner la liste des fichiers XMI à importer, et de lancer l'import en masse de ces fichiers dans un paquetage cible du projet de modélisation Enterprise Architect.
Remarque : Enterprise Architect possède une fonctionnalité similaire avec le "Batch XMI Import", mais celle-ci est limitée à l'utilisation de paquetages "contrôlés", correspondant à une configuration en mode collaboratif avec des serveurs de gestion de version comme SVN.
La procédure suivante décrit les étapes nécessaires pour installer puis utiliser le script XMIImportFiles :
Etape 1: ouvrir la vue "scripting" à partir du menu Tools > Scripting.
Etape 2: cliquer sur "new normal group" pour créer un groupe dédié aux scripts utilisateur, par exemple MyScripts.
Etape 3: cliquer sur "new script > new VBScript" pour créer le script d'import en masse de fichiers XMI, par exemple BatchXMIImport.
Etape 4: ouvrir le nouveau script (vide) et copier/coller le contenu suivant (alternative : lien de téléchargement du fichier VBScript).
- option explicit
- !INC Local Scripts.EAConstants-VBScript
- '
- ' Script Name: XMIImportFiles
- ' Author: G.Finance guillaume[at]umlchannel.com
- ' Purpose: Batch import of XMI files to the selected package
- ' Date: 13/01/2014
- ' HOW TO USE : 1. Set the target directory in the targetFolderA variable (use \\ for each backslash) ; you may enable additional folders if required
- ' 2. Add each XMI filename to process into the "fileList" array variable
- ' 3. Run the script
- '
- '
- ' USER ACTION [1] : update the target folder where the files to process are located
- dim targetFolderA
- targetFolderA = "C:\\temp\\"
- ' Additional target folders to use if required
- 'dim targetFolderB
- 'targetFolderB = "D:\\"
- 'dim targetFolderC
- 'targetFolderC = "E:\\"
- ' ArrayList Object to store the name of each file to process (including the folder name, using one of the "targetFolder" variables)
- dim fileList
- Set fileList = CreateObject("System.Collections.ArrayList")
- 'USER ACTION [2] : update the following list with the name of each file to process, specifying first the associated targetFolder variable
- fileList.Add targetFolderA + "class.xml"
- fileList.Add targetFolderA + "deploy.xml"
- fileList.Add targetFolderA + "uc.xml"
- ''add new lines above if required
- dim projectInterface as EA.Project
- dim result
- set projectInterface = Repository.GetProjectInterface()
- sub XMIImportFiles()
- Repository.EnsureOutputVisible "Script"
- Repository.ClearOutput "Script"
- Session.Output( "VBScript XMI Import Files" )
- Session.Output( "=======================================" )
- ' Get the selected package to import the XMI files
- dim contextObjectType
- contextObjectType = Repository.GetContextItemType()
- ' Check if the selected element is a package ; if not display a message and exit
- if contextObjectType = otPackage then
- ' Get the context object as a package
- dim contextPackage as EA.Package
- set contextPackage = GetContextObject()
- Session.Output( "Selected Package : " & contextPackage.Name )
- Session.Output("TARGET PACKAGE GUID = " & contextPackage.PackageGUID & "(ID : " & contextPackage.PackageID & ")" )
- ' Process each XMI file set in the fileList Array Object
- Dim xmiFile
- For Each xmiFile In fileList
- Session.Output("Processing " & xmiFile & "..." )
- ''Import the content of the XMI file to the selected package
- result = projectInterface.ImportPackageXMI(projectInterface.GUIDtoXML(contextPackage.PackageGUID), xmiFile, 1, 1)
- Session.Output(result)
- Next
- }
- else
- ' Package is not currently the context item
- MsgBox( "This script requires a package to be selected." & vbCrLf & _
- "Please select a package and try again." )
- end if
- end sub
- XMIImportFiles
Etape 5: modifier le contenu du script pour renseigner le ou les répertoires où sont stockés les fichiers à importer, puis le nom de chacun de ces fichiers.
- Dans l'exemple suivant, l'utilisateur doit importer deux fichiers XMI, générés à partir de projets EA séparés : C:\old\usecases.xml et C:\current\class.xml
- Modifier la variable targetFolderA (ligne 15) en utilisant \\ pour chaque backslash: targetFolderA = "C:\\current\\"
- Supprimer le commentaire devant la variable targetFolderB (ligne 17) : dim targetFolderB
- Modifier la variable targetFolderB (ligne 18) : targetFolderB = "C:\\old\\"
- Ajouter le nom de chaque fichier avec le répertoire associé dans l'objet de type ArrayList (ligne 27) : fileList.Add targetFolderA + "class.xml", fileList.Add targetFolderB + "usecases.xml"
- Enregistrer le script (ctrl-S)
Etape 6: sélectionner le paquetage ou la vue cible depuis le navigateur du projet (Project Browser), et cliquer sur "run script" pour lancer le script afin d'importer tous les fichiers XMI (important : il n'est pas possible de sélectionner comme cible une racine de projet / Model Root)
Note : les résultats et autres notifications sont affichés sur la vue "System Output" (affichée automatiquement après avoir lancer le script)
Résultat : le contenu des deux fichiers XMI est disponible dans le modèle, sous le paquetage sélectionné depuis le navigateur (Project Browser).
Remarque : si des fichiers XMI importés contiennent la définition d'une racine de projet (model root), ou d'une vue (paquetage au niveau N+1, par exemple "test" sur le Project Browser représenté ci-dessus), alors ce contenu sera importé en tant que paquetage sous le paquetage ou la vue sélectionné.