Duplicaten test obv script

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