2012-04-23 4 views
4

Я надеюсь, что кто-то может помочь мне с проблемой, с которой я пытался справиться в течение некоторого времени. У меня есть плагин для создания и плагин обновления. В целях тестирования мой плагин создания (Pre-Operation) выполняет простой расчет и помещает результат в поле после сохранения.Изображения Pre & Post Entity на Update-Plugin CRM 2011

Мой плагин обновления отлично работает, когда я зарегистрирую его на этапе предварительной операции и изменяю поля, для которых у меня есть моя логика. ОДНАКО, если я меняю одно из этих полей (или получаю другие поля в форме), я получаю сообщение об ошибке, что ключ не присутствовал в словаре. Я сделал свое исследование и увидел, что вы делаете чек между Pre и Post Entity Image, чтобы проверить, какие поля были обновлены, а какие нет. Но то, что меня смущает, это когда я это делаю, мне нужно зарегистрировать мой плагин обновления в Post-opertion, что приводит к тому, что мое обновление больше не работает, и если я выполняю service.Update (entity) в конце своего кода, он дает мне еще одна ошибка бесконечного цикла. В моем обновлении плагин я убедился, что я зарегистрировал два изображения (Pre и Post). Я был бы признателен, если бы кто-нибудь мог мне посоветовать, как делать проверки между изображениями до и после?

+1

Можете ли вы опубликовать код плагина? Если мое понимание правильное, вам не нужны изображения pre/post – glosrob

+1

Привет, большое спасибо за ваш ответ, да, трюк заключался в том, чтобы поставить if-statement прямо в верхней части метода exceute (if (context.depth> 1) return;) Цените свой ответ, только что узнали вчера вечером :-). - –

ответ

3

Нам нужно увидеть ваш код. Но я могу дать краткое объяснение тому, что там происходит.
service.Update(entity) вызовите ваш плагин еще раз, потому что это еще одно обновление для объекта, в котором зарегистрирован ваш подключаемый модуль. Чтобы избежать этого бесконечного цикла, вы можете посмотреть свойство Depth. Каждый новый вызов плагина увеличит значение этого свойства.

Если вы хотите знать, какие свойства были изменены во время обновления, просто просмотрите InputParameters. Будут обновлены только значения свойств.

Изображения Pre-Entity доступны для сообщения «Обновление», но не для «Создать» (невозможно создать изображение до того, как экземпляр объекта был фактически создан). Но изображение Post-Entity представлено в случае сообщений Create и Update.
Итак, если вам нужно знать, какие свойства были изменены, проверьте InputParameters. Вы можете сделать это в плагине Pre-Stage. И значение, обновления в InputParameters будут храниться в базе данных, так что вам не нужно вызывать service.Update.

+0

Привет, большое спасибо за ваш ответ, да, трюк заключался в том, чтобы поставить if-statement прямо в верхней части метода exceute (if (context.depth> 1) return;) Цените свой ответ, только что выяснили сам вчера ночь :-). –

+1

Подумайте о том, чтобы обозначить этот ответ как принято, поскольку, казалось бы, он предоставил вам ответ в этом случае – glosrob