在 Enterprise Architect 中获取所有版本控制包集合的最快方法
Fastest way to get a collection of all version controlled packages in Enterprise Architect
我正在尝试使用 C# 脚本重新创建 Enterprise Architects 功能获取所有最新信息。我已经成功地扫描了每个包并查看其版本是否由以下代码控制:
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 return 是一个空集合,因为它不是我要搜索的元素。
SQL 查询似乎 return 我想要的,但格式错误。我不知道如何从 XML 它 return 中取出包裹。有办法吗?
如何快速获取所有版本控制包的集合?
您应该只使用查询来查询包 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;
}
我正在尝试使用 C# 脚本重新创建 Enterprise Architects 功能获取所有最新信息。我已经成功地扫描了每个包并查看其版本是否由以下代码控制:
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 return 是一个空集合,因为它不是我要搜索的元素。
SQL 查询似乎 return 我想要的,但格式错误。我不知道如何从 XML 它 return 中取出包裹。有办法吗?
如何快速获取所有版本控制包的集合?
您应该只使用查询来查询包 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;
}