Uml 删除Enterprise Architect中图表中未找到的所有元素
我们有一个大型项目,我正在使用EnterpriseArchitectVersion10将项目中的一个小包反向工程为UML,以便进行重构。我只想包括我将要创建的图中包含的元素(我知道这很愚蠢,但我们不能用一个模型来管理它们) 我想反转所有源代码,然后删除所有没有出现在我的图表中的元素。有办法做到这一点吗?我知道我可以从GUI中找到图表中的任何给定元素,那么至少有一种方法来编写脚本吗 另一种方法是手动选择所有依赖项并仅反转那些文件,我可能最终会这样做Uml 删除Enterprise Architect中图表中未找到的所有元素,uml,reverse-engineering,enterprise-architect,Uml,Reverse Engineering,Enterprise Architect,我们有一个大型项目,我正在使用EnterpriseArchitectVersion10将项目中的一个小包反向工程为UML,以便进行重构。我只想包括我将要创建的图中包含的元素(我知道这很愚蠢,但我们不能用一个模型来管理它们) 我想反转所有源代码,然后删除所有没有出现在我的图表中的元素。有办法做到这一点吗?我知道我可以从GUI中找到图表中的任何给定元素,那么至少有一种方法来编写脚本吗 另一种方法是手动选择所有依赖项并仅反转那些文件,我可能最终会这样做 谢谢是的,您可以编写脚本。这会有点牵扯,但可以做
谢谢是的,您可以编写脚本。这会有点牵扯,但可以做到 没有即时的API支持来查找您要查找的内容,因此您需要进入数据库以查找任何图表中未显示的所有元素。完成此操作后,可以从其包含的包中删除每个这样的元素 元素存储在
t\u object
中,图表对象(一个图表中一个元素的图形表示)存储在t\u diagramobjects
中。t\u diagramobjects
中的条目引用了图表(diagram\u ID
)和正在显示的元素(Object\u ID
)
(如果你是EA黑客新手,是的,它们在API中被称为元素,在数据库中被称为对象。这只是生活中的一个事实。)
因此:
t\u diagramobjects.object\u ID
中未出现的所有t\u object.object\u ID
Repository.GetElementByID()
,检索每个元素
Repository.GetPackageByID(element.PackageID)
获取元素的包含包GetAt()
旋转包的元素
集合,找到元素
,该元素的ElementID
与您要查找的元素匹配,然后Delete()
删除它。不要忘了Refresh()
Repository.SQLQuery()
,它允许您对数据库执行select
查询,但您必须解析单个XML字符串的结果
使用Repository.GetElementsByQuery()
更简单,它返回集合中的元素,但这需要将查询预定义为EA搜索。如果使用此选项,可以跳过上面的步骤1和2
当然,您可以直接进入数据库,只需删除所有未从t\u diagramobjects
中引用的t\u object
行。这是一个非常糟糕的主意,它(我很肯定)会给您留下一个损坏的数据库。当您使用API删除内容时,EA会清理所有引用(因此没有连接器悬空,等等)
当然,只有在绝对确定没有其他元素没有显示在需要保留的图表中时,才应该释放这样的脚本。因此,为这个项目做一个临时项目可能是个好主意
最后,请注意,包也是元素,如果您不想通过删除它们所在的包而一次性丢失所有导入的源代码(因为包本身通常不会显示在图表中,是吗?),您可能应该排除t\u object.object\u Type
/Element.Type
“包”
EA内置了一个名为“查找孤儿”的搜索功能。这将列出未出现在图表上的所有元素。您可以运行此搜索(Ctrl+Alt+A,从第一个列表框中选择“图表搜索”,从第二个列表框中选择“查找孤立项”,然后单击“运行”),选择所有结果(Ctrl+A)并删除所有结果(Ctrl+Del)。但是,这是由您自己承担的风险-模型中的元素没有问题,但任何图表上都没有。我知道这很旧,但我认为我有一些贡献:)
最简单的答案已经给出了,那就是“寻找孤儿”这件事。现在,在清理我继承的一个大型EA存储库时,我注意到有些情况下,给定的对象可能不在图中,但子对象会在图中。在这种情况下,您不希望清理父对象,否则可能会丢失子对象
因此,我精心设计了以下搜索:
select
o.ea_guid as CLASSGUID, o.object_type as CLASSTYPE, *
from
t_object o
where
o.Object_Type != 'Package'
and
not exists (select t_diagramobjects.Diagram_ID from t_diagramobjects where t_diagramobjects.Object_ID = o.object_ID)
and
not exists (select t2.OBJECT_ID from t_object t2 where t2.PARENTID=o.OBJECT_ID)
它只会返回“没有父母的孤儿”。当然,它可以改进为只返回“没有父母本身就是孤儿的孤儿”,但我不需要,可以做一些手工工作
(您可以通过Control+F/Builder/SQL访问SQL搜索界面)Enterprise Architect版本12中的用户界面在查找孤立元素时似乎略有更改
按Ctrl+F键“在项目中查找”
从搜索类别下拉列表中选择“图表搜索”
从搜索下拉列表中选择“查找孤立项”
留空以查找所有孤儿
单击运行或按Enter键
很高兴知道我可以写这个。但是,我决定编写一个脚本,将我感兴趣的源文件中包含的所有文件复制到一个文件夹中,然后将所有这些文件反转,这样做会更容易。我不担心我感兴趣的班级的家长,因为他们很少。谢谢在未来的整个项目中,我们将朝着1个模型前进,但我们还没有做到。比(Ctrl+Alt+A)更小的“断指”是(Ctrl+F)。但是,找到未使用元素的好技巧。