Разработка
01
Авг
0

Скрытие Представлений с помощью плагина

В некоторых случаях возникает потребность отображать определенные Представления в зависимости от определенных условий. Например, в зависимости от Роли Пользователя, контекста выполнения (основное Представление, вложенное Представление или связанное Представление) и т.д. Для этого нужно создать плагин на фильтрацию списка возвращаемых Представлений:

  • Создайте плагин с таким кодом:
    using System;
    using System.Web;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using Microsoft.Xrm.Sdk;
    using Microsoft.Xrm.Sdk.Query;
    
    namespace HideViews
    {
        public class HideViews : IPlugin
        {
            public void Execute(IServiceProvider serviceProvider)
            {
                // Получаем контекст выполнения плагина
                Microsoft.Xrm.Sdk.IPluginExecutionContext context = (IPluginExecutionContext) serviceProvider.GetService(typeof(IPluginExecutionContext));
    
                // Проверяем содержится ли в InputParameters параметр Query, используемый для фильтрации Представлений
                if (context.InputParameters.Contains("Query") == true && context.InputParameters["Query"] is QueryExpression)
                {
                    QueryExpression qe = (QueryExpression)context.InputParameters["Query"];
                    if (qe.EntityName == "savedquery")
                    {
                        if (qe.Criteria != null)
                        {
                            if (qe.Criteria.Conditions != null)
                            {
                                // Добавляем в запрос новое условие: имя не начинается с "Неактивные"
                                ConditionExpression queryCondition = new ConditionExpression("name", ConditionOperator.NotLike, "Неактивные%");
                                qe.Criteria.Conditions.Add(queryCondition);
                                context.InputParameters["Query"] = qe;
                            }
                        }
                    }
                }
            }
        }
    }
    

    Здесь мы выцепляем из коллекции InputParameters параметр Query отвечающий за отбор данных и дополняем его своим условием;

  • Зарегистрируйте плагин на RetreieveMultiple объекта savedquery (синхронно, стадия Pre);
  • Идем проверять что Представление «исчезло» 🙂



Комментарии (0)

*

code