首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用java - add CustomProperty编写企业架构师脚本

用java - add CustomProperty编写企业架构师脚本
EN

Stack Overflow用户
提问于 2014-10-09 13:47:56
回答 1查看 1.1K关注 0票数 3

我想在我的活动图中添加一个图例,它将由java和ea-api以编程方式生成。我已经知道如何创建图例元素并在图表中显示它(Type:"Text“und Subtype: 76):

代码语言:javascript
复制
Element legend = elements.AddNew("Color Legend", "Text");
elements.Refresh();

legend.SetSubtype(76);
legend.Update();

//Show in diagram
DiagramObject diagramObject = diagramObjects.AddNew("l=0; r=100; t=0; b=-100;", "");
diagramObjects.Refresh();
// reference the DiagramObject to the before created element
diagramObject.SetElementID(legend.GetElementID());

但这只是一个空洞的传说。所以我的问题是,如何将CustomProperty添加到CustomProperties中。我的第一种方法是以下代码:

代码语言:javascript
复制
Collection<CustomProperty> customProperties = legend.GetCustomProperties();
CustomProperty cp = customProperties.AddNew("LegendEntryTest", "Back_Ground_Color=2124031;");
customProperties.Refresh();
legend.Update();

但这是行不通的,传说仍然是空的

下面是一个例子--传说:

你好,菲尔

编辑在Geert的帮助下,我解决了我的问题。现在,我使用repository.Execute(String sqlStmt)方法在t_xref中插入自定义属性。下面的代码是其工作方式的一个小示例:

代码语言:javascript
复制
//get elementGUID of legend
String legendGUID = legend.GetElementGUID();

//create the description value for one custom_property
String name="TestColor1";
String color="3381504";
int customPropertyIndex = 0;

String description = "@PROP=@NAME="+name+"@ENDNAME;@TYPE=LEGEND_OBJECTSTYLE@ENDTYPE;@VALU=#Back_Ground_Color#="+color+";#Pen_Color#=16777215;#Pen_Size#=1;#Legend_Type#=LEGEND_OBJECTSTYLE;@ENDVALU;@PRMT="+customPropertyIndex +"@ENDPRMT;@ENDPROP;"

//add description part for the legend
description += "@PROP=@NAME=Legend@ENDNAME;@TYPE=LEGEND_STYLE_SETTINGS@ENDTYPE;@VALU=@ENDVALU;@PRMT=@ENDPRMT;@ENDPROP;"

String sqlInsertStmt="INSERT INTO t_xref "
            + "(" 
                + "Client,"
                + "XrefID,"
                + "Type,"
                + "Name,"
                + "Visibility,"
                + "Partition,"
                + "Supplier,"
                + "Description"
            + ") "
            + " VALUES ("
                +"'"+legendGUID+ "',"
                + "'{"+UUID.randomUUID().toString()+"}',"
                + "'element property',"
                + "'CustomProperties',"
                + "'Public',"
                + "'0',"
                + "'&lt;none&gt;',"
                + "'"+description+"'"
            + ");"
                ;

repository.Execute(sqlInsertStmt);

使用java.util.UUID,我为字段XrefID生成一个新的GUID。

顺便提一下:要将RGB颜色转换为Enterprise将接受的颜色,您可以使用以下公式:

代码语言:javascript
复制
 int colorValue = color.getRed() + (color.getGreen() * 256)
            + (color.getBlue() * 256 * 256);

(RGB颜色模型)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-13 07:04:37

您可以尝试使用代码添加自定义属性,但我确信您将不得不求助于SQL hack才能填写所有所需的详细信息。如果检查数据库,您会发现图例的所有自定义属性都存储在表t_xref中的一行中。列客户端包含t_object.ea_guid,描述列包含自定义属性的所有详细信息。我做了一个小测试,这就是描述中存储的内容(我为可读性添加了新行)

代码语言:javascript
复制
@PROP=@NAME=Wit@ENDNAME;@TYPE=LEGEND_OBJECTSTYLE@ENDTYPE;@VALU=#Back_Ground_Color#=16777215;#Pen_Color#=16777215;#Pen_Size#=1;#Legend_Type#=LEGEND_OBJECTSTYLE;@ENDVALU;@PRMT=0@ENDPRMT;@ENDPROP;
@PROP=@NAME=rood@ENDNAME;@TYPE=LEGEND_OBJECTSTYLE@ENDTYPE;@VALU=#Back_Ground_Color#=255;#Pen_Color#=255;#Pen_Size#=1;#Legend_Type#=LEGEND_OBJECTSTYLE;@ENDVALU;@PRMT=1@ENDPRMT;@ENDPROP;
@PROP=@NAME=blauw@ENDNAME;@TYPE=LEGEND_OBJECTSTYLE@ENDTYPE;@VALU=#Back_Ground_Color#=16711680;#Pen_Color#=16711680;#Pen_Size#=1;#Legend_Type#=LEGEND_OBJECTSTYLE;@ENDVALU;@PRMT=2@ENDPRMT;@ENDPROP;
@PROP=@NAME=Legend@ENDNAME;@TYPE=LEGEND_STYLE_SETTINGS@ENDTYPE;@VALU=@ENDVALU;@PRMT=@ENDPRMT;@ENDPROP;

如果我在这里使用Repository.Execute()和一个脏的statement语句来完成任务。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26280146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档