2015-06-09 33 views
1

我正在尝试使用C#脚本来重新创建Enterprise Architects功能获取所有最新信息。我已经succeedet通过扫描每包和期待,如果它的版本用下面的代码控制,这样做:在Enterprise Architect中获取所有版本控制软件包的最快方法。

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不返回空集,因为它是没有任何元素我寻找。

SqlQuiery似乎给了我想要的,但格式错误。我不知道如何从它给我的XML中获取软件包。有没有办法做到这一点?

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

回答

0

您应该只使用查询来查询包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; 
} 
相关问题