如何通过Enterprise Architect API打开Image Manager

时间:2018-06-18 05:52:39

标签: c# image enterprise-architect

我正在通过C#插件开发Enterprise Architect。我需要通过自动化显示图像管理器,用户可以直接添加图像添加图像"添加图像"按钮单击表单。

我使用API​​ Repository.InvokeConstructPicker()但它只打开选择包/类/组件窗口。是否有可用于打开图像管理器的EA API。

1 个答案:

答案 0 :(得分:3)

不,没有。没有文档的Respository.CustomCommand可以打开几个属性窗口。但图像管理器不是其中的一部分(或者尚未发现要提供的参数)。

请参阅下面的Edit2,了解如何向表中添加新值。

编辑:根据另一个问题,我不得不深入研究这个问题。

我发现虽然EA导入了许多不同的图像格式,但它内部使用PNG来存储图像。显然他们的BMP导入器不喜欢所有BMP格式(不是那么深,但我似乎记得有一些8/16位的东西;典型的Windoze怪异)。无论如何,我使用这个Python代码片段来检索以前导入EA的一些测试图像数据:

import sys
import win32com.client
import base64
import xml.etree.ElementTree

eaRep = None
try:
    eaApp = win32com.client.GetActiveObject(Class="EA.App")
    eaRep = eaApp.repository
except:
    print "failure to open EA"
    sys.exit(2)

def dump():
    sqlRes = eaRep.SQLQuery("SELECT * FROM t_image")
    root = xml.etree.ElementTree.fromstring(sqlRes)
    for dataset in root:
        for data in dataset:
            for row in data:
                name = row[1].text
                print name
                data = row[3].text
                png = base64.standard_b64decode(data)
                file = open("c:/" + name + ".png", "wb")
                file.write(png)
                file.close()

dump()

这正确地从数据库中提取了图像。

Edit2 :我假设EA将png存储为base64,但事实并非如此。 EA仅在SQLQuery返回时提供base64。但他们在内部只是将原始png存储在Image中。所以,遗憾的是,你不能使用Repository.Execute,因为它无法传输二进制数据 - 或者至少我还没弄清楚如何做到这一点。作为解决方法,您可以查看Repository.ConnectionString并打开与数据库的本机连接。在表格中插入新图片后,您可以通过ImageID使用它们。

t_image的内容:

  • ImageID:您只需创建一个唯一ID
  • Name:任意字符串
  • Type:修复字符串位图
  • Image:png的blob

这是一个本机连接到EAP文件的Python代码段:

import pyodbc
db_file = r'''C:\Documents and Settings\Administrator\Desktop\empty.eap'''

odbc_conn_str = 'DRIVER={Microsoft Access Driver (*.mdb)};DBQ=' + db_file
conn = pyodbc.connect(odbc_conn_str)
cursor = conn.cursor()
cursor.execute("select * from t_image")
row = cursor.fetchone()
if row:
    print(row)

您可以使用它实际发出INSERTUPDATE来修改t_image,而不是使用图像数据打印行(显示其内容是png-blob)