Преобразовать свойство элемента в атрибут конкретного элемента - PullRequest
0 голосов
/ 05 декабря 2018

Поскольку я довольно новый пользователь, когда дело доходит до Enterprise Architect, я застрял в этой проблеме.

Мне нужно написать скрипт для преобразования каждого элемента, отмеченного как <<property>> вДиаграмма классов, в атрибут этого конкретного класса.

Пока я пришел к этому, и я не уверен, как я могу изменить каждое свойство в атрибут.

Когда я пытаюсьчтобы добавить новый атрибут, например, такой:

selectedObject.Attributes.AddNew("example", "int");

Вылетает с ошибкой, что эта коллекция пустая или не является объектом.

Даже когда я добавляю атрибут в класс вручную, а затемпопробуйте получить к нему доступ с помощью метода selectedObject.Attributes.GetAt(0);, он по-прежнему вылетает с ошибкой: Script.script 'Attributes' is null or not an object, Line: 39.

Ниже приведен мой полный код:

var currentDiagram as EA.Diagram;
currentDiagram = Repository.GetCurrentDiagram();

if ( currentDiagram != null )
{
    // Get a reference to any selected connector/objects
    var selectedObjects as EA.Collection;
    selectedObjects = currentDiagram.SelectedObjects();

    if ( selectedObjects.Count > 0 )
    {
        // One or more diagram objects are selected
        var selectedObject as EA.Element;

        for(var i = 0; i < selectedObjects.Count; ++i)
        {
            selectedObject = selectedObjects.GetAt(i);

            Session.Output(selectedObject.Attributes.GetAt(0));

            selectedObject.Attributes.AddNew("example", "int");
        }

        Session.Output(selectedObject.Name);
    }

1 Ответ

0 голосов
/ 05 декабря 2018
selectedObjects = currentDiagram.SelectedObjects();

возвращает элементы диаграммы.Сначала необходимо извлечь элемент.

elemId = selectedObjects.getat(0).elementId:
element = Repository.GetElementByID(elemId);

вернет первый элемент выбранных элементов диаграммы.


Предыдущая ошибка

На самом деле ваш код использует

selectedObject.Attributes.AddNew();

, что, конечно, не сработает, поскольку вам нужно (как вы упомянули выше) указать два параметра: имя и (в конце концов, пустой) тип.Обратите внимание, что имя должно быть уникальным.

Таким образом, оно должно быть

attr = selectedObject.Attributes.AddNew("theName", "someType");
attr.update();

(Извините, я не знаю, как объявить новую переменную attr на языке, который вы используете.) * * тысяча двадцать-один

...