Enige tijd geleden heb ik een extensie ontwikkeld waarmee je eenvoudig duplicaten checks kunt doen. Vooral bij het werken in teams binnen een grote repository is de kans op elementen met dezelfde naam en stereotypen erg groot. Om dit te voorkomen is de extensie ontwikkeld die ervoor zorgt dat je direct geattendeerd wordt op een mogelijke dubbeling.
Helaas is het niet in elke organisatie mogelijk om een DLL te introduceren vanuit security perspectief. Dan is de inzet van een script een goed alternatief.
De afbeelding toont de opzet van het scherm.
Het script valideert op basis van de naam en het stereotype, dit kan desgewenst aangepast worden in het sql statement als je op andere attributen wilt valideren.
Daarnaast kun je ervoor kiezen om de meldingen naar het output scherm te schrijven of naar een promt, hiervoor is een logische constante opgenomen in het script.
Interessant is dat het een recursief script is, dat betekent dat hij bij een package ook alle subpackages valideert en in de subpackages ook weer de subpackages etc.
Via de link naar een zip krijg je een voorbeeld repository met daarin het beschreven script
Onderstaand script is een voorbeeld van een dergelijk script.
option explicit
!INC Local Scripts.EAConstants-VBScript
' Use a prompt dialog or the session output window for the results
const useprompt = false
Sub CheckPackage(strPackage)
' Check the uniques of the elements placed in a package, this is a recursive function because it processes also the subpackages and daigrams in the packages
Dim oPackage as EA.Package
Dim theElement as EA.Element
Dim theSubPackage as EA.Package
Dim theDiagram as EA.Diagram
Dim strSubPackage
Set oPackage = Repository.GetPackageByID(strPackage)
For Each theSubPackage in oPackage.Packages
strSubPackage = theSubPackage.PackageID
CheckPackage strSubPackage
Next
For each theDiagram in oPackage.Diagrams
CheckDiagram theDiagram.DiagramID
Next
For Each theElement in oPackage.Elements
CheckUniqueElement theElement.ElementId
Next
End Sub
Sub CheckDiagram(strDiagram)
' Check the uniques of the elements placed on a diagram
Dim oDiagram as EA.Diagram
Dim theDO as EA.DiagramObject
Set oDiagram = Repository.GetDiagramByID(strDiagram)
For Each theDO in oDiagram.DiagramObjects
CheckUniqueElement theDO.ElementId
Next
End Sub
Sub CheckUniqueElement(strElement)
' Check the uniques of the elements based on the elementid
Dim sSql
Dim strVal
Dim oElement as EA.Element
Set oElement = Repository.GetElementByID(strElement)
If InStr(oElement.Stereotype, "ArchiMate>") >= 0 Then
sSql = "SELECT Count(*) as aantal FROM t_object WHERE t_object.name = '#name#' AND t_object.Stereotype='#stereotype#' AND t_object.ea_guid<>'#guid#' "
sSql = Replace(sSql, "#name#", oElement.Name)
sSql = Replace(sSql, "#stereotype#", oElement.Stereotype)
sSql = Replace(sSql, "#guid#", oElement.ElementGUID)
strVal = Repository.SQLQuery(sSql)
If InStr(strVal, "0") > 0 Then
If UsePrompt = true Then
Session.Output oElement.name & " is unique!!"
end if
Else
If UsePrompt = true Then
Session.Prompt oElement.name & " is NOT Unique!!", promptOK
Else
Session.Output oElement.name & " is NOT Unique!!"
End If
End If
End if
End Sub
sub OnProjectBrowserScript()
' Get the type of element selected in the Project Browser
dim treeSelectedType
dim theElement as EA.Element
treeSelectedType = Repository.GetTreeSelectedItemType()
' Handling Code: based on the itemtype a specific sub is selected
' For package this is a recursive implementation
select case treeSelectedType
case otElement
' Code for when an element is selected
set theElement = Repository.GetTreeSelectedObject()
CheckUniqueElement theElement.ElementID
case otPackage
' Code for when a package is selected
dim thePackage as EA.Package
set thePackage = Repository.GetTreeSelectedObject()
CheckPackage(thePackage.PackageID)
case otDiagram
' Code for when a diagram is selected
dim theDiagram as EA.Diagram
set theDiagram = Repository.GetTreeSelectedObject()
CheckDiagram(theDiagram.DiagramID)
case else
' Error message
Session.Prompt "This script does not support items of this type.", promptOK
end select
Session.OutPut "VALIDATION COMPLETE!!"
end sub
OnProjectBrowserScript
Neem voor meer informatie over dit script gerust contact met ons op