C# 如何通过Enterprise Architect API打开Image manager

C# 如何通过Enterprise Architect API打开Image manager,c#,image,enterprise-architect,C#,Image,Enterprise Architect,我正在通过C外接程序处理企业架构师。我需要通过自动化显示图像管理器,用户可以直接在表单中的“添加图像”按钮上添加图像 我使用API Repository.InvokeConstructPicker,但它只打开选择包/类/组件窗口。是否有EA API可用于打开图像管理器 没有,没有。有一个未记录的Respository.CustomCommand,它可以打开多个属性窗口。但是图像管理器不是其中的一部分,或者还没有发现需要提供哪些参数 有关向表中添加新值的信息,请参见下面的Edit2 编辑:基于另一

我正在通过C外接程序处理企业架构师。我需要通过自动化显示图像管理器,用户可以直接在表单中的“添加图像”按钮上添加图像


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

没有,没有。有一个未记录的Respository.CustomCommand,它可以打开多个属性窗口。但是图像管理器不是其中的一部分,或者还没有发现需要提供哪些参数

有关向表中添加新值的信息,请参见下面的Edit2

编辑:基于另一个问题,我不得不更深入地研究这个问题

我发现,尽管EA导入了许多不同的图像格式,但它在内部使用PNG来存储图像。显然,他们的BMP导入器不喜欢所有的BMP格式,但我似乎记得有些8/16位的东西;典型的温多兹怪诞。总之,我使用这个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存储在图像中。所以,不幸的是,您不能使用Repository.Execute,因为它不能传输二进制数据——或者至少我还不知道如何做到这一点。作为解决方法,您可以查看Repository.ConnectionString并打开到数据库的本机连接。将新图片插入表格后,您可以通过其ImageID使用它们

t_图像的内容:

ImageID:您只需要创建一个唯一的ID 名称:任意字符串 类型:固定字符串位图 图片:一个png的斑点 下面是一个以本机方式连接到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)

您可以使用它来实际发出插入或更新以修改t_图像,而不是使用显示其内容为png blob的图像数据打印行。

否,没有。有一个未记录的Respository.CustomCommand,它可以打开多个属性窗口。但是图像管理器不是其中的一部分,或者还没有发现需要提供哪些参数

有关向表中添加新值的信息,请参见下面的Edit2

编辑:基于另一个问题,我不得不更深入地研究这个问题

我发现,尽管EA导入了许多不同的图像格式,但它在内部使用PNG来存储图像。显然,他们的BMP导入器不喜欢所有的BMP格式,但我似乎记得有些8/16位的东西;典型的温多兹怪诞。总之,我使用这个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存储在图像中。所以,不幸的是,您不能使用Repository.Execute,因为它不能传输二进制数据——或者至少我还不知道如何做到这一点。作为解决方法,您可以查看Repository.ConnectionString并打开到数据库的本机连接。将新图片插入表格后,您可以通过其ImageID使用它们

t_图像的内容:

ImageID:您只需要创建一个唯一的ID 名称:任意字符串 类型:固定字符串位图 图片:一个png的斑点 下面是一个以本机方式连接到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)

您可以使用它来实际发出插入或更新以修改t_图像,而不是使用显示其内容为png blob的图像数据打印行。

可能重复@Arshad I的问题是,是否有任何EA API可用于显示与上述API类似的图像管理器对话框。可能重复@Arshad I询问是否有任何EA API可用于显示与上述API类似的图像管理器对话框。