我必须注册一个插件上的快速查找搜索“艺术”实体。当用户在文章实体上的快速查找文本框中输入任何内容时,我的插件执行并返回,根据我们的业务逻辑过滤数据。1.当我们发现使用快速查找时会触发什么事件。2.触发此事件时传递的消息。
我尝试过在RetrieveMultiple消息上注册插件,但是当我们单击“快速查找”中的搜索时,不会触发这个插件。
请帮帮忙。
发布于 2017-02-18 09:14:35
我们已经向微软提出了解决这一问题的办法。他们提供的解决方案是修改数据库,使插件注册工具中的消息SearchByTitleKbArticleRequest可用。
目前,我不记得我们根据这些消息更新了一个标志的表。
更新表后,我们能够根据消息注册插件。
SearchByTitleKbArticleRequest
然后触发插件,我们修改了从那里返回的实体集合。
发布于 2015-04-13 05:19:08
我们在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
https://stackoverflow.com/questions/29586665
复制相似问题