2015-04-12 99 views
0

我必须在“Artilce”实体的快速查找搜索上注册一个插件。当用户在Article实体的快速查找文本框中输入任何东西时,我的插件执行并根据我们的业务逻辑返回过滤数据。 1.当我们使用快速查找时发现了什么事件。 2.当这个事件被触发时,什么消息通过。在Dynamics CRM 2013中快速查找注册插件

我试着在RetrieveMultiple消息上注册插件,但是当我们点击快速查找中的搜索时,这个不会被触发。

请帮忙。

+0

http://stackoverflow.com/questions/8408685/crm-2011-intercepting-the-quick-search-fetch-xml-and-query-expression-dont-r – Passion

回答

0

我们已经提出了与微软的门票来解决这个situaation。 他们提供的解决方案是修改数据库以在插件注册工具中提供消息 SearchByTitleKbArticleRequest

我目前不记得我们更新了一个标志反对这些消息的表。

更新表后,我们能够对邮件

SearchByTitleKbArticleRequest

然后插件触发注册插件,我们修改了实体集合从那里返回。

0

我们在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

+0

感谢您的回复。但即使注册实体:无,该插件未被触发。 –

+0

@AnandKumarM你有没有调试插件? 如果你不能调试插件,你可以简单地在execute方法中抛出一个异常,来检查插件是否被触发。 我们在prod上部署了这个插件并且工作正常。 –

+0

是的,我调试了插件。当我们使用快速查找时,检索多个插件会被其他实体(帐户,机会,联系人)触发。但对于KBArticle而言,它不会触发。 –

相关问题