Enterprise Architect 9:向连接器添加注释

时间:2014-02-17 10:13:32

标签: c# enterprise-architect

我想以编程方式向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”会导致异常。 如果有人可以帮助我,我会很高兴的!

祝你好运

1 个答案:

答案 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不会改变它处理这些东西的方式) )。