C# Repository.GetElementsByQuery with addin将不适用于自定义sql查询
我想在我的模型中通过名称或首字母缩略词搜索某个元素 我创建了一个自定义sql搜索,下面是sql:C# Repository.GetElementsByQuery with addin将不适用于自定义sql查询,c#,sql,add-in,enterprise-architect,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.Nam
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运行它时,它会给我一个错误:
要运行自定义搜索,必须在select语句中将ea_guid指定为CLASSGUID
但是,ea_guid和object_类型显然存在
我尝试了脚本API,它很有效
搜索运行正常
我打电话给正确的模型搜索
使用外接程序不可能做到这一点吗?有什么原因吗
模型托管在SQLServer上
我正在运行EA 13 build 1309
编辑:我现在运行Repository.SQLQuery作为一种解决方法您还没有发布实际导致错误的代码,这使得查看错误变得更加困难 无论如何,有两种方法可以使用GetElementsByQuery 1通过将查询的名称作为参数传递,如下所示:
EA.Repository.GetElementsByQuery("NameOfMySearch",1);
在这种情况下,您不能提供search参数,因此只有当您的搜索不依赖于
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 server,但不适用于.eap文件。您还没有发布实际导致错误的代码,因此更难看出哪里出了问题 无论如何,有两种方法可以使用GetElementsByQuery 1通过将查询的名称作为参数传递,如下所示:
EA.Repository.GetElementsByQuery("NameOfMySearch",1);
在这种情况下,您不能提供search参数,因此只有当您的搜索不依赖于
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 server,但不适用于.eap文件。我决定切换到Repository.SQLQuery,因为处理XML文件比处理EA.Collection类型个人首选项更容易。我发布的查询对DBMS存储库和.eap文件都有效。我不知道您不能提供搜索名称为HI的Repository.GetElementsByQuery搜索词Geert,在v14.1中,GetElementsByQuery的签名似乎有所不同,至少在我的机器上是这样的…:集合GetElementsByQuery[MarshalAsUnmanagedType.BStr,in]string QueryName,[MarshalAsUnmanagedType.BStr,in]string SearchTerm;。这样,我可以将查询传递给如下方法:Repository.GetElementsByQueryQueryNames.getInstanceByClassifier,s.ElementID.ToString。你能确认签名的更改吗?还是我遗漏了什么?不,我想一直都是这样,但我的答案是错的。我显然把GetElementSet和GetElementsByQuery搞混了。如果有时间,我会编辑答案。我决定切换到Repository.SQLQuery,因为处理XML文件比处理EA.Collection类型个人首选项更容易。我发布的查询对DBMS存储库和.eap文件都有效。我不知道您不能提供带有搜索名称Hi Geert,在v14.1中,GetElementsByQuery的签名似乎有所不同,至少在我的计算机上是这样的…:集合GetElementsByQuery[MarshalAsUnmanagedType.BStr,in]string QueryName,[MarshalAsUnmanagedType.BStr,in]string SearchTerm;。这样,我可以将查询传递给如下方法:Repository.GetElementsByQueryQueryNames.getInstanceByClassifier,s.ElementID.ToString。你能确认签名的更改吗?还是我遗漏了什么?不,我想一直都是这样,但我的答案是错的。我显然把GetElementSet和GetElementsByQuery搞混了。如果我有时间,我会编辑答案。