2014-02-17 83 views
1

我想以編程方式向Enterprise Architect圖中的連接器添加註釋。 到目前爲止,我只設法增加註釋元素與下面的代碼:Enterprise Architect 9:向連接器添加註釋

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」會導致異常。 如果有人能幫助我,我會很開心!

此致敬禮

回答

2

EA處理筆記鏈接到連接器非常不同從筆記鏈接到元素。

連接器始終在兩個元素之間運行。在你的例子中,有四個元素(Activity中的兩個名爲O1和O2,以及兩個Note;這些通常是無名的)和三個連接器(O1-O2,「這就是我所擁有的」--O2,另一個來自O1跑離圖像的邊緣)。

O1-O2連接器看起來像「我想要的」連接器的事實上並不是連接器 - 它看起來就像一個。在GUI中,到連接器的鏈接無響應,您無法爲其提供屬性對話框。這就是爲什麼。

筆記鏈接到連接器的事實存儲在note元素本身的MiscData集合中。你需要做的是將字符串idref=<connector_id>;添加到MiscData(3)。您可能還需要到NoteSubtype字段設置爲1。

然而,MiscData是隻讀的,所以你必須直接進入數據庫,並更新t_object(其中元素存儲)。表中的MiscData在API中對應於PDATA1等。需要注意的是指數相差一個,所以MiscData(0)對應PDATA1

您還需要使用無證Repository.Execute()因爲Repository.SQLQuery()只允許select語句。

所以下面應該工作:

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值在API中是沒有記錄的,因爲Element.MiscData的內容,所以這個解決方案不是未來的證明(但它不太可能EA會改變它處理這些事情的方式)。

+0

非常感謝您的解釋!它有助於我理解筆記與連接器的連接。 現在我運行另一個問題: newNote.MiscData(3)=「idref =」+ conn.ConnectorID +「;」; 不起作用,因爲MiscData不是一種方法。而newNote.MiscData [3]是隻讀的。如何正確設置該值? – user3318587

+0

我發現了這個問題的解決方案:我們必須通過SQL來設置PDATA4,這對應於API中的MiscData [3]。 (參考:https://leanpub.com/InsideEA/read)。 (「UPDATE t_object SET PDATA4 = \」idref1 =「+ conn.ConnectorID +」; \「WHERE Object_ID =」+ newNote.ElementID);這個行可以完成這個任務:Repository.Execute(「UPDATE t_object SET PDATA4 = \」idref1 =「+ conn.ConnectorID +」; \「WHERE Object_ID =」+ newNote.ElementID); 之後,需要更新圖表以使SQL語句的效果可見。 – user3318587

+0

您需要直接操作底層數據庫表。我已經相應地更新了代碼示例。 – Uffe

相關問題