企业架构师脚本使用java - activitydiagram添加结构化活动



我想从我的外部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()

看起来您已经正确地创建了图表,因此您应该在项目浏览器中看到它(您可能需要调用strActionElement.GetDiagrams().Refresh())。但是一个元素可以包含一个图,而不是复合的。事实上,一个元素可以包含任意数量的图,但是只有一个图可以是复合图,当您双击另一个图中的元素时,它将被打开。

没有setCompositeDiagram()方法,但Element.IsComposite属性是读写。这就是你需要设置的:

element.IsComposite = 1;
element.Update();

我很确定,如果您设置了该属性,并且元素中没有图表,则会创建一个(如果有两个或更多图表,则选择第一个作为组合图)。这意味着您不必按照您所做的方式创建它,只要您想要默认的图类型(对于结构化活动来说是一个活动图)。

你应该像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 function

相关内容

  • 没有找到相关文章

最新更新