06.09.2010, 11:40 | #1 |
Участник
|
Plugin: Обновление одной записи при вводе данных в поле другой
Добрый день! Есть вот какая задача: есть дву сущности A и B. В сущности а есть поле new_barcode в которое вводится GUID записи из сущности B. Так вот нужно, чтобы при вводе данных в это поле в записи сущности B с соответствующим GUID изменялось значение поля new_status типа bit с 0 на 1. Я так понимаю, что это задача больше подходит для написания плагина, нежели БП. В таком случае с чего начать? Как получить значение поля new_barcode? Далее я так понимаю после получения значения работать с сущностью B через Querry Expression?
|
|
06.09.2010, 12:03 | #2 |
Чайный пьяница
|
Цитата:
Сообщение от Tarasov E
Добрый день! Есть вот какая задача: есть дву сущности A и B. В сущности а есть поле new_barcode в которое вводится GUID записи из сущности B. Так вот нужно, чтобы при вводе данных в это поле в записи сущности B с соответствующим GUID изменялось значение поля new_status типа bit с 0 на 1. Я так понимаю, что это задача больше подходит для написания плагина, нежели БП. В таком случае с чего начать? Как получить значение поля new_barcode? Далее я так понимаю после получения значения работать с сущностью B через Querry Expression?
Код: DynamicEntity target = (DynamicEntity)context.InputParameters["Target"]; if (!target.Properties.Contains("new_barcode")) return; string barcode = (string)target["new_barcode"]; Код: ICrmService crmservice = context.CreateCrmService(true); try { Guid barcodeid = new Guid(barcode); DynamicEntity barcodeentity = new DynamicEntity("<название схему сущности Б>"); barcodeentity["<название схему сущности Б>id"] = new Key(barcodeid); barcodeentity["new_status"] = new CrmBoolean(true); crmservice.Update(barcodeentity); } catch{}
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: Tarasov E (1). |
06.09.2010, 14:29 | #3 |
Участник
|
Имею вот такой вот рабочий код:
Код: public void Execute(IPluginExecutionContext context) { DynamicEntity entity = null; if (context.InputParameters.Properties.Contains(ParameterName.Target) && context.InputParameters.Properties[ParameterName.Target] is DynamicEntity) { entity = (DynamicEntity)context.InputParameters.Properties[ParameterName.Target]; } else { return; } try { ICrmService crmService = context.CreateCrmService(true); if (entity.Properties.Contains("new_barcode")) { Guid id = new Guid(entity["new_barcode"].ToString()); UpdateRequest updateRequest = new UpdateRequest(); TargetUpdateDynamic targetUpdateDynamic = new TargetUpdateDynamic(); DynamicEntity reglament = new DynamicEntity("new_reglament"); reglament["new_reglamentid"] = new Key(id); reglament["new_status"] = new CrmBoolean(true); targetUpdateDynamic.Entity = reglament; updateRequest.Target = targetUpdateDynamic; crmService.Execute(updateRequest); } } Последний раз редактировалось Tarasov E; 06.09.2010 в 14:33. |
|
06.09.2010, 14:44 | #4 |
Moderator
|
Плагины работают на уровне ядра системы и с пользователем никак не взаимодействуют. Единственный способ сообщить что-то пользователю - это выбросить исключение InvalidPluginExecutionException, но в этом случае работа плагина будет прервана и пользователь получит пугающее сообщение об ошибке.
Об успешности операции плагин может отчитаться, например, прикрепив к сущности примечание вида: "Операция такая-то выполнена успешно".
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional Последний раз редактировалось Артем Enot Грунин; 06.09.2010 в 14:47. |
|
|
За это сообщение автора поблагодарили: Tarasov E (1). |
07.09.2010, 09:12 | #5 |
Участник
|
Плагин поставил на событие Update. Но по сути, мне нужно, чтобы он отрабатывал каждый раз при нажатии на кнопку "Сохранить" или "Сохранить и закрыть" в независимости от того, изменились ли данные в поле new_barcode. Нашел только Close, но это как я понял мне не подходит, есть какой-нибудь выход?
|
|
07.09.2010, 11:02 | #6 |
Чайный пьяница
|
Цитата:
Сообщение от Tarasov E
Плагин поставил на событие Update. Но по сути, мне нужно, чтобы он отрабатывал каждый раз при нажатии на кнопку "Сохранить" или "Сохранить и закрыть" в независимости от того, изменились ли данные в поле new_barcode. Нашел только Close, но это как я понял мне не подходит, есть какой-нибудь выход?
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
07.09.2010, 11:21 | #7 |
Участник
|
В том то и дело, что мне нужно, чтобы плагин срабатывал по нажатию на эти кнопки, даже если данные не изменились
|
|
07.09.2010, 11:26 | #8 |
Чайный пьяница
|
Сделайте какое то фиктивное поле, вынесите его на форму, скройте, каждый раз при загрузке изменяйте его значение, плагин - зарегистрируйте на изменение этого поля. Таким образом добьётесь того, что плагин будет срабатывать каждый раз при сохранении.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
07.09.2010, 16:35 | #9 |
Moderator
|
Может быть тогда не плагин а кастомная страница и кнопка на форме? Ну или пусть в нее будет бить скрипт по OnSave. А то как-то не элегантно получается. Что за функционал у вас такой?
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
13.09.2010, 08:16 | #10 |
Участник
|
Именно так и сделал. Заменил плагин кастомной аспх странице с кнопкой на тулбаре изменяемой сущности)
|
|
|
|