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