Источник:
http://axforum.info/forums/blog.php?b=366
==============
Те из вас, кто не первый год занимается MS CRM помнят ту классическую проблему CRM 4.0, когда не работали правила поиска дубликатов контактов, поиск и черти что еще.
Проблема заключалась в том, что пахорукие (я не побоюсь этого слова!) уроды локализаторы переводили систему в Промпте, в результате чего пары атрибутов name и yominame назывались одинаково: имя. Для справки: yomi атрибуты вообще нафиг не нужны в русской локализации, так как они предназначены для описания транскрипции (фонетического звучания) имени для восточных языков.
С тех пор качество локализации системы ничуть не выросло, однако все мы знаем как быть с чистой системой - идти и переименовывать атрибуты. И вот тут облом! "Имя", "Фамилия" и "Отчество" йоми хорошо переименовываются, а вот полное имя нет! Атрибут просто не сохраняется.
Посидев с дебагером я выяснил, что форма не сохраняется из-за какой-то проблемы со скриптом - атрибут не проходит проверку на корректность заполнения данных. Оно и понятно, yomifullname - это теперь EMAIL!
Атрибут fullname выглядит чуть лучше - он хотя бы текст, но тоже не хочет обновляться.
В каком из пакетов внесли эту ошибку не знаю, но за геморрой спасибо. Ниже предлагаю код для решения проблемы. И проект консольного приложения, чтобы исправить это безобразие:
X++:
String orgURI =
"http://localhost/FixRM/XRMServices/2011/Organization.svc";IServiceConfiguration conf = ServiceConfigurationFactory.CreateConfiguration(
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
Источник:
http://axforum.info/forums/blog.php?b=366