首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用java编写企业架构师脚本活动图添加结构化活动

使用java编写企业架构师脚本活动图添加结构化活动
EN

Stack Overflow用户
提问于 2014-05-22 00:45:34
回答 2查看 416关注 0票数 0

我想从我的外部java程序生成一个活动图。我现在的问题是添加一个结构化的活动(带有一个子活动图)。

这是我的代码:

代码语言:javascript
复制
//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“。但是没有像这样的方法

代码语言:javascript
复制
setCompositeDiagram()

问候

EN

回答 2

Stack Overflow用户

发布于 2014-05-22 16:36:04

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

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

代码语言:javascript
复制
element.IsComposite = 1;
element.Update();

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

票数 2
EN

Stack Overflow用户

发布于 2016-03-09 20:52:07

您应该按照Uffe的建议使用isComposite属性,但是如果由于某种原因该属性不可用,您可以使用以下(vbscript)代码作为解决方法:

代码语言:javascript
复制
'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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23789275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档