在Enterprise Architect中获取所有版本控制包的最快方法

本文关键字:方法 版本控制 Architect Enterprise 获取 | 更新日期: 2023-09-27 17:54:23

我正在尝试使用c#脚本来重新创建企业架构师的功能。我已经成功地扫描了每个包,并查看其版本是否由以下代码控制:

Collection models = eaRepository.Models;
foreach (Package package in models) {
    resolveRecursivelyGetLatestOnPackage(package);
}
eaRepository.ScanXMIAndReconcile();
Console.WriteLine("GetLatestFinished.");
private void resolveRecursivelyGetLatestOnPackage(Package package)
{
    if (package.IsVersionControlled) {
        package.VersionControlGetLatest(false);
    }
    foreach (Package childPackage in package.Packages) {
            resolveRecursivelyGetLatestOnPackage(childPackage);
    }
}

然而,我使用的EAP模型相当大,上层代码需要很多时间,因为它扫描所有包。因此,我试图通过使用Select语句获得所有版本控制包。

SELECT * 
FROM t_package 
WHERE IsControlled = True 

遗憾的是,我没有办法在EA的自动化界面中接收包的集合。

我已经试过了:

eArepository.GetElementSet ("SELECT * FROM t_package WHERE IsControlled = True", false);
eArepository.SQLQuery ("SELECT * FROM t_package WHERE IsControlled = True");

getElementSet返回一个空集合,因为它不是我要搜索的元素。

SQL查询似乎返回我想要的,但在错误的格式。我不知道如何从它返回的XML中获取包。有办法做到这一点吗?

如何快速获得所有版本控制包的集合?

在Enterprise Architect中获取所有版本控制包的最快方法

您应该只使用查询查询包ID,然后使用Repository.GetPackageByID()获取EA.Package对象。

查询变成

"SELECT Package_ID FROM t_package WHERE IsControlled = True"

您可以在Enterprise Architect Addin Framework

中使用与此操作类似的操作。
/// <summary>
/// returns the elementwrappers that are identified by the Object_ID's returned by the given query
/// </summary>
/// <param name="sqlQuery">query returning the Object_ID's</param>
/// <returns>elementwrappers returned by the query</returns>
public List<ElementWrapper> getElementWrappersByQuery(string sqlQuery)
{
  // get the nodes with the name "ObjectID"
  XmlDocument xmlObjectIDs = this.SQLQuery(sqlQuery);
  XmlNodeList objectIDNodes = xmlObjectIDs.SelectNodes(formatXPath("//Object_ID"));
  List<ElementWrapper> elements = new List<ElementWrapper>();
  foreach( XmlNode objectIDNode in objectIDNodes ) 
  {
    ElementWrapper element = this.getElementWrapperByID(int.Parse(objectIDNode.InnerText));
    if (element != null)
    {
        elements.Add(element);
    }
  }
  return elements;
}