|
|
#1 |
|
Участник
|
Plugin: Обновление одной записи при вводе данных в поле другой
Добрый день! Есть вот какая задача: есть дву сущности A и B. В сущности а есть поле new_barcode в которое вводится GUID записи из сущности B. Так вот нужно, чтобы при вводе данных в это поле в записи сущности B с соответствующим GUID изменялось значение поля new_status типа bit с 0 на 1. Я так понимаю, что это задача больше подходит для написания плагина, нежели БП. В таком случае с чего начать? Как получить значение поля new_barcode? Далее я так понимаю после получения значения работать с сущностью B через Querry Expression?
|
|
|
|
|
#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). | |
|
|
#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. |
|
|
|
|
#4 |
|
Moderator
|
Плагины работают на уровне ядра системы и с пользователем никак не взаимодействуют. Единственный способ сообщить что-то пользователю - это выбросить исключение InvalidPluginExecutionException, но в этом случае работа плагина будет прервана и пользователь получит пугающее сообщение об ошибке.
Об успешности операции плагин может отчитаться, например, прикрепив к сущности примечание вида: "Операция такая-то выполнена успешно".
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. ![]() MS Certified Dirty Magic Professional
Последний раз редактировалось Артем Enot Грунин; 06.09.2010 в 14:47. |
|
|
|
| За это сообщение автора поблагодарили: Tarasov E (1). | |
|
|
#5 |
|
Участник
|
Плагин поставил на событие Update. Но по сути, мне нужно, чтобы он отрабатывал каждый раз при нажатии на кнопку "Сохранить" или "Сохранить и закрыть" в независимости от того, изменились ли данные в поле new_barcode. Нашел только Close, но это как я понял мне не подходит, есть какой-нибудь выход?
|
|
|
|
|
#6 |
|
Чайный пьяница
|
Цитата:
Сообщение от Tarasov E
Плагин поставил на событие Update. Но по сути, мне нужно, чтобы он отрабатывал каждый раз при нажатии на кнопку "Сохранить" или "Сохранить и закрыть" в независимости от того, изменились ли данные в поле new_barcode. Нашел только Close, но это как я понял мне не подходит, есть какой-нибудь выход?
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
|
|
#7 |
|
Участник
|
В том то и дело, что мне нужно, чтобы плагин срабатывал по нажатию на эти кнопки, даже если данные не изменились
|
|
|
|
|
#8 |
|
Чайный пьяница
|
Сделайте какое то фиктивное поле, вынесите его на форму, скройте, каждый раз при загрузке изменяйте его значение, плагин - зарегистрируйте на изменение этого поля. Таким образом добьётесь того, что плагин будет срабатывать каждый раз при сохранении.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
|
|
#9 |
|
Moderator
|
Может быть тогда не плагин а кастомная страница и кнопка на форме? Ну или пусть в нее будет бить скрипт по OnSave. А то как-то не элегантно получается. Что за функционал у вас такой?
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. ![]() MS Certified Dirty Magic Professional
|
|
|
|
|
#10 |
|
Участник
|
Именно так и сделал. Заменил плагин кастомной аспх странице с кнопкой на тулбаре изменяемой сущности)
|
|
|
|
|
|