Creating Element with specific Stereotype through a script

Hi everyone, 

I have tried to creat an element with a specific Stereotype through a script. My problem so far: I want to create an Element of a specific stereotype. My first attempt was to record a macro when doing the creation manually. The resulting code did not run:

CODE: SELECT ALL

import com

from com.nomagic.magicdraw.automaton import AutomatonMacroAPI
from com.nomagic.magicdraw.core import Application
from com.nomagic.magicdraw.openapi.uml import SessionManager
from com.nomagic.uml2.ext.magicdraw.classes.mdkernel import VisibilityKindEnum

try:
SessionManager.getInstance().createSession("Automaton_Macro_Script_Execute")
ele0 = AutomatonMacroAPI.getModelData()
ele1 = AutomatonMacroAPI.createElement("Class")
ele1.setVisibility(VisibilityKindEnum.getByName("public"))
ele2 = ele0._getChild("09_imported_source_documents")._getChild("20230224_...")._getChild("QXS_...")
ele1.setOwner(ele2)
ele3 = ele0
ele1.getApplied_Stereotype().add(ele3)
ele1 = AutomatonMacroAPI.addStereotype(ele1, ele3)
ele1.setText("")
ele1.setId("")
ele1.setName("Requirements1")
ele1.setId("459")
ele1.setActive_Hyperlink(None)
ele1.setTo_Do(None)
except:
SessionManager.getInstance().closeSession()
raise
else:
SessionManager.getInstance().closeSession()


(Note that I shortened some string names by “..”. )

The Problem is that in the code line “ele1 = AutomatonMacroAPI.createElement("Class")” “ele1” is “None” and due to this all further calls of this object fail.


My second Attempt was to use some example code coming with CAMEO:


CODE: SELECT ALL

from com.nomagic.magicdraw.core import Application
from com.nomagic.magicdraw.core import Project
from com.nomagic.magicdraw.core.project import ProjectsManager
from com.nomagic.magicdraw.core.project import ProjectDescriptorsFactory
 
from java.lang import Integer
from java.lang import System
from java.lang import String


# Getting starting points

projectsManager = Application.getInstance().getProjectsManager();
project = projectsManager.getActiveProject()
factory = project.getElementsFactory()

pack = factory.createPackageInstance()
pack.setName("p1")
pack.setOwner(project.getModel())

for i in range(10):
clazz = factory.createClassInstance();
clazz.setName("c" + Integer.toString(i));
clazz.setOwner(pack);



Here I get a valid handle of the object I created. The Question at this point is how to assign a specific stereotype to the object.


Thanks in advance for your help,


Chris