|
![]() |
#1 |
Участник
|
Странное ограничение FilterdAttributes в PluginRegistration
Привет.
Задача была следующая: повесить плагин на update ~30 полей в сущности (всего там ~100). Думал сделать так: получать все данные из контекста плагина, а все поля перечилсить в поле FilterdAtributes в pluginRegistration'e. А нет! При регистрации степа программа говорит, что нельзя вписать в FilterdAtributes больше 100 символов. В итоге получается странная вещь: можно зарегить на изменение либо всех полей (All atributes), либо только на небольшую часть, общая длинна названий которых не привышает 100 символов. Кто-нить сталкивался? Обходил сие? |
|
![]() |
#2 |
Участник
|
Можно написать свою маленькую программку и выполнить ее.
Код: 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; } } |
|