Modélisation UML & SysML

Expertise et articles Blog sur UML, SysML, et Enterprise Architect de Sparx Systems

english versionTwitterUMLChannel SparxSystems EA YouTube videosLinkedIn
jeudi, 30 janvier 2014 08:35

Script Sparx Enterprise Architect pour l'import en masse de fichiers XMI

Écrit par
Évaluer cet article
(0 Votes)

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.

enterprise architect scripting view

Etape 4: ouvrir le nouveau script (vide) et copier/coller le contenu suivant (alternative : lien de téléchargement du fichier VBScript). 

  1. option explicit
  2. !INC Local Scripts.EAConstants-VBScript
  3. '
  4. ' Script Name: XMIImportFiles
  5. ' Author: G.Finance guillaume[at]umlchannel.com 
  6. ' Purpose: Batch import of XMI files to the selected package
  7. ' Date: 13/01/2014
  8. ' HOW TO USE  : 1. Set the target directory in the targetFolderA variable (use \\ for each backslash) ; you may enable additional folders if required
  9. '               2. Add each XMI filename to process into the "fileList" array variable
  10. '             3. Run the script
  11. '
  12. '
  13. ' USER ACTION [1] : update the target folder where the files to process are located
  14. dim targetFolderA
  15. targetFolderA = "C:\\temp\\"
  16. ' Additional target folders to use if required
  17. 'dim targetFolderB
  18. 'targetFolderB = "D:\\"
  19. 'dim targetFolderC 
  20. 'targetFolderC = "E:\\"
  21.  
  22.  
  23. ' ArrayList Object to store the name of each file to process (including the folder name, using one of the "targetFolder" variables)
  24. dim fileList
  25. Set fileList = CreateObject("System.Collections.ArrayList")
  26. 'USER ACTION [2] : update the following list with the name of each file to process, specifying first the associated targetFolder variable
  27. fileList.Add targetFolderA + "class.xml"
  28. fileList.Add targetFolderA + "deploy.xml"
  29. fileList.Add targetFolderA + "uc.xml"
  30. ''add new lines above if required
  31.  
  32. dim projectInterface as EA.Project
  33. dim result
  34. set projectInterface = Repository.GetProjectInterface()
  35. sub XMIImportFiles()
  36. Repository.EnsureOutputVisible "Script"
  37. Repository.ClearOutput "Script"
  38. Session.Output( "VBScript XMI Import Files" )
  39. Session.Output( "=======================================" )
  40. ' Get the selected package to import the XMI files 
  41. dim contextObjectType
  42. contextObjectType = Repository.GetContextItemType()
  43. ' Check if the selected element is a package ; if not display a message and exit
  44. if contextObjectType = otPackage then
  45. ' Get the context object as a package
  46. dim contextPackage as EA.Package
  47. set contextPackage = GetContextObject()
  48. Session.Output( "Selected Package : " & contextPackage.Name )
  49. Session.Output("TARGET PACKAGE GUID = " & contextPackage.PackageGUID & "(ID : " & contextPackage.PackageID & ")" )
  50. ' Process each XMI file set in the fileList Array Object
  51. Dim xmiFile
  52.         For Each xmiFile In fileList
  53.             Session.Output("Processing " & xmiFile & "..." )
  54. ''Import the content of the XMI file to the selected package
  55. result = projectInterface.ImportPackageXMI(projectInterface.GUIDtoXML(contextPackage.PackageGUID), xmiFile, 1, 1)
  56. Session.Output(result)
  57. Next      
  58.    }
  59. else
  60. ' Package is not currently the context item
  61. MsgBox( "This script requires a package to be selected." & vbCrLf & _
  62. "Please select a package and try again." )
  63. end if
  64. end sub
  65. 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)

scripting_enterprise-architect-batch-xmi-file-import run script

 Note : les résultats et autres notifications sont affichés sur la vue "System Output" (affichée automatiquement après avoir lancer le script)

scripting_enterprise-architect-batch-xmi-file-import run 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).

scripting_enterprise-architect-batch-xmi-file-import result

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é.