Добро пожаловать в мой блог! Изначально он не задумывался как блог CRM разработчика, но жизнь сама внесла нужные коррективы. Тут я публикою все свои наблюдения относительно обозначенных в заголовке систем. Если Вы найдете в нем что-то интересное для Вас, как для заказчика, то буду рад сотрудничать с Вами! В моей компетенции 100% задач по MS CRM 3.0/4.0/2011:
MVP 2010, 2011
- Консалтинг
- Проектирование
- Разработка
- Обучение
MVP 2010, 2011
Проблема с изменением атрибута yomifullname
Запись от Артем Enot Грунин размещена 19.12.2012 в 12:28
Теги bug, customization, visual studio, маразм
Те из вас, кто не первый год занимается MS CRM помнят ту классическую проблему CRM 4.0, когда не работали правила поиска дубликатов контактов, поиск и черти что еще.
Проблема заключалась в том, что пахорукие (я не побоюсь этого слова!) уроды локализаторы переводили систему в Промпте, в результате чего пары атрибутов name и yominame назывались одинаково: имя. Для справки: yomi атрибуты вообще нафиг не нужны в русской локализации, так как они предназначены для описания транскрипции (фонетического звучания) имени для восточных языков.
С тех пор качество локализации системы ничуть не выросло, однако все мы знаем как быть с чистой системой - идти и переименовывать атрибуты. И вот тут облом! "Имя", "Фамилия" и "Отчество" йоми хорошо переименовываются, а вот полное имя нет! Атрибут просто не сохраняется.
Посидев с дебагером я выяснил, что форма не сохраняется из-за какой-то проблемы со скриптом - атрибут не проходит проверку на корректность заполнения данных. Оно и понятно, yomifullname - это теперь EMAIL!
Атрибут fullname выглядит чуть лучше - он хотя бы текст, но тоже не хочет обновляться.
В каком из пакетов внесли эту ошибку не знаю, но за геморрой спасибо. Ниже предлагаю код для решения проблемы. И проект консольного приложения, чтобы исправить это безобразие:
Код выполняет переименование атрибута и заодно отключает аудит и поиск по этому полю.
FixRM.AttributePropertiesUpdate.zip
Проблема заключалась в том, что пахорукие (я не побоюсь этого слова!) уроды локализаторы переводили систему в Промпте, в результате чего пары атрибутов name и yominame назывались одинаково: имя. Для справки: yomi атрибуты вообще нафиг не нужны в русской локализации, так как они предназначены для описания транскрипции (фонетического звучания) имени для восточных языков.
С тех пор качество локализации системы ничуть не выросло, однако все мы знаем как быть с чистой системой - идти и переименовывать атрибуты. И вот тут облом! "Имя", "Фамилия" и "Отчество" йоми хорошо переименовываются, а вот полное имя нет! Атрибут просто не сохраняется.
Посидев с дебагером я выяснил, что форма не сохраняется из-за какой-то проблемы со скриптом - атрибут не проходит проверку на корректность заполнения данных. Оно и понятно, yomifullname - это теперь EMAIL!
Атрибут fullname выглядит чуть лучше - он хотя бы текст, но тоже не хочет обновляться.
В каком из пакетов внесли эту ошибку не знаю, но за геморрой спасибо. Ниже предлагаю код для решения проблемы. И проект консольного приложения, чтобы исправить это безобразие:
X++:
String orgURI = "http://localhost/FixRM/XRMServices/2011/Organization.svc"; IServiceConfiguration<IOrganizationService> conf = ServiceConfigurationFactory.CreateConfiguration<IOrganizationService>(new Uri(orgURI)); ClientCredentials credentials = new ClientCredentials(); credentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials; OrganizationServiceProxy crmService = new OrganizationServiceProxy(conf, credentials); crmService.EnableProxyTypes(); RetrieveAttributeRequest attributeRequest = new RetrieveAttributeRequest { EntityLogicalName = "contact", LogicalName = "yomifullname", RetrieveAsIfPublished = true, }; RetrieveAttributeResponse attributeResponse = (RetrieveAttributeResponse) crmService.Execute(attributeRequest); Console.WriteLine("Retrieved the attribute {0}.", attributeResponse.AttributeMetadata.SchemaName); AttributeMetadata yomifullnameMetadata = attributeResponse.AttributeMetadata; yomifullnameMetadata.DisplayName = new Label("Фонетическое полное имя", 1049); yomifullnameMetadata.IsAuditEnabled = new BooleanManagedProperty(false); yomifullnameMetadata.IsValidForAdvancedFind = new BooleanManagedProperty(false); UpdateAttributeRequest updateRequest = new UpdateAttributeRequest { Attribute = yomifullnameMetadata, EntityName = "contact", MergeLabels = true }; crmService.Execute(updateRequest);
FixRM.AttributePropertiesUpdate.zip
Всего комментариев 0