2015-06-09 1 views
1

Я пытаюсь использовать C# Script для воссоздания функциональности 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 Statement.

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, который он мне дает. Есть ли способ сделать это?

Как я могу получить коллекцию всех пакетов с контролируемой версией Fast?

ответ

0

Вы должны запросить только идентификаторы пакета, используя запрос, а затем использовать 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; 
}