Доступ к вложенным элементам по сценарию в Enterprise Architect - PullRequest
0 голосов
/ 21 декабря 2018

Я новичок в Enterprise Architect, и мне нужно написать небольшую программу, чтобы выбрать все типы «Activity» в проекте Enterprise Architect, чтобы установить конкретное значение свойства «Alias» (не то же самое, но следуя определенной логике).Я думаю, что сделать это с помощью инструмента сценариев, но у меня были некоторые трудности с доступом к любому объекту деятельности с помощью сценариев.

Я нашел ссылку 1 «Объектная модель Enterprise Architect», но я могне решить мой вопрос.Ниже прилагается дерево проекта.

Здесь есть некоторый код JavaScript, который я пробовал:

var elem as EA.Element;
elem = Repository.GetTreeSelectedObject();
elem.Alias = "Hi at all";

Но у этого кода есть 2 проблемы:

1) его нужно выбратьдействие с указателем мыши;

2) после выполнения кода поле «Псевдоним» действия будет пустым.

enter image description here

1 Ответ

0 голосов
/ 22 декабря 2018

1.Как обработать все действия

Есть разные способы справиться с этим.Один из вариантов - начать с выбранного пакета и выполнить итерацию по каждому из принадлежащих элементов;и принадлежащие им элементы.
Это было бы что-то вроде этого (C #, но вы понимаете суть):

public void main()
{
    var selectedPackage = Repository.GetTreeSelectedPackage();
    processPackage(selectedPackage);
}

private void processPackage(EA.Package package)
{
    //process owned elements
    foreach (EA.Element element in package.Elements)
    {
        processElement(element);
    }
    //process SubPackages
    foreach(EA.Package subPackage in package.Packages)
    {
        processPackage(subPackage);
    }
}
private void processElement(EA.Element element)
{
    //test type and steroetype to make sure we only treat Activities
    if (element.Type == "Activity" && element.Stereotype == "Activity")
    {
        element.Alias = "newAlias";
        element.Update();
    }
    //process owned Elements
    foreach(EA.Element subElement in element.Elements)
    {
        processElement(subElement);
    }
}

Это работает нормально для ограниченного числа элементов, но становится очень медленнымесли вы хотите обрабатывать большее количество элементов, разбросанных по большой модели.

В этом случае лучше использовать Repository.GetElementSet(MySQLSelectQuery,2).Используйте эту операцию с запросом SQL (второй параметр должен быть 2), чтобы выбрать именно те элементы, которые вам нужны.
Это будет на порядок быстрее, чем итерация по всей модели.

Примерыэтого подхода (и многого другого) в моих репозиториях на github:

2.Как сохранить обновления

Это достаточно просто.Обязательно вызовите Update() после изменения любого свойства объекта API.

...