AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Разработка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.03.2009, 10:38   #1  
Alir is offline
Alir
Участник
 
47 / 14 (1) ++
Регистрация: 02.08.2008
Адрес: Санкт-Петербург
Странное ограничение FilterdAttributes в PluginRegistration
Привет.

Задача была следующая: повесить плагин на update ~30 полей в сущности (всего там ~100). Думал сделать так: получать все данные из контекста плагина, а все поля перечилсить в поле FilterdAtributes в pluginRegistration'e.
А нет! При регистрации степа программа говорит, что нельзя вписать в FilterdAtributes больше 100 символов. В итоге получается странная вещь:
можно зарегить на изменение либо всех полей (All atributes), либо только на небольшую часть, общая длинна названий которых не привышает 100 символов.

Кто-нить сталкивался? Обходил сие?
Старый 22.03.2009, 03:59   #2  
S K is offline
S K
Участник
 
1 / 10 (1) +
Регистрация: 22.03.2009
Можно написать свою маленькую программку и выполнить ее.

Код:
public static Guid RegisterStep(CrmService.CrmService crmService, Guid pluginTypeID, string entityName, Guid sdkMessageID)
    {
        Guid sdkMessageFilterID = GetSdkMessageFilterID(crmService, entityName, sdkMessageID);
        if (sdkMessageFilterID == Guid.Empty)
            throw new Exception("Не удалось получить Guid messagefilter для EntityName = '" + entityName + "', sdkMessageID = '" + sdkMessageID + "'");

        sdkmessageprocessingstep step = new sdkmessageprocessingstep();
        step.plugintypeid = new Lookup();
        step.plugintypeid.Value = pluginTypeID;
        step.sdkmessagefilterid = new Lookup();
        step.sdkmessagefilterid.Value = sdkMessageFilterID;
        step.sdkmessageid = new Lookup();
        step.sdkmessageid.Value = sdkMessageID;

        step.description = "Auditing Plugin";
        step.invocationsource = new Picklist();
        step.invocationsource.Value = 0; // 0 (parent pipeline) or 1 (child pipeline)
        step.mode = new Picklist();
        step.mode.Value = Config.ModePluginExecution;
        step.rank = new CrmNumber();
        step.rank.Value = 0;
        step.stage = new Picklist();
        step.stage.Value = 50; // 10 (pre-event) or 50 (post-event)
        step.supporteddeployment = new Picklist();
        step.supporteddeployment.Value = 0; // 0 (server), 1 (Outlook client), or 2 (both)
        //Comma separated list of attributes that must be changed for the plug-in to be invoked. An empty list indicates all attributes
        step.filteringattributes = "";        
        //GUID of the system user account that the plug-in is to execute under.
        //step.ImpersonatingUserId = "";
        step.configuration = Config.SqlConnectionString;

        try
        {
            return crmService.Create(step);
        }
        catch (Exception ex)
        {
            throw new Exception("При регистрации шага произошла ошибка: " + ex.Message);
        }
    }

 public static Guid GetSdkMessageFilterID(CrmService.CrmService crmService, string entityName, Guid sdkMessageID)
    {
        QueryByAttribute query = new QueryByAttribute();
        ColumnSet cs = new ColumnSet();
        cs.Attributes = new string[] { "sdkmessagefilterid" };
        query.ColumnSet = cs;
        query.EntityName = EntityName.sdkmessagefilter.ToString();
        query.Attributes = new string[] { "primaryobjecttypecode", "sdkmessageid" };
        query.Values = new string[] { entityName.ToLower(), sdkMessageID.ToString() };
        BusinessEntityCollection bec;
        try
        {
            bec = crmService.RetrieveMultiple(query);
        }
        catch (Exception ex)
        {
            throw new Exception("При получении Guid messagefilter для EntityName = '" + entityName + "', sdkMessageID = '" + sdkMessageID + "' произошла ошибка: " + ex.Message);
        }
        if (bec.BusinessEntities != null && bec.BusinessEntities.Length > 0)
        {
            return ((sdkmessagefilter)bec.BusinessEntities[0]).sdkmessagefilterid.Value;
        }
        else
        {
            return Guid.Empty;
        }
    }

    public static Guid GetSdkMessageID(CrmService.CrmService crmService, string messageName)
    {
        QueryByAttribute query = new QueryByAttribute();
        ColumnSet cs = new ColumnSet();
        cs.Attributes = new string[] { "sdkmessageid" };
        query.ColumnSet = cs;
        query.EntityName = EntityName.sdkmessage.ToString();
        query.Attributes = new string[] { "name" };
        query.Values = new string[] { messageName };
        BusinessEntityCollection bec;
        try
        {
            bec = crmService.RetrieveMultiple(query);
        }
        catch (Exception ex)
        {
            throw new Exception("При получении Guid message '" + messageName + "' произошла ошибка: " + ex.Message);
        }
        if (bec.BusinessEntities != null && bec.BusinessEntities.Length > 0)
        {
            return ((sdkmessage)bec.BusinessEntities[0]).sdkmessageid.Value;
        }
        else
        {
            return Guid.Empty;
        }
    }
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Строка сервисного контракта: работает ли ограничение по срокам действия? Lazarus Dynamics CRM: Функционал 1 10.04.2009 08:04
Ограничение в 218 символов на путь xls sergeyjb Dynamics CRM: Администрирование 2 10.10.2008 10:38
Ограничение на 10 пользователей zhenek Dynamics CRM: Администрирование 3 18.09.2007 12:02
Ограничение доступа amg Dynamics CRM: Функционал 0 21.11.2006 10:40

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:16.