‎28-11-2018 12:49 PM
Hi,
I've written a macro in MEGA 2009 that made a copy of an existing class and its attributes. Now I want to use this in HOPEX V2R1.
Sub CmdInvoke (objMega, intCommandNumber)
Dim aDuplicateObject
Dim oPackage, iPackage
Dim PackageId
'Dim oDiagram
Dim oAttr, iAttr
Dim aDuplicateAttribute
Dim NewName
Dim ExpType
oPackage = objMega.getcollection("OwnerPackage")
if oPackage.count = 1 then
for each iPackage in oPackage
NewName = Create_New_Name(objMega.GetProp("Short Name"), iPackage)
set aDuplicateObject = iPackage.Getcollection("OwnedClass").Create(NewName)
aDuplicateObject.SetProp "SQLName", objMega.GetProp("SQLName")
aDuplicateObject.SetProp "Comment", objMega.GetProp("Comment")
aDuplicateObject.GetCollection("OwnerPackage").Add(iPackage)
'Attributes
oAttr = objMega.GetCollection("Attribute")
for each iAttr in oAttr
set aDuplicateAttribute = aDuplicateObject.GetCollection("Attribute").Add(iAttr.GetProp("Local Name"))
aDuplicateAttribute.SetProp "Length", iAttr.GetProp("Length")
aDuplicateAttribute.SetProp "Decimal", iAttr.GetProp("Decimal")
aDuplicateAttribute.SetProp "SQLName", iAttr.GetProp("SQLName")
aDuplicateAttribute.SetProp "DEX Enumeration", iAttr.GetProp("DEX Enumeration")
aDuplicateAttribute.SetProp "Comment", iAttr.GetProp("Comment")
aDuplicateAttribute.SetProp "Order", iAttr.GetProp("Order")
'ExpressionType
ExpType= iAttr.getCollection("TypeClass")
if exptype.count = 1 then
aDuplicateAttribute.GetCollection("TypeClass").Add(ExpType.Item(1))
end if
next
next
else
msgbox "niks gevonden"
end if
End Sub
function Create_New_Name(ClassName, iPackage)
dim oClass
dim ClaSuffixCount
dim strCount
Dim RetVal
Dim DQ
DQ = """"
BoolNameOk = false
for ClaSuffixCount = 1 to 9
if len(ClaSuffixCount) = 1 then
strCount = "0" & CStr(ClaSuffixCount)
else
strCount = CStr(ClaSuffixCount)
end if
oClass = iPackage.GetSelection("Select Class where [short name] = " & dq & ClassName & "_" & strCount & dq)
if oClass.Count = 0 then
RetVal = ClassName & "_" & strCount
exit for
end if
next
Create_New_Name = RetVal
end functionThis actually works fine, but for 1 thing. The name of the attributes of the class is not correctly set:
Instead of the name (like ID or Aliasname) I get the value "(Uninitialized)"
Anyone any idea what I should change in my code so the name is copied?
tnx.
Solved! Go to Solution.
‎29-11-2018 11:19 AM
Hi Jerome,
thank you for the response. We will discuss the proposed solution.
But given your answer that the name is changed to '(unitialised)' when the data type is changed, i've also tested another workaround:
'ExpressionType
ExpType= iAttr.getCollection("TypeClass")
if exptype.count = 1 then
aDuplicateAttribute.GetCollection("TypeClass").Add(ExpType.Item(1))
end if
aDuplicateAttribute.SetProp "Local Name", iAttr.GetProp("Local Name")'Reset the name after the attributes was connected to the TypeClass.
This also works. So we will see what's the best solution for now.
Kind regards,
Jeroen.
‎28-11-2018 02:24 PM
Hello
This may not be related to the script.
Try to create the same data in interactive mode.
There is a known issues about Attribute (DM) in Entity (DM)
See KB https://community.mega.com/t5/custom/page/page-id/mega-kb-solution?sid=50157000001H7QTAA0