23.12.2008, 17:44 | #1 |
Участник
|
Plug-in: как из контекста получить предыдущие данные?
Хотим к salesorderdetail прицепить плагин на событие update, чтобы вычитать заказанное кол-во товара из общего кол-ва quantityonhand для product. Но для правильной обработки всех возможных вариантов необходимо знать значение поля quantity сущности salesorderdetail до события update. Обращение к свойству PreEntityImage не даёт положительного результата
context.PreEntityImages.Contains("quantity") возвращает false! В регистрации плагина Image прописываем, но всё равно не дает ничего хоть в Image один параметр, хоть AllAttributes. Подскажите пожалуйста куда копать? |
|
24.12.2008, 06:35 | #2 |
CRM
|
Может обработку вести не в Post а в Pre событии?
__________________
MS CRM 3.0/4.0 Sharepoint 2003, MOSS 2007/2010 |
|
24.12.2008, 09:43 | #3 |
Участник
|
Как раз в Pre и вели
|
|
24.12.2008, 10:57 | #4 |
Moderator
|
Затруднительно ответить. В крайнем случае можно вычитать эти данные через сервис. Да, попробуйте убедиться, что PreImage - это DynamicEntity. Вполне возможно, что это Moniker - заглушка которая ничего про запись не знает.
Еще в SDK есть строчка: Whether the image is obtained during the pre-event or post-event of the event execution pipeline depends on which stage the associated SdkMessageProcessingStepRegistration instance is being registered for. Посмотрите, может все же как-то не правильно регистрируете?
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
24.12.2008, 12:13 | #5 |
CRM
|
Помнится еще в тройке для того чтобы PreImage не был пустым надо было указывать поля, значения которых мы хотим получить.
Как в 4ке не знаю...
__________________
MS CRM 3.0/4.0 Sharepoint 2003, MOSS 2007/2010 |
|
25.12.2008, 14:03 | #6 |
Участник
|
вообщем пока сделали через service, из контекста получаем только salesorderdetailid. Если что накопаю с получением именно из context отпишусь
|
|
25.12.2008, 14:28 | #7 |
Moderator
|
Какие данные содержит preImage? Только id и имя сущности? Тут обсуждается аналогичная проблема: http://www.eggheadcafe.com/software/...-plugin-c.aspx Решение не описано, судя по всему я был прав и вы получаете Moniker вместо DE. Можно ли сделать иначе пока не знаю.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
26.12.2008, 10:03 | #8 |
Участник
|
"Какие данные содержит preImage? Только id и имя сущности?" - а вот как это узнать? я даже не могу узнать кол-во аттрибутов, не говоря уже о самих свойствах
|
|
26.12.2008, 11:48 | #9 |
Moderator
|
Дебаггером пользоваться не пробовали? Кроме того, данные можно и в файл выводить.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
26.12.2008, 12:36 | #10 |
Чайный пьяница
|
Цитата:
Для этого надо выполнить следующие шаги: 1. Скопировать в папку assembly pdb file. 2. В студии - установить брейк поинт в методе Execute, который реализует интерфейс IPlugin. 3. Выполнить присоединение Студией к процессу w3p. 4. Через watch - посмотреть объект context.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
26.12.2008, 13:01 | #11 |
Участник
|
Ну а зачем запариваться с контестом, когда действительно (как уже автор темы и сделал) можно сделать все через CrmService - производительность этот никак не ухудшит (по-любому в плагине используется экземпляр сервиса для какого-либо действия).
|
|
26.12.2008, 13:10 | #12 |
Moderator
|
Цитата:
Цитата:
Tip: Registering for pre or post images to access entity attribute values results in improved plug-in performance as compared to obtaining entity attributes in plug-in code through Retrieve or RetrieveMultiple requests.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
27.12.2008, 16:20 | #13 |
Чайный пьяница
|
Надеюсь, что это будет полезно автору темы. http://www.microsoft.com/communities...b-94ee39bd7454
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: zhenek (1). |
28.12.2008, 11:37 | #14 |
Участник
|
C пошаговой отладкой сборок никогда не имел дело, но как будет время займусь. Спасибо всем за советы
|
|
28.12.2008, 12:00 | #15 |
Участник
|
Спасибо, a33ik, за полезную ссылку. Ключем к решению проблемы стала фраза "In your code, you will now be able to select the image using the name
set during registration". Я думал с PreEntityImages надо работать как с InputParameters, а надо context.PreEntityImages["<имя образа>"]! В очередной раз до пошаговой отладки кода дело не дошло :-) |
|
30.12.2008, 11:36 | #16 |
Участник
|
zhenek
Если часто приходится разрабатывать плагины, то советую разобраться с отладкой первым делом - это очень удобная штука, я сейчас без нее вообще ниодного плагина не делаю. ) Все, что нужно для этого, это: 1) иметь студию с C# на сервере (remote debuggin'гом особо не занимался, не было необходимости) 2) поставить точку остановка в коде так: System.Diagnostics.Debugger.Break() 3) не забыть положить рядом с dll плагина отладочный фаил .pdb Все, регим плагим, делаем его событие, ловим эксепшен и вперед дебажить |
|
Теги |
context, plugin, update, плагин, контекст, предыдущее значение |
|
|