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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.07.2014, 18:11   #1  
magicandy is offline
magicandy
Участник
 
111 / 12 (1) ++
Регистрация: 15.07.2014
Артем, спасибо.

Цитата:
Я бы рекомендовал вам запрашивать и обновлять только те атрибуты, которые нужно.
Дык, я пытаюсь . Разве это не оно?
Код:
regardingCase = service.Retrieve("incident", regardingCaseId, new ColumnSet(new string[] { "dt_ustomerrating" }));
Цитата:
Всегда проверяйте наличие атрибута в выборке, прежде чем к нему обратится.
Не совсем понимаю необходимость этого действия. Ведь я уверен, что атрибут там есть (а вот значения может и не быть). В частности "dt_ustomerrating". Или проверка изменит ситуацию в моём случае?

Цитата:
Ну или используйте безопасный метод GetAttributeValue.
Тут тоже позвольте вопросик. Я правда не знаю .
Ведь метод service.Update обновляет сущность. А GetAttributeValue возвращает значение атрибута. Поправьте меня, если я не прав. в service.Retrieve я получаю сущность, а потом её же обновляю. А как я обновлю сущность по GetAttributeValue? Возможно, простенький примерчик поставит меня на путь истины

Ещё раз спасибо!
Старый 15.07.2014, 18:46   #2  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Цитата:
Сообщение от magicandy Посмотреть сообщение
Артем, спасибо.
Не совсем понимаю необходимость этого действия. Ведь я уверен, что атрибут там есть (а вот значения может и не быть). В частности "dt_ustomerrating". Или проверка изменит ситуацию в моём случае?
Если поле пустое (равно null) то атрибута в коллекции вы не найдёте. Именно поэтому надо или проверять наличие атрибута.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
За это сообщение автора поблагодарили: magicandy (1).
Старый 15.07.2014, 19:03   #3  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Цитата:
Сообщение от magicandy Посмотреть сообщение
Разве это не оно?
Код:
regardingCase = service.Retrieve("incident", regardingCaseId, new ColumnSet(new string[] { "dt_ustomerrating" }));
Оно. Так и нужно делать.
Цитата:
Сообщение от magicandy Посмотреть сообщение
Не совсем понимаю необходимость этого действия. Ведь я уверен, что атрибут там есть (а вот значения может и не быть). В частности "dt_ustomerrating". Или проверка изменит ситуацию в моём случае?
Беда в том, что для экономии трафика, даже если вы просили вернуть вам только 1 атрибут, система не вернет вам значение этого атрибута, если он пустой.
Цитата:
Сообщение от magicandy Посмотреть сообщение
Ведь метод service.Update обновляет сущность. А GetAttributeValue возвращает значение атрибута. Поправьте меня, если я не прав. в service.Retrieve я получаю сущность, а потом её же обновляю. А как я обновлю сущность по GetAttributeValue?
Я полагаю, сейчас вы делаете что-то вроде:
X++:
regardingCase = service.Retrieve("incident", regardingCaseId, new ColumnSet(new string[] { "dt_ustomerrating" }));
ustomerrating = regardingCase["dt_ustomerrating"];
В результате, если поле было постое вы получаете исключение. Поэтому, нужно делать вот так:
X++:
regardingCase = service.Retrieve("incident", regardingCaseId, new ColumnSet(new string[] { "dt_ustomerrating" }));
ustomerrating = regardingCase.GetAttributeValue<Type>("dt_ustomerrating");
Аналогично при обновлении любого атрибута. Если его нет в коллекции, а вы пытаетесь его обновить, то будет ошибка:
X++:
regardingCase.["someattribute"] = value;
Так что лучше делать:
X++:
regardingCase.SetAttributeValue("someattribute", value);
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Помощь в настройке плагина CRM для Outlook joyer Dynamics CRM: Администрирование 6 27.02.2013 23:11
Неконтролируемый многократный запуск бизнес-процесса. Uoa Dynamics CRM: Функционал 5 30.11.2011 14:28
Под кем выполняется код плагина? Tony Green Dynamics CRM: Разработка 1 14.02.2011 18:41
Модификая контекста плагина ZooY Dynamics CRM: Разработка 3 28.09.2008 13:52
Мир CRM: Автоматизирование добавления основного контакта при помощи Бизнес-Процесса Blog bot Dynamics CRM: Blogs 0 31.07.2008 02:08
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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