将元素 属性 转换为特定元素的属性

Transform an element property into an attribute of the particular element

由于我是 Enterprise Architect 的新用户,所以我遇到了这个问题。

我需要编写一个脚本来将 class 图中标记为 <<property>> 的每个项目转换为该特定 class 的属性。

到目前为止,我已经走到这一步了,但我不确定如何将每个 属性 更改为一个属性。

当我尝试添加这样的新属性时:

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

它崩溃并出现此集合为空或不是对象的错误。

即使我手动将属性添加到 class 然后尝试使用方法 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);
    }
selectedObjects = currentDiagram.SelectedObjects();

returns 图元素。您需要先检索元素。

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

将return选定图表元素的第一个元素。


上一个错误

实际上你的代码使用

selectedObject.Attributes.AddNew();

这当然行不通,因为您需要(如上所述)提供两个参数:名称和(最终为空)类型。注意名称必须是唯一的。

所以应该是

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

(抱歉,我不知道如何用您使用的语言声明新变量attr。)