Repository.GetElementsByQuery with addin 不适用于自定义 sql 查询

Repository.GetElementsByQuery with addin will not work with custom sql queries

我想运行在我的模型中按名称或首字母缩略词搜索元素
我创建了自定义 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# 插件中使用 Repository.GetElementsByQuery 运行 时,它给我一个错误:

To run a custom search you must specify ea_guid AS CLASSGUID in your select statement

然而,ea_guid和object_type显然存在

这不能用加载项来做吗?有什么原因吗?

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

您还没有发布实际给您错误的代码,因此更难看出问题所在。

无论如何,有两种方法可以使用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 文件。