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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.11.2009, 15:46   #1  
SVK is offline
SVK
Участник
Аватар для SVK
 
36 / 10 (1) +
Регистрация: 20.09.2005
Адрес: Москва
Lightbulb Как передать переменную из одного плагина в другой?
Задача: прервать каскадное выполнение некоторых плагинов при определенном действии.
Плагины на разных сущностях - т.е. шины разные.
Можно ли расшарить какие-то переменные между разными плагинами и как это сделать?
Что-то вроде SharedVariables на одной шине.

Коллеги, выслушаю любые идеи.
__________________
CRM programmer
Старый 12.11.2009, 15:59   #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
Цитата:
Сообщение от SVK Посмотреть сообщение
Задача: прервать каскадное выполнение некоторых плагинов при определенном действии.
Плагины на разных сущностях - т.е. шины разные.
Можно ли расшарить какие-то переменные между разными плагинами и как это сделать?
Что-то вроде SharedVariables на одной шине.

Коллеги, выслушаю любые идеи.
Попробуйте использовать ParentContext.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 12.11.2009, 16:11   #3  
SVK is offline
SVK
Участник
Аватар для SVK
 
36 / 10 (1) +
Регистрация: 20.09.2005
Адрес: Москва
ParentContext пустой для второго плагина, а установить его нельзя, судя по мсдн
"Remarks

This property is read only. "
__________________
CRM programmer
Старый 12.11.2009, 16:27   #4  
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
Цитата:
Сообщение от SVK Посмотреть сообщение
ParentContext пустой для второго плагина, а установить его нельзя, судя по мсдн
"Remarks

This property is read only. "
Тогда остаются только эксперименты.

Можете более детально рассказать о Вашем каскадном механимзе? Т.е. какие плагины есть и какие сообщения они обрабатывают.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 12.11.2009, 16:36   #5  
SVK is offline
SVK
Участник
Аватар для SVK
 
36 / 10 (1) +
Регистрация: 20.09.2005
Адрес: Москва
1) При переназначении(assign) сущности Opportunity создаю сущность история сделки(new_opportunityhistory).

2) при создании сущности история сделки(new_opportunityhistory), обновляются некоторые поля сущности Opportunity.

Нужно, чтобы второй плагин, при таком порядке вызова, обновлял не все поля на сущности Opportunity.

Сейчас думаю, что можно как-то через базовый класс Request передать параметры, но пока не придумал как.
__________________
CRM programmer
Старый 12.11.2009, 16:47   #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
Цитата:
Сообщение от SVK Посмотреть сообщение
1) При переназначении(assign) сущности Opportunity создаю сущность история сделки(new_opportunityhistory).

2) при создании сущности история сделки(new_opportunityhistory), обновляются некоторые поля сущности Opportunity.

Нужно, чтобы второй плагин, при таком порядке вызова, обновлял не все поля на сущности Opportunity.

Сейчас думаю, что можно как-то через базовый класс Request передать параметры, но пока не придумал как.
Понятно. Есть 2 идеи:
1. Используйте OptionalParameters.
2. В Вашем шаге 1 при создании сущности new_opportunityhistory создавайте какое то фиктивное поле-флаг, а в плагине Pre-Create этой сущности запоминайте, что поле пришло в контексте, убирайте его из контекста и передавайте дальше при помощи SharedVariables.
3. Мусорный, но на 100% рабочий. Создайте в сущности new_opportunityhistory служебное поле и при Вашем шаге 1 - заполняйте это поле, а на шаге 2 судите о наличии флага по наличию поля-флага в контексте.

Фокусов 1 и 2 я не делал, потому если это заработает - сообщите, пожалуйста.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit

Последний раз редактировалось a33ik; 12.11.2009 в 16:49.
Старый 12.11.2009, 17:49   #7  
SVK is offline
SVK
Участник
Аватар для SVK
 
36 / 10 (1) +
Регистрация: 20.09.2005
Адрес: Москва
OptionalParameters предопределены. Наследовать класс не получается - он не сериализует мои типы ((
Второй способ пока не опробовал. Ох и огород получится.
Через служебное поле то как раз и не хотел - утомил этот способ уже.
__________________
CRM programmer

Последний раз редактировалось SVK; 12.11.2009 в 19:05.
Старый 12.11.2009, 18:44   #8  
SVK is offline
SVK
Участник
Аватар для SVK
 
36 / 10 (1) +
Регистрация: 20.09.2005
Адрес: Москва
Второй способ - валидатор не пускает - "\n 0x80041103\n 'New_opportunityhistory' entity doesn't contain attribute with Name = 'UpdateOppAfterHistory'.\n
Это при вызове Create до вызова плагина падает
__________________
CRM programmer
Старый 13.11.2009, 10:33   #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
Я не слишком искушен в программировании плагинов, но почему-бы не использовать IPluginExecutionContext.SharedVariables. Есть даже целый раздел SDK: Passing Data Between Plug-ins.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 13.11.2009, 11:29   #10  
SVK is offline
SVK
Участник
Аватар для SVK
 
36 / 10 (1) +
Регистрация: 20.09.2005
Адрес: Москва
Нюансы SharedVariables таковы, что невозможно передать сообщение между двумя плагинами на разных сущностях, а только между плагинами пре и пост на одной сущности.
Следует учесть, что у меня плагины для разных сущностей разнесены по разным сборкам. Может быть, если запихнуть все в одну сборку будет иначе...
__________________
CRM programmer

Последний раз редактировалось SVK; 13.11.2009 в 12:57.
Старый 13.11.2009, 13:35   #11  
SVK is offline
SVK
Участник
Аватар для SVK
 
36 / 10 (1) +
Регистрация: 20.09.2005
Адрес: Москва
UPD. Иначе не стало - плагин теряет этот контекст для разных сущностей ((
__________________
CRM programmer
Старый 13.11.2009, 14:09   #12  
SVK is offline
SVK
Участник
Аватар для SVK
 
36 / 10 (1) +
Регистрация: 20.09.2005
Адрес: Москва
Коллеги, я сделал это - передал что мне нужно, не используя базу )

Через следующую конструкцию
1) сделал промежутчную DLL для общих методов
2) реализовал статичный метод, через еоторый можно будет передавать статичные переменные

X++:
namespace Helper
{
    public static class Keeper
    {
        private static bool _UpdateOppAfterHistory = true;
        public static bool UpdateOppAfterHistory 
        {
            get { return _UpdateOppAfterHistory; }
            set { _UpdateOppAfterHistory = value; }
        }
        
    }
    public class OpportunityHelper
    { ... }
}
3) вызов производится следующим образом
X++:
 // Перед вызовом создания истории, устанавливаем флаг,
 // для плагина New_opportunityhistory.OpportunityHistory_Create
Keeper.UpdateOppAfterHistory = false;

OpportunityHelper.CreateOpportunityHistory(Opp,crmService);
                
// снимаем флажок обратно
Keeper.UpdateOppAfterHistory = true;
4) в плагине, который вызывается каскадом анализ переменной

X++:
bool UpdateOppAfterHistory = Keeper.UpdateOppAfterHistory;
if (UpdateOppAfterHistory)
{ ... }
__________________
CRM programmer
Старый 13.11.2009, 14:15   #13  
Артем 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
Извините, не внимательно прочитал топик. Можете подробно рассказать что и как должно происходить? А то есть ощущение, что "код с душком". Если плагин на назначение создает какой-то объект, то пусть он сам и меняет сделку! Зачем вешать на "историю" дополнительный плагин с feedback? На мой взгляд это перегрузка логики служебного объекта.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 13.11.2009, 14:22   #14  
SVK is offline
SVK
Участник
Аватар для SVK
 
36 / 10 (1) +
Регистрация: 20.09.2005
Адрес: Москва
Есть два разных случая:
1) Создание истории ВС вручную, открывается карточка и пользователь заполняет поля, при этом срабатывает плагин, переносящий заполненые поля с истории ВС на саму ВС.

2) Создание истории ВС автоматически, при переназначении ВС.

Вот при втором случае, каскадом стреляет плагин для случая один. Его и надо было отключить.
__________________
CRM programmer
Старый 13.11.2009, 14:29   #15  
Артем 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
На этот случай у объекта есть такое поле isWorkFlowCreated.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 13.11.2009, 15:17   #16  
SVK is offline
SVK
Участник
Аватар для SVK
 
36 / 10 (1) +
Регистрация: 20.09.2005
Адрес: Москва
У какого объекта?
У opportunity такого нету, у моего кастомного - тоже.
По SDK я вижу, что данное поле относится только к Activity разного типа и *close объектам.
Кроме того, оно разве относится к плагинам?
__________________
CRM programmer
Теги
plugin, plugin context, share

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
перенос баз CRM'а на другой SQL Server kras Dynamics CRM: Администрирование 17 01.02.2016 10:31
Модификая контекста плагина ZooY Dynamics CRM: Разработка 3 28.09.2008 13:52
Перенос баз и настроек CRM 3.0 в 4.0 с одного сервера на другой Antonf Dynamics CRM: Администрирование 11 11.08.2008 18:14
перенос CRM3,0 с одного сервера на другой gor0422 Dynamics CRM: Администрирование 2 05.06.2008 10:08
Доступ через Outlook из другой сети Артем Enot Грунин Dynamics CRM: Администрирование 6 29.02.2008 09:22

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

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

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