我正在寻找一个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
答案 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;
}