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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.09.2010, 11:40   #1  
Tarasov E is offline
Tarasov E
Участник
Аватар для Tarasov E
 
100 / 11 (1) +
Регистрация: 01.09.2009
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  
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
Цитата:
Сообщение от 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  
Tarasov E is offline
Tarasov E
Участник
Аватар для Tarasov E
 
100 / 11 (1) +
Регистрация: 01.09.2009
Имею вот такой вот рабочий код:
Код:
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);
                }
            }
Хотелось бы как-нибудь уведомлять пользователя о том, что плагин отработал успешно, но как послать сообщение от плагина - не знаю. До этого пользовался alert'ами. Не подскажете как сделать сообщение скажем, если введеный GUID не найден и если сущность B обновлена успешно?

Последний раз редактировалось Tarasov E; 06.09.2010 в 14:33.
Старый 06.09.2010, 14:44   #4  
Артем 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
Плагины работают на уровне ядра системы и с пользователем никак не взаимодействуют. Единственный способ сообщить что-то пользователю - это выбросить исключение 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  
Tarasov E is offline
Tarasov E
Участник
Аватар для Tarasov E
 
100 / 11 (1) +
Регистрация: 01.09.2009
Плагин поставил на событие Update. Но по сути, мне нужно, чтобы он отрабатывал каждый раз при нажатии на кнопку "Сохранить" или "Сохранить и закрыть" в независимости от того, изменились ли данные в поле new_barcode. Нашел только Close, но это как я понял мне не подходит, есть какой-нибудь выход?
Старый 07.09.2010, 11:02   #6  
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
Цитата:
Сообщение от Tarasov E Посмотреть сообщение
Плагин поставил на событие Update. Но по сути, мне нужно, чтобы он отрабатывал каждый раз при нажатии на кнопку "Сохранить" или "Сохранить и закрыть" в независимости от того, изменились ли данные в поле new_barcode. Нашел только Close, но это как я понял мне не подходит, есть какой-нибудь выход?
Если Вы регистрируете плагин на Update, то он будет срабатывать каждый раз при обновлении записи - независимо от того это Сохранить или Сохранить и закрыть.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 07.09.2010, 11:21   #7  
Tarasov E is offline
Tarasov E
Участник
Аватар для Tarasov E
 
100 / 11 (1) +
Регистрация: 01.09.2009
В том то и дело, что мне нужно, чтобы плагин срабатывал по нажатию на эти кнопки, даже если данные не изменились
Старый 07.09.2010, 11:26   #8  
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
Цитата:
Сообщение от Tarasov E Посмотреть сообщение
В том то и дело, что мне нужно, чтобы плагин срабатывал по нажатию на эти кнопки, даже если данные не изменились
Сделайте какое то фиктивное поле, вынесите его на форму, скройте, каждый раз при загрузке изменяйте его значение, плагин - зарегистрируйте на изменение этого поля. Таким образом добьётесь того, что плагин будет срабатывать каждый раз при сохранении.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 07.09.2010, 16:35   #9  
Артем 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
Может быть тогда не плагин а кастомная страница и кнопка на форме? Ну или пусть в нее будет бить скрипт по OnSave. А то как-то не элегантно получается. Что за функционал у вас такой?
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 13.09.2010, 08:16   #10  
Tarasov E is offline
Tarasov E
Участник
Аватар для Tarasov E
 
100 / 11 (1) +
Регистрация: 01.09.2009
Именно так и сделал. Заменил плагин кастомной аспх странице с кнопкой на тулбаре изменяемой сущности)
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Создание одной записи на основании другой ZooY Dynamics CRM: Разработка 1 26.07.2010 08:14
Как удалить время при вставке динамического значения поля datetime в поле другой сущьности при настройке бизнес процесса? guenberg Dynamics CRM: Разработка 4 17.06.2010 21:58
haditeo: Is it possible to register different event handlers in only one assembly to be registered in Dynamics CRM Plugin ? Blog bot Dynamics CRM: Blogs 0 13.08.2009 15:05
Импорт данных из одной организации в другую vital.mih Dynamics CRM: Администрирование 14 13.06.2009 12:44
Обновление данных после выхода в Online Gennadi Dynamics CRM: Администрирование 4 20.05.2009 19:48

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

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

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