Enterprise Architect中“在所有图表中查找”的等效功能

时间:2014-04-08 13:34:44

标签: enterprise-architect

我正在寻找一个API函数,对应于"在所有图表中查找" -function(Strg + U)在Enterprise Architect中。

element提供了属性图,它应该返回一组图表,但在我的情况下它总是返回一个空列表。这是错误的方式吗?

编辑: 我很高兴能够返回一个包含元素的图表集合的函数。

解决方案:

public List<EA.Diagram> getAllDiagramsOfElement(EA.Element element){
        String xmlQueryResult = repository.SQLQuery(
                            "select dobj1.Diagram_ID " + 
                            "from t_diagramobjects dobj1 " +
                            "where dobj1.Object_ID = " + element.ElementID+";");
        XmlDocument xml = new XmlDocument();
        xml.LoadXml(xmlQueryResult);
        XmlNodeList xnList = xml.SelectNodes("/EADATA/Dataset_0/Data/Row");
        List<EA.Diagram> result = new List<EA.Diagram>();

        foreach (XmlNode xn in xnList){
            result.Add(repository.GetDiagramByID(Convert.ToInt32(xn["Diagram_ID"].InnerText)));
        }
        return result;
}

亲切的问候 MK

3 个答案:

答案 0 :(得分:2)

您可能必须使用查询

试试这个

select * from t_diagramobjects dobj1, t_diagramobjects dobj2 where dobj1.object_id=dobj2.object_id and dobj1.diagram_id!=dobj2.diagram_id;

答案 1 :(得分:0)

如果您希望继续使用API​​,则必须递归地遍历模型树中的包,将图表添加到集合中(ok,VBScript中的Dictionary对象)。 然后你会从Diagrams中找到所有的Diagramobjects。然后,DiagramObjects与Elements相关(请记住,Element可以用更多的图表来表示。)

另一种方法可能是使用Repository.SQLQuery方法,该方法应该返回XML格式的结果集(我还没有测试过)。但是你需要在机器上存在MSXML来解析它(并跟上版本)。

通常,如果您想扫描整个模型并且不需要父子关系,那么SQL应该更适合。反之亦然。

答案 2 :(得分:0)

我在Enterprise Architect Add-in Framework中有同样的功能,在课程ElementWrapper中实现:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

Model类中的函数getDiagramsByQuery看起来像这样

//returns a list of diagrams according to the given query.
//the given query should return a list of diagram id's
public List<Diagram> getDiagramsByQuery(string sqlGetDiagrams)
{
    // get the nodes with the name "Diagram_ID"
    XmlDocument xmlDiagramIDs = this.SQLQuery(sqlGetDiagrams);
    XmlNodeList diagramIDNodes =
        xmlDiagramIDs.SelectNodes(formatXPath("//Diagram_ID"));
    List<Diagram> diagrams = new List<Diagram>();
    foreach (XmlNode diagramIDNode in diagramIDNodes)
    {
        int diagramID;
        if (int.TryParse(diagramIDNode.InnerText, out diagramID))
        {
            Diagram diagram = this.getDiagramByID(diagramID);
            diagrams.Add(diagram);
        }
    }
    return diagrams;
}