我想从我的外部java程序生成一个活动图。我现在的问题是添加一个结构化的活动(带有一个子活动图)。
这是我的代码:
//Add the structured activity to the package
Element structActivityElement= elements.AddNew("My Structured Activity","Activity");
structActivityElement.SetSubtype(8);
//add activitydiagram to the structured activity
Diagram newDiagram = structActivityElement.GetDiagrams().AddNew("SubActivityDiagram", "Activity");
newDiagram.Update();
structActivityElement.Update();
elements.Refresh();
//Add the element to the root activity diagram
DiagramObject dob = dobs.AddNew("", "");
dobs.Refresh();
//reference the DiagramObject to the before created element
dob.SetElementID(element.GetElementID());
dob.Update();
dobs.Refresh(); 运行此命令后,我在Enterprise Architect中只看到一个正常的活动。通常,当我双击一个结构化的活动时,它会显示子活动图,但是当我双击这个生成的活动时,什么也不会发生。有谁有主意吗?
元素类具有属性"CompositeDiagram“。但是没有像这样的方法
setCompositeDiagram()问候
发布于 2014-05-22 16:36:04
看起来您已经正确地创建了图表,因此您应该在项目浏览器中看到它(您可能需要调用strActionElement.GetDiagrams().Refresh())。但是一个元素可以包含一个不是复合的图。事实上,一个元素可以包含任意数量的图,但只有一个图可以是复合图,当您双击另一个图中的元素时,它就会打开。
没有setCompositeDiagram()方法,但属性Element.IsComposite是读/写的。这就是您需要设置的内容:
element.IsComposite = 1;
element.Update();我非常确定,如果您设置此属性,并且元素中没有图,则会创建一个图(如果有两个或更多图,则选择第一个图作为复合图)。这意味着,如果您想要默认的图表类型(对于结构化活动,它是活动图),那么您不必以您所做的方式创建它。
发布于 2016-03-09 20:52:07
您应该按照Uffe的建议使用isComposite属性,但是如果由于某种原因该属性不可用,您可以使用以下(vbscript)代码作为解决方法:
'set the given diagram as composite diagram for this element
function setCompositeDiagram (element, diagram)
if not diagram is nothing then
'Tell EA this element is composite
dim objectQuery
objectQuery = "update t_object set NType = 8 where Object_ID = " & element.ElementID
Repository.Execute objectQuery
if element.Type = "Object" then
'Tell EA which diagram is the composite diagram
dim xrefQuery
xrefquery = "insert into t_xref (XrefID, Name, Type, Visibility, Partition, Client, Supplier) values ('"&CreateGuid&"', 'DefaultDiagram', 'element property', 'Public', '0', '"& element.ElementGUID & "', '"& diagram.DiagramGUID &"')"
Repository.Execute xrefquery
elseif element.Type = "Activity" then
'for activities we need to update PDATA1 with the diagramID
dim updatequery
updatequery = "update t_object set PDATA1 = "& diagram.DiagramID & " where Object_ID = " & element.ElementID
Repository.Execute updatequery
end if
end if
end functionhttps://stackoverflow.com/questions/23789275
复制相似问题