Разработка
18
Мар
1

Отображение неактивных записей с помощью плагина

В статье Отображение неактивных записей в стандартных представлениях описывается неподдерживаемый способ отобразить неактивные записи в связанных представлениях. Но того же результата можно добиться и с использованием поддерживаемых методов – плагинов. Идея заключается в том, чтобы прервать сообщение RetrieveMultiple и изменить его так, чтобы были возвращены все связанные записи:

  • Создайте плагин с таким кодом:
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Web.Services.Protocols;
    using Microsoft.Crm.Sdk; 
    using Microsoft.Crm.Sdk.Query;
    
    namespace Acme.Plugins 
    { 
        public class AssociatedViewPlugin : IPlugin 
        { 
            public void Execute(IPluginExecutionContext context) 
            { 
                if (context.InputParameters.Contains(ParameterName.Query)) 
                { 
                    QueryExpression qe = context.InputParameters[ParameterName.Query] as QueryExpression; 
                    // Если это RetrieveMultiple с двумя условиями
                    if (qe.EntityName == context.PrimaryEntityName 
                          && qe.Criteria != null 
                          && qe.Criteria.Conditions != null 
                          && qe.Criteria.Conditions.Count == 2) 
                    { 
                        // Если первое условие фильтрует statecode по активным записям
                        ConditionExpression ce = qe.Criteria.Conditions[0] as ConditionExpression; 
                        if (ce != null 
                            && ce.AttributeName == "statecode" 
                            && ce.Operator == ConditionOperator.Equal 
                            && ((int)ce.Values[0]) == 0) 
                        { 
                            // Удаляем фильтр statecode
                            qe.Criteria.Conditions.Remove(ce); 
                        } 
                    } 
                } 
            } 
        }
    }
    
  • Зарегистрируйте плагин спомощью Plug-in Registration Tool и создайте для него шаг с такими параметрами:
    • Message: RetrieveMultiple;
    • Primary Entity: связанный объект, для которого Вы хотите возвращать некативные записи в связанных представлениях (в данном примере это Контакт);
    • Pipeline Stage: Pre Stage;
    • Execution Mode: Synchronous.

    Создайте столько таких шагов, сколько объектов должны отображать неактивные записи в связанных представлениях.

  • Смотрим на результат 🙂


Комментарии (1)
  • Vladislav Osmanov 18.03.2010

    Тоже отличная вещь. Хотелось бы видеть данный функционал в составе CRM5.

    P.S. Опять нет ссылки на первоисточник

*

code