我正在为我的公司进行非常大的UML文档项目。我们正在尝试为Enterprise Architect中的现有程序建模,以更好地记录它。由于应用程序的大小,我们选择将图分解成主程序包中的单独程序包(例如GUI,GPS,可移动媒体等)。这对于每个部分的单个类图都非常有用。但是,我想将类图从每个包拖放到主图上,以显示它们如何作为系统连接。

是否可以编写脚本功能来获取链接的图并自动将它们全部链接起来,就像代码工程导入的方式一样?我在代码导入的最后一步中注意到,它添加了关联和概括。我确定了导入代码时Sparx是否可以做到,以后我应该可以在主文档中将它们链接起来。关于如何实现这一目标的任何想法?

如果不可能,是否有办法将创建的图从代码工程链接到我的软件包中已经存在的图?我认为能够右键单击类图并从主文档中“查找包中”以查看更多详细信息将很有用。

最佳答案

您基本上要做的就是创建一个概览图,然后从浏览器中拖放相关图。这提供了一个选择框

c++ - 大型系统的企业架构师类图-LMLPHP

您只保留第一个选择Diagram Frame的位置。 EA将创建一个新对象,并使用图表名称中的建议名称(您可以保留该名称,也可以在需要时更改它)。现在,拖动的图将出现在概览图上的命名框架内。您无法缩放此图,因此它将具有原始图的大小加上其周围的框架。

注意:您可以在上面的对话框中使用Hyperlink在图之间创建漂亮的和简短的链接以进行导航。

现在是脚本部分。我将使用元语言,但您可能会猜出如何以首选语言使用它。首先是找到总览图。您可以通过在浏览器中右键单击并使用Copy/Copy Node GUID...来查询其图表guid。现在使用该ID,您可以通过以下方式找到它(以下示例guid):

overview = rep.GetDiagramByGUID("{A006B95E-1237-4778-A339-D1B407C6FD5C}")


接下来是找到要显示在概述中的单个图。这取决于您如何找到它们。最终,它们将位于存储库中的某些位置。要在第一个根目录的第一个视图中将第一个图静态加载到第一个包中,您将调用

model = repository.Models.GetAt(0)
view = model.Packages.GetAt(0)
package1 = view.Packages.GetAt(0)
dia1 = package1.Diagrams.GetAt(0)


您可能会使用更智能的方法来迭代并找到相关的图。

现在,有了这些图对象,您就可以创建图框架。这需要放置在包装中的某个位置。为简单起见,我使用package1,但是您最终会将它们放置在概览图的包中。

frame = package1.Elements.AddNew(dia1.Name, "UMLDiagram")
frame.Update()
sql = "UPDATE t_object SET PDATA1=" + str(dia1.DiagramID) + " WHERE Object_ID=" + str(overview.diagramID
repository.Execute(sql)


我知道这是伏都教。 API没有提供将UMLDiagram元素与引用的图链接的方法。因此,必须直接将其插入数据库。

最后,可以将新创建​​的框架对象放置在概览图中:

diagramObj = overview.DiagramObjects.AddNew("l=10;r=110;t=-20;b=-80","")
diagramObj.ElementID = frame.ElementID
diagramobj.Update()


从此EA开始,y轴的坐标从顶部朝向负(l,r,t,b代表猜测)。 EA会将框架扩展到指定大小以上的最小值。

为了查看结果,您需要关闭/打开总览图。我会将其留给您练习:-)

关于c++ - 大型系统的企业架构师类图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40495564/

10-11 15:08