AXForum  
Zurück   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Разработка
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 21.02.2012, 09:18   #1  
KP0H ist offline
KP0H
Участник
 
41 / 11 (1) +
Registriert seit: 11.08.2011
Ort: Тюмень
Ошибка с таблицей EmailSearchBase при работе плагина на создание Account
Ошибка возникает из-за плагина, в отсутствие плагина все работает замечательно.
Пробовал получать Account из контекста, пробовал делать Post Image, результат одинаковый.
С самим полем Email плагин не работает, проставляет совершенно другие поля и значения. Если быть более точным он проставляет ссылки на сущности двух пользователей и после этого обновляет организацию.

Условно код такой:
X++:
 Entity account = (Entity)context.InputParameters["Target"];
 account["ars_leadaccountant"] = new EntityReference(leadAccountant.LogicalName, leadAccountant.Id);
 account["ars_officemanager"] = new EntityReference("systemuser", context.UserId); 
m_service.Update(account);
Ошибка возникает при попытке сохранить (m_service.Update).

Судя по всему он пытается обновить и таблицу EmailSearch, но Email я даже не трогаю.
Сам CRM выдает ошибку Generic SQL Error, Plugin никаких ошибок не выдает.
В Trace SQL Server Profiler получил следующее:
Error: 2601, Severity: 14, State: 1
Не удается вставить повторяющуюся строку ключа в объект "dbo.EmailSearchBase" с уникальным индексом "ndx_for_forward_update". Повторяющееся значение ключа: (5b5a0ec3-495c-e111-801c-0022648a6e48, 35).
Выполнение данной инструкции было прервано.

Что нужно сделать по другому чтобы этой ошибки не было?
Alt 21.02.2012, 09:29   #2  
griefon ist offline
griefon
Участник
 
131 / 52 (2) ++++
Registriert seit: 07.12.2010
Ort: down under
Попробуйте перезапросить account с минимальным набором полей.
Что-то вроде:
X++:
Entity account = (Entity)context.InputParameters["Target"];
Entity acc_for_update = m_service.Retrieve("account", (Guid)account["accountid"], new ColumnSet("accountid"));
acc_for_update["ars_leadaccountant"] = new EntityReference(leadAccountant.LogicalName, leadAccountant.Id);
acc_for_update["ars_officemanager"] = new EntityReference("systemuser", context.UserId); 
m_service.Update(acc_for_update);
Alt 21.02.2012, 10:30   #3  
KP0H ist offline
KP0H
Участник
 
41 / 11 (1) +
Registriert seit: 11.08.2011
Ort: Тюмень
Да, такой вариант работает.
Вопрос в том, грамотно ли это делать доп запрос (а по сути получается 2), т.к. дальше идет функционал которому необходимы все поля?
Нагрузки конечно с них на данном этапе практически нет и выполняются они мигом.
Alt 22.02.2012, 14:47   #4  
g.Naukovych ist offline
g.Naukovych
Участник
MCBMSS
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
405 / 130 (5) +++++
Registriert seit: 23.03.2011
Подозреваю, что неверно изменять Target. Надо попытаться заполнить Target на событии Pre. Если Вы его заполните, то Вам не нужен веб-сервис. Объект targer на протяжении всего процесса один и тот же.
Если Вы измените его на шаге pre, то изменения попаду в CRM. думаю что именно из-за попытки изменения target таким способом у Вас ошибка.
Alt 22.02.2012, 15:06   #5  
griefon ist offline
griefon
Участник
 
131 / 52 (2) ++++
Registriert seit: 07.12.2010
Ort: down under
Zitat:
Zitat von KP0H Beitrag anzeigen
Да, такой вариант работает.
Вопрос в том, грамотно ли это делать доп запрос (а по сути получается 2), т.к. дальше идет функционал которому необходимы все поля?
Нагрузки конечно с них на данном этапе практически нет и выполняются они мигом.
Да, не совсем грамотно, я немного поспешил с ответом.

Лучше сделать вот так:
X++:
Entity account = (Entity)context.InputParameters["Target"];
Entity acc_for_update = new Entity();
acc_for_update.LogicalName = "account";
acc_for_update.Id = (Guid)account["accountid"];
acc_for_update["ars_leadaccountant"] = new EntityReference(leadAccountant.LogicalName, leadAccountant.Id);
acc_for_update["ars_officemanager"] = new EntityReference("systemuser", context.UserId); 
m_service.Update(acc_for_update);
ПС: Вы бы ставили плюсики тем, кто вам помогает.
This post has been rated by: a33ik (1), KP0H (1).
Alt 22.02.2012, 15:10   #6  
griefon ist offline
griefon
Участник
 
131 / 52 (2) ++++
Registriert seit: 07.12.2010
Ort: down under
Zitat:
Zitat von g.Naukovych Beitrag anzeigen
Подозреваю, что неверно изменять Target. Надо попытаться заполнить Target на событии Pre. Если Вы его заполните, то Вам не нужен веб-сервис. Объект targer на протяжении всего процесса один и тот же.
Если Вы измените его на шаге pre, то изменения попаду в CRM. думаю что именно из-за попытки изменения target таким способом у Вас ошибка.
Да, по возможности лучше менять target на этапе Pre. Но не всегда это возможно, тогда можно обновлять его и потом (по сути вызывается веб-сервис для обновления записи с указанным типом, guid и набором полей), но только при этом важно, чтобы обновлялись только те поля, которые изменились. И не забывать о том, что плагин может зациклиться.
Alt 24.02.2012, 10:44   #7  
KP0H ist offline
KP0H
Участник
 
41 / 11 (1) +
Registriert seit: 11.08.2011
Ort: Тюмень
Спасибо. Я всегда ставлю)
Alt 27.02.2012, 15:25   #8  
KP0H ist offline
KP0H
Участник
 
41 / 11 (1) +
Registriert seit: 11.08.2011
Ort: Тюмень
У меня острый когнитивный диссонанс, но проблема возникла снова.
Предложенное решение не спасает.
Alt 27.02.2012, 22:20   #9  
griefon ist offline
griefon
Участник
 
131 / 52 (2) ++++
Registriert seit: 07.12.2010
Ort: down under
Тогда такие варианты:
- все-таки проверить, что обновляемая сущность не содержит лишних полей, и что на обновление этого поля не висит этот же самый или другой плагин, который вызывает ошибку
- посмотреть профайлером SQL, что за запрос вызывает ошибку
- попробовать сделать плагин асинхронным (не знаю почему, но пишут, что может помочь)

По результатам поиска в гугл по слову "ndx_for_forward_update" есть два поста с форума MS:
- в одном советуют тоже самое, что и я: http://social.microsoft.com/Forums/e...6-b2b0644018a7
- в другом советуют смотреть профайлер: http://social.microsoft.com/Forums/z...7-e5e05950724d
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Ошибка при работе отчетов Elka Dynamics CRM: Администрирование 14 03.02.2011 09:59
Ошибка при создании плагина SergGrey Dynamics CRM: Разработка 1 26.05.2010 11:47
Ошибка при создание "Возможной сделки" Alpen Dynamics CRM: Администрирование 12 14.11.2009 13:41
Создание экземпляра кастомной сущности из плагина Roman08 Dynamics CRM: Разработка 14 31.08.2009 21:34
Создание и регистрация плагина на Execute и Retreive a33ik Dynamics CRM: Разработка 7 30.11.2008 15:03

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 19:38 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.