我想以编程方式向Enterprise Architect图表中的连接器添加注释。 到目前为止,我只设法使用以下代码向元素添加注释:
foreach (EA.Element element in Package.Elements)
{
foreach (EA.Connector conn in element.Connectors)
{
EA.Element newNote = Package.Elements.AddNew("MyNote", "Note");
newNote.Notes = "Some string";
newNote.Update();
//position calculation is left out here
EA.DiagramObject k = diagram.DiagramObjects.AddNew(position, "");
k.ElementID = newNote.ElementID;
k.Sequence = 9;
k.Update();
EA.Connector newConn = newNote.Connectors.AddNew("NewLink", "NoteLink");
newConn.SupplierID = conn.SupplierID;
newConn.Update();
EA.DiagramLink newLink = diagram.DiagramLinks.AddNew("newLink", "NoteLink");
newLink.ConnectorID = newConn.ConnectorID;
newLink.Update();
图像可能会让我更清楚我真正想要的东西:
http://www.directupload.net/file/d/3536/6bkijpg2_png.htm
我的问题是:如何将说明附在连接器上?我假设我必须更改此行“newConn.SupplierID = conn.SupplierID;”,但“newConn.SupplierID = conn.ConnectorID”会导致异常。 如果有人可以帮助我,我会很高兴的!
祝你好运
答案 0 :(得分:2)
EA处理连接器的注释链接与元素的注释链接完全不同。
连接器始终在两个元素之间运行。在您的示例中,有四个元素(两个类型Activity
名为O1和O2,两个类型Note
;这些通常是无名的)和三个连接器(O1 - O2,“这就是我有“ - O2,O1中的一个从图像的边缘流出。”
看起来像是“我想要的东西”的连接器到O1-O2连接器的东西实际上根本不是连接器 - 它看起来就像一个。在GUI中,指向连接器的链接没有响应,您无法为其启用属性对话框。这就是原因。
注释链接到连接器的事实存储在注释元素本身的MiscData
集合中。您需要做的是将字符串idref=<connector_id>;
添加到MiscData(3)
。您可能还需要将Note
的{{1}}字段设置为1。
但是,Subtype
是只读的,因此您必须直接进入数据库并更新MiscData
(存储元素的位置)。 API中的t_object
对应于表中的MiscData
等。请注意,索引相差一,因此PDATA1
对应MiscData(0)
等等。
您还需要使用未记录的PDATA1
,因为Repository.Execute()
仅允许Repository.SQLQuery()
语句。
所以以下内容应该有效:
select
您可能需要在数据库更新后设置元素子类型,我不确定。
API中没有记录 foreach (EA.Connector conn in element.Connectors) {
EA.Element newNote = Package.Elements.AddNew("MyNote", "Note");
newNote.Subtype = 1;
newNote.Notes = "Some string";
newNote.Update();
repository.Execute("update t_object set PDATA4='idref=" + conn.ConnectorID + ";' " +
where Object_ID=" + newNote.ElementID);
//position calculation is left out here
EA.DiagramObject k = diagram.DiagramObjects.AddNew(position, "");
k.ElementID = newNote.ElementID;
k.Sequence = 9;
k.Update();
}
值,Element.Subtype
的内容也是如此,因此这个解决方案不是面向未来的(但EA不会改变它处理这些东西的方式) )。