Показать сообщение отдельно
Старый 16.05.2011, 19:47   #7  
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
Цитата:
Сообщение от Omalinka Посмотреть сообщение
Исходя из статьи http://dmcrm.blogspot.com/2008/08/st...on-method.html переписала код с использованием OpportunityClose.
Код:
 public class OpportunityFact : IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            ITracingService tracer = (ITracingService)serviceProvider.GetService(typeof(ITracingService));

            if (tracer == null)
                throw new InvalidPluginExecutionException("Failed to retrieve the tracing service.");

            try
            {
                Microsoft.Xrm.Sdk.IPluginExecutionContext context = (Microsoft.Xrm.Sdk.IPluginExecutionContext)
                    serviceProvider.GetService(typeof(Microsoft.Xrm.Sdk.IPluginExecutionContext));

                if (context.InputParameters.Contains("OpportunityClose") &&
                    context.InputParameters["OpportunityClose"] is Entity)
                {
                    IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
                    IOrganizationService service = factory.CreateOrganizationService(context.UserId);

                    Entity entity = (Entity)context.InputParameters["OpportunityClose"];
            
                    if (entity.LogicalName == "opportunityclose")
                    {
                        
                        throw new Exception("win!");                        
                    }
                }
            }
            catch (Exception e)
            {
                tracer.Trace("Received exception: {0}", e);
                throw new InvalidPluginExecutionException(e.Message);
            }
        }
    }
Плагин заработал, но, как видно из запуска исключения (throw new Exception("win!"); ), он срабатывает уже после того, как закрыто окно, в котором вводится фактическая сумма сделки. А мне бы хотелось, чтобы при открытии формы OpportunityClose уже была заполнена правильная сумма в поле "Прибыль".

Это возможно сделать?

Плагин зарегестирован на событиях Won и Lose на PreStage.
Если хотите автоматический подсчёт такого рода, то без ансапорта тут не обойтись. Поле можно заполнить автоматически дописав JavaScript в форме закрытия сделки. Другого пути, к сожалению, нет.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
За это сообщение автора поблагодарили: Omalinka (1).