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

时间:2018-12-05 17:17:01

标签: enterprise-architect jscript

由于我是Enterprise Architect的新手,所以我一直陷在这个问题中。

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

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

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

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

由于该集合为null或不是对象的错误而崩溃。

即使我手动向类添加属性,然后尝试使用方法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 :(得分:0)

selectedObjects = currentDiagram.SelectedObjects();

返回图元素。您需要先检索元素。

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

将返回所选图表元素的第一个元素。


上一个错误

实际上您的代码使用

selectedObject.Attributes.AddNew();

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

应该是

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

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