AXForum  
Go Back   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Разработка
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

 
 
Thread Tools Search this Thread Display Modes
Old 06.09.2010, 11:40   #1  
Tarasov E is offline
Tarasov E
Участник
Tarasov E's Avatar
 
100 / 11 (1) +
Join Date: 01.09.2009
Plugin: Обновление одной записи при вводе данных в поле другой
Добрый день! Есть вот какая задача: есть дву сущности A и B. В сущности а есть поле new_barcode в которое вводится GUID записи из сущности B. Так вот нужно, чтобы при вводе данных в это поле в записи сущности B с соответствующим GUID изменялось значение поля new_status типа bit с 0 на 1. Я так понимаю, что это задача больше подходит для написания плагина, нежели БП. В таком случае с чего начать? Как получить значение поля new_barcode? Далее я так понимаю после получения значения работать с сущностью B через Querry Expression?
Old 06.09.2010, 12:03   #2  
a33ik is offline
a33ik
Чайный пьяница
a33ik's Avatar
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Join Date: 02.07.2008
Location: Greenville, SC
Quote:
Originally Posted by Tarasov E View Post
Добрый день! Есть вот какая задача: есть дву сущности A и B. В сущности а есть поле new_barcode в которое вводится GUID записи из сущности B. Так вот нужно, чтобы при вводе данных в это поле в записи сущности B с соответствующим GUID изменялось значение поля new_status типа bit с 0 на 1. Я так понимаю, что это задача больше подходит для написания плагина, нежели БП. В таком случае с чего начать? Как получить значение поля new_barcode? Далее я так понимаю после получения значения работать с сущностью B через Querry Expression?
Поле в сущности а я так понимаю строковое. Тогла в коде плагина используете примерно такой код:

Code:
DynamicEntity target = (DynamicEntity)context.InputParameters["Target"];
if (!target.Properties.Contains("new_barcode"))
return;

string barcode = (string)target["new_barcode"];
А дальше уже можно получать сущности при помощи запросов. В этом конкретном случае - думаю, что можно и без этого обойтись. Примерно такой код:

Code:
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
This post has been rated by: Tarasov E (1).
Old 06.09.2010, 14:29   #3  
Tarasov E is offline
Tarasov E
Участник
Tarasov E's Avatar
 
100 / 11 (1) +
Join Date: 01.09.2009
Имею вот такой вот рабочий код:
Code:
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 обновлена успешно?

Last edited by Tarasov E; 06.09.2010 at 14:33.
Old 06.09.2010, 14:44   #4  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Артем Enot Грунин's Avatar
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Join Date: 16.08.2007
Location: Пермь!
Blog Entries: 151
Плагины работают на уровне ядра системы и с пользователем никак не взаимодействуют. Единственный способ сообщить что-то пользователю - это выбросить исключение InvalidPluginExecutionException, но в этом случае работа плагина будет прервана и пользователь получит пугающее сообщение об ошибке.
Об успешности операции плагин может отчитаться, например, прикрепив к сущности примечание вида: "Операция такая-то выполнена успешно".
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional

Last edited by Артем Enot Грунин; 06.09.2010 at 14:47.
This post has been rated by: Tarasov E (1).
Old 07.09.2010, 09:12   #5  
Tarasov E is offline
Tarasov E
Участник
Tarasov E's Avatar
 
100 / 11 (1) +
Join Date: 01.09.2009
Плагин поставил на событие Update. Но по сути, мне нужно, чтобы он отрабатывал каждый раз при нажатии на кнопку "Сохранить" или "Сохранить и закрыть" в независимости от того, изменились ли данные в поле new_barcode. Нашел только Close, но это как я понял мне не подходит, есть какой-нибудь выход?
Old 07.09.2010, 11:02   #6  
a33ik is offline
a33ik
Чайный пьяница
a33ik's Avatar
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Join Date: 02.07.2008
Location: Greenville, SC
Quote:
Originally Posted by Tarasov E View Post
Плагин поставил на событие Update. Но по сути, мне нужно, чтобы он отрабатывал каждый раз при нажатии на кнопку "Сохранить" или "Сохранить и закрыть" в независимости от того, изменились ли данные в поле new_barcode. Нашел только Close, но это как я понял мне не подходит, есть какой-нибудь выход?
Если Вы регистрируете плагин на Update, то он будет срабатывать каждый раз при обновлении записи - независимо от того это Сохранить или Сохранить и закрыть.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Old 07.09.2010, 11:21   #7  
Tarasov E is offline
Tarasov E
Участник
Tarasov E's Avatar
 
100 / 11 (1) +
Join Date: 01.09.2009
В том то и дело, что мне нужно, чтобы плагин срабатывал по нажатию на эти кнопки, даже если данные не изменились
Old 07.09.2010, 11:26   #8  
a33ik is offline
a33ik
Чайный пьяница
a33ik's Avatar
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Join Date: 02.07.2008
Location: Greenville, SC
Quote:
Originally Posted by Tarasov E View Post
В том то и дело, что мне нужно, чтобы плагин срабатывал по нажатию на эти кнопки, даже если данные не изменились
Сделайте какое то фиктивное поле, вынесите его на форму, скройте, каждый раз при загрузке изменяйте его значение, плагин - зарегистрируйте на изменение этого поля. Таким образом добьётесь того, что плагин будет срабатывать каждый раз при сохранении.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Old 07.09.2010, 16:35   #9  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Артем Enot Грунин's Avatar
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Join Date: 16.08.2007
Location: Пермь!
Blog Entries: 151
Может быть тогда не плагин а кастомная страница и кнопка на форме? Ну или пусть в нее будет бить скрипт по OnSave. А то как-то не элегантно получается. Что за функционал у вас такой?
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

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

Similar Threads
Thread Thread Starter Forum Replies Last Post
Создание одной записи на основании другой 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

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 21:28.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.