No there isn't.
I wrote something a bit similar as part of a script a while ago.
This operation is used to convert BPMN activities used a "link" on a diagram to local BPMN activities that call this activity using the calledActivityRef tagged value.
Converting to instances is a bit the same thing. You just need to create a new object, set the classifierID to the classifier you are trying to replace, and replace the ElementID on the DiagramObject to the elementID of the new object.
Sets the object name to that of the classifier, and set the composite diagram for objects
function synchronizeObjectNames(diagramObject, diagram)
dim element as EA.Element
set element = Repository.GetElementByID(diagramObject.ElementID)
synchronizeElement element
'set default size for message objects
if element.Type = "Object" AND element.Stereotype = "Message" then
diagramObject.bottom = diagramObject.top - 25
diagramObject.right = diagramObject.left + 40
setFont diagramObject
diagramObject.Update
end if
'check if it is local activity
if element.Type = "Activity" and element.Stereotype = "Activity" and (element.PackageID <> diagram.packageID ) then
'Make a new Activity for this activity
dim callingActivity as EA.Element
dim ownerElement as EA.Element
dim ownerPackage as EA.Package
if diagram.ParentID > 0 then
set ownerElement = Repository.GetElementByID(diagram.ParentID)
set callingActivity = ownerElement.Elements.AddNew("","BPMN2.0::Activity")
else
set ownerPackage = Repository.GetPackageByID(diagram.PackageID)
set callingActivity = ownerPackage.Elements.AddNew("","BPMN2.0::Activity")
end if
'check if callingActivity was created
if not callingActivity is Nothing then
makeCallingActivity callingActivity, element
dim updateDiagramObjectSQL
'set the element of the diagramObject to the new action
updateDiagramObjectSQL = "update t_diagramobjects set object_id = "& callingActivity.ElementID &" where Diagram_ID = " & diagramObject.DiagramID & " and Object_ID = " & element.ElementID
Repository.Execute updateDiagramObjectSQL
'synchronize
synchronizeElement callingActivity
Repository.AdviseElementChange(callingActivity.ElementID)
'copy embedded elements
dim embeddedElement as EA.Element
for each embeddedElement in element.EmbeddedElements
'check if the embedded element is shown on this diagram
' get the diagramObject for the embedded element
dim embeddedDiagramObject
set embeddedDiagramObject = getDiagramObjectFromArray(embeddedElement.elementID, diagramObjects, count)
if not embeddedDiagramObject is nothing then
'if yes then make a new embedded elementin the callingActivity
dim newEmbeddedElement as EA.Element
set newEmbeddedElement = callingActivity.EmbeddedElements.AddNew("","ObjectNode")
newEmbeddedElement.Name = embeddedElement.Name
newEmbeddedElement.Stereotype = "IntermediateEvent"
newEmbeddedElement.Update()
newEmbeddedElement.SynchTaggedValues "BPMN2.0","IntermediateEvent"
newEmbeddedElement.TaggedValues.Refresh
'Copy tagged values
copyTaggedValuesValues embeddedElement, newEmbeddedElement
' set the element id of the diagramobject to the new embedded element
'embeddedDiagramObject.ElementID = newEmbeddedElement.ElementID
'embeddedDiagramObject.Update
'for some reason the update doesn't want to work. so we do it the hard way
dim updateEmbeddedDiagramObjectSQL
updateEmbeddedDiagramObjectSQL = "update t_diagramobjects set object_id = "& newEmbeddedElement.ElementID &" where Diagram_ID = " & diagramObject.DiagramID & " and Object_ID = " & embeddedElement.ElementID
'Session.Output updateEmbeddedDiagramObjectSQL
Repository.Execute updateEmbeddedDiagramObjectSQL
end if
next
end if
end if
end functionSynchronize function in a second post.