如何通过 Enterprise Architect 打开图像管理器 API
How to open Image manager through Enterprise Architect API
我正在通过 C# 插件开发 Enterprise Architect。我需要通过自动化显示图像管理器,用户可以在表单中单击 "add image" 按钮直接添加图像。
我使用 API Repository.InvokeConstructPicker() 但它只打开 select package/class/component window。是否有 EA API 可用于打开图像管理器。
没有,有none。有一个未记录的 Respository.CustomCommand
,它可以打开多个属性 windows。但是图像管理器不是其中的一部分(或者尚未发现要提供什么参数)。
请参阅下面的 Edit2,了解如何向 table 添加新值。
编辑:基于另一个问题,我不得不更深入地研究这个问题。
我发现,尽管 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
的 return 上提供 base64。但他们在内部只是将原始 png 存储在 Image
中。所以,不幸的是,你不能使用 Repository.Execute
因为它不能传输二进制数据 - 或者至少我还没有弄清楚如何做到这一点。作为解决方法,您可以查看 Repository.ConnectionString
并打开与数据库的本机连接。在 table 中插入新图片后,您可以通过 ImageID
使用它们。
t_image
的内容:
ImageID
: 你只需要创建一个唯一的ID
Name
: 任意字符串
Type
: 固定字符串 Bitmap
Image
: png 的 blob
这是一个 Python 本地连接到 EAP 文件的片段:
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)
您可以使用它实际发出 INSERT
或 UPDATE
来修改 [=18],而不是用图像数据打印行(显示其内容是 png-blob) =].
我正在通过 C# 插件开发 Enterprise Architect。我需要通过自动化显示图像管理器,用户可以在表单中单击 "add image" 按钮直接添加图像。
我使用 API Repository.InvokeConstructPicker() 但它只打开 select package/class/component window。是否有 EA API 可用于打开图像管理器。
没有,有none。有一个未记录的 Respository.CustomCommand
,它可以打开多个属性 windows。但是图像管理器不是其中的一部分(或者尚未发现要提供什么参数)。
请参阅下面的 Edit2,了解如何向 table 添加新值。
编辑:基于另一个问题,我不得不更深入地研究这个问题。
我发现,尽管 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
的 return 上提供 base64。但他们在内部只是将原始 png 存储在 Image
中。所以,不幸的是,你不能使用 Repository.Execute
因为它不能传输二进制数据 - 或者至少我还没有弄清楚如何做到这一点。作为解决方法,您可以查看 Repository.ConnectionString
并打开与数据库的本机连接。在 table 中插入新图片后,您可以通过 ImageID
使用它们。
t_image
的内容:
ImageID
: 你只需要创建一个唯一的IDName
: 任意字符串Type
: 固定字符串 BitmapImage
: png 的 blob
这是一个 Python 本地连接到 EAP 文件的片段:
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)
您可以使用它实际发出 INSERT
或 UPDATE
来修改 [=18],而不是用图像数据打印行(显示其内容是 png-blob) =].