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 12.11.2009, 15:46   #1  
SVK is offline
SVK
Участник
SVK's Avatar
 
36 / 10 (1) +
Join Date: 20.09.2005
Location: Москва
Lightbulb Как передать переменную из одного плагина в другой?
Задача: прервать каскадное выполнение некоторых плагинов при определенном действии.
Плагины на разных сущностях - т.е. шины разные.
Можно ли расшарить какие-то переменные между разными плагинами и как это сделать?
Что-то вроде SharedVariables на одной шине.

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

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

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

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

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

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

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

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

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

Сейчас думаю, что можно как-то через базовый класс Request передать параметры, но пока не придумал как.
__________________
CRM programmer
Old 12.11.2009, 16:47   #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 SVK View Post
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

Last edited by a33ik; 12.11.2009 at 16:49.
Old 12.11.2009, 17:49   #7  
SVK is offline
SVK
Участник
SVK's Avatar
 
36 / 10 (1) +
Join Date: 20.09.2005
Location: Москва
OptionalParameters предопределены. Наследовать класс не получается - он не сериализует мои типы ((
Второй способ пока не опробовал. Ох и огород получится.
Через служебное поле то как раз и не хотел - утомил этот способ уже.
__________________
CRM programmer

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

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

Last edited by SVK; 13.11.2009 at 12:57.
Old 13.11.2009, 13:35   #11  
SVK is offline
SVK
Участник
SVK's Avatar
 
36 / 10 (1) +
Join Date: 20.09.2005
Location: Москва
UPD. Иначе не стало - плагин теряет этот контекст для разных сущностей ((
__________________
CRM programmer
Old 13.11.2009, 14:09   #12  
SVK is offline
SVK
Участник
SVK's Avatar
 
36 / 10 (1) +
Join Date: 20.09.2005
Location: Москва
Коллеги, я сделал это - передал что мне нужно, не используя базу )

Через следующую конструкцию
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
Old 13.11.2009, 14:15   #13  
Артем 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
Извините, не внимательно прочитал топик. Можете подробно рассказать что и как должно происходить? А то есть ощущение, что "код с душком". Если плагин на назначение создает какой-то объект, то пусть он сам и меняет сделку! Зачем вешать на "историю" дополнительный плагин с feedback? На мой взгляд это перегрузка логики служебного объекта.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

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

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

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

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

 

Similar Threads
Thread Thread Starter Forum Replies Last Post
перенос баз 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

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 23:55.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.