使用addin的Repository.GetElementsByQuery将无法使用自定义SQL查询

时间:2017-03-24 19:32:55

标签: c# sql add-in enterprise-architect

我想在我的模型中按名称或首字母缩写词来搜索元素 我已经创建了一个自定义的sql搜索,这里是sql:

select ea_guid AS CLASSGUID, object_type AS CLASSTYPE from t_object
                                where t_object.Name = '#WC#(<Search Term>)#WC#'
                                or t_object.Name = '<Search Term>'
                                or t_object.Alias = '<Search Term>'

当我尝试在我的c#addin中使用Repository.GetElementsByQuery运行它时,它给了我一个错误:

  

要运行自定义搜索,您必须在select语句中指定ea_guid AS CLASSGUID

然而,ea_guid和object_type显然是

  • 我尝试使用脚本API并且可以正常工作
  • 搜索正确运行
  • 我正在调用正确的模型搜索

加载项无法实现这一点吗?有什么理由吗?

该模型托管在SQLServer上 我正在运行EA 13 build 1309
编辑:我现在正在运行Repository.SQLQuery作为解决方法

1 个答案:

答案 0 :(得分:4)

你还没有发布实际上给你错误的代码,因此很难看出出现了什么问题。

无论如何,有两种方法可以使用GetElementsByQuery()

1)将查询的名称作为参数传递,如:

EA.Repository.GetElementsByQuery("NameOfMySearch",1);

在这种情况下,您无法提供搜索参数,因此仅当您的搜索不依赖于<Search Term>

时才有用

2)通过传递实际的SQL代码方法。在你的情况下,这将是:

string mySearchTerm = "somethingImLookingFor";
string SQLSearchString = @"select ea_guid AS CLASSGUID, object_type AS CLASSTYPE from t_object
where t_object.Name = '%" + mySearchTerm +@ "%'
or t_object.Alias = '" + mySearchTerm + "'";
var foundElements = Repository.GetElementsByQuery(SQLSearchString ,2);

这种情况下的第二个参数需要为“2”。第二种方法是我总是使用此操作的方式。

还要注意使用正确的SQL语法,具体取决于您使用的后端。这适用于SQL服务器,但不适用于.eap文件。