我必须在“Artilce”实体的快速查找搜索上注册一个插件。当用户在Article实体的快速查找文本框中输入任何东西时,我的插件执行并根据我们的业务逻辑返回过滤数据。 1.当我们使用快速查找时发现了什么事件。 2.当这个事件被触发时,什么消息通过。在Dynamics CRM 2013中快速查找注册插件
我试着在RetrieveMultiple消息上注册插件,但是当我们点击快速查找中的搜索时,这个不会被触发。
请帮忙。
我必须在“Artilce”实体的快速查找搜索上注册一个插件。当用户在Article实体的快速查找文本框中输入任何东西时,我的插件执行并根据我们的业务逻辑返回过滤数据。 1.当我们使用快速查找时发现了什么事件。 2.当这个事件被触发时,什么消息通过。在Dynamics CRM 2013中快速查找注册插件
我试着在RetrieveMultiple消息上注册插件,但是当我们点击快速查找中的搜索时,这个不会被触发。
请帮忙。
我们已经提出了与微软的门票来解决这个situaation。 他们提供的解决方案是修改数据库以在插件注册工具中提供消息 SearchByTitleKbArticleRequest。
我目前不记得我们更新了一个标志反对这些消息的表。
更新表后,我们能够对邮件
SearchByTitleKbArticleRequest
然后插件触发注册插件,我们修改了实体集合从那里返回。
我们在RetrieveMultiple上注册了一个插件。我们有业务需求来搜索记录,默认情况下使用WildCard。
插件报名须知:
Message: RetrieveMultiple
Primary Entity:None
Secondary Entity:None
Pre-Operation
代码:
public const String QueryLiteral = "Query";
public const String LIKE = "%";
public void Execute(IServiceProvider serviceProvider)
{
String ParentEntity = String.Empty;
String OriginalSearch = String.Empty;
// Obtain the execution context from the service provider.
var ContextInstance = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
// Get a reference to the Organization service.
IOrganizationService ServiceInstance =
((IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory))).
CreateOrganizationService(ContextInstance.InitiatingUserId);
// Critical Point here - NOTICE that the InputParameters Contains the word Query
if (ContextInstance.Depth < 2 && ContextInstance.InputParameters.Contains(QueryLiteral) &&
ContextInstance.InputParameters[QueryLiteral] is QueryExpression)
{
QueryExpression QueryPointer = (ContextInstance.InputParameters[QueryLiteral] as QueryExpression);
//Verify the conversion worked as expected - if not, everything else is useless
if (null != QueryPointer)
{
// Check if the request is coming from any Search View
// We know this b/c Criteria isn't null and the Filters Count > 1
if (null != QueryPointer.Criteria && QueryPointer.Criteria.Filters.Count > 1)
{
ParentEntity = ContextInstance.PrimaryEntityName;
OriginalSearch = QueryPointer.Criteria.Filters[1].Conditions[0].Values[0].ToString();
OriginalSearch = String.Format(CultureInfo.CurrentCulture,
"{0}{1}", LIKE, OriginalSearch);
}
ConditionExpression NewCondition = null;
FilterExpression NewFilter = null;
if (null != QueryPointer.Criteria)
{
//Change the default 'BeginsWith'Operator to 'Contains/Like' operator in the basic search query
foreach (FilterExpression FilterSet in QueryPointer.Criteria.Filters)
{
foreach (ConditionExpression ConditionSet in FilterSet.Conditions)
{
if (ConditionSet.Operator == ConditionOperator.Like)
{
if (OriginalSearch != "")
ConditionSet.Values[0] = OriginalSearch;
else
{
OriginalSearch = QueryPointer.Criteria.Filters[0].Conditions[0].Values[0].ToString();
OriginalSearch = String.Format(CultureInfo.CurrentCulture,
"{0}{1}", LIKE, OriginalSearch);
ConditionSet.Values[0] = OriginalSearch;
}
}
}
}
}
}
ContextInstance.InputParameters[QueryLiteral] = QueryPointer;
}
}
这个帖子上查看详情:http://www.williamgryan.mobi/?p=596
感谢您的回复。但即使注册实体:无,该插件未被触发。 –
@AnandKumarM你有没有调试插件? 如果你不能调试插件,你可以简单地在execute方法中抛出一个异常,来检查插件是否被触发。 我们在prod上部署了这个插件并且工作正常。 –
是的,我调试了插件。当我们使用快速查找时,检索多个插件会被其他实体(帐户,机会,联系人)触发。但对于KBArticle而言,它不会触发。 –
http://stackoverflow.com/questions/8408685/crm-2011-intercepting-the-quick-search-fetch-xml-and-query-expression-dont-r – Passion