To have submodel functionality realized, you do not need to derive it from the abstract "__Subgraph__" class.
You want to use the "Model pointer" class attribute (a platform attribute, that is available for every class, similiar as GRAPHREP). A step-by-step guide how to define the modelpointer is below:
a) Create a new INTERREF attribute in the class you want to provide sub-model functionality. The INTERREF needs to be defined to as a single model reference.
e.g.
1REFDOMAIN
2 MODREF
3 mt:"Storyboard"
4 max:1
b) Define the "Model pointer" by entering the name of the INTERREF attribute defined in a) as the standard value.
c) READY!
The functionality that is available through the model pointer is:
a) Submodel viewing (expand/shrink): new entries are available in the context menu of such objects (see screenshot)
b) CTRL-Double Click to jump to the model
Interaction with AdoScript is possible. The following commands are available in the Modeling messageport
# check whether an object is expanded
CC "Modeling"IS_EXPANDED objid:id .
#-->RESULT ecode:intValue expanded:boolValue .
# expand the submodel reference by the object
CC "Modeling"EXPAND objid:id .
#-->RESULT ecode:intValue .
# shrink the submodel referenced by the object
CC "Modeling"SHRINK objid:id .
#-->RESULT ecode:intValue .
In case you want to change things in the submodel, you need to interact with the submodel itself.