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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.02.2012, 11:28   #1  
2rik is offline
2rik
Участник
 
20 / 10 (1) +
Регистрация: 15.11.2011
Спасибо. Сам не понимаю, почему он может не подхватывать.
Ниже привожу код плагина

X++:
using System;
using System.ServiceModel;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Client;
using Microsoft.Xrm.Sdk.Query;
using System.Collections;
using Microsoft.Xrm.Sdk.Client;
using System.Data;

namespace WorkWithProject
{
    public  class Plugin : IPlugin
    {
        
        public  OrganizationServiceContext orgContext;
        public  OrganizationServiceProxy _serviceProxy;
        public  IOrganizationService _service;

        public  int Nomer = 0;
        public string ProjectPrefix = "";
        public  string StrNomer = "";
        public  string EntityPrefix = "";
        
        

        public  void Init()
        {
            _serviceProxy.EnableProxyTypes();
            _service = (IOrganizationService)_serviceProxy;
            // Create the OrganizationServiceContext object that will generate the IQueryable collections for LINQ calls.
            orgContext = new OrganizationServiceContext(_service);
        }
        public  string WorkWithNumber(int Number, string EntityPrefix, string PrefixProekta)
        {
            string result = null;

            result = String.Format("{1}{2}-{0,5:00000}", Number, EntityPrefix, PrefixProekta);

            return result;
        }

        public  void Execute(IServiceProvider serviceProvider)
        {
           
            IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
            IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            _service = serviceFactory.CreateOrganizationService(context.UserId);
            orgContext = new OrganizationServiceContext(_service);
             
            ITracingService trace = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
            
            if (context.Depth > 1)
            {
                return;
            }

            Entity entity = null;

            if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
            {
                // Obtain the target business entity from the input parmameters.
                entity = (Entity)context.InputParameters["Target"];
                // TODO Test for an entity type and message supported by your plug-in.
                
                
            }
            else return;
           

            if (entity != null)
            {
                try
                {
                    Guid EntityId = ((Guid)entity.Id);


                    if (entity.LogicalName == "project_task")
                    {
                        #region  
                        //вынимаем задачу проекта-------------------------------------------------------------
                        var ProjectTask = (from PT in orgContext.CreateQuery<project_task>()
                                           where (PT.Id == EntityId)
                                           select new project_task{ Id = PT.Id }).FirstOrDefault();
                        if (ProjectTask == null) return;
                        //------------------------------------------------------------------------------------
                        if (ProjectTask.project== null) return;
                        else
                        {
                            //вытягиваем проект-------------------------------------------------------
                            var Project = (from P in orgContext.CreateQuery<project>()
                                           where (P.Id == ProjectTask.project.Id)
                                           select new project{ Id = P.Id }).FirstOrDefault();
                            if (Project == null) return;
                            //-----------------------------------------------------------------------

                            if (Project.number== null) Nomer = 1;
                            else Nomer = (int)Project.task_number;

                            EntityPrefix = "T";

                            if (Project.prefix != null) ProjectPrefix = Project.prefix;
                            StrNomer = WorkWithNumber(Nomer, EntityPrefix, ProjectPrefix);

                            ProjectTask.number = StrNomer;


                            orgContext.UpdateObject(ProjectTask);
                            _service.Update(ProjectTask);



                            Project.number = Nomer + 1;
                            orgContext.UpdateObject(Project);
                            _service.Update(Project);


                            //orgContext.SaveChanges();

                        }
                       
                    }

                    else if (entity.LogicalName == "out_task")
                    {
                        #region  

                        //вынимаем задачу проекта-------------------------------------------------------------
                        var ProjectTaskOut = (from PTO in orgContext.CreateQuery<out_task>()
                                              where (PTO.Id == EntityId)
                                              select new out_task{ Id = PTO.Id }).FirstOrDefault();
                        if (ProjectTaskOut == null) return;
                        //------------------------------------------------------------------------------------
                        if (ProjectTaskOut.project== null) return;
                        else
                        {
                            //вытягиваем проект-------------------------------------------------------
                            var Project = (from P in orgContext.CreateQuery<project>()
                                           where (P.Id == ProjectTaskOut.project.Id)
                                           select new project{ Id = P.Id }).FirstOrDefault();
                            if (Project == null) return;
                            //-----------------------------------------------------------------------

                            if (Project.out_task_number == null) Nomer = 1;
                            else Nomer = (int)Project.out_task_number;

                            EntityPrefix = "E";

                            if (Project.prefix != null) ProjectPrefix = Project.prefix;
                            StrNomer = WorkWithNumber(Nomer, EntityPrefix, ProjectPrefix);

                            ProjectTaskOut.number = StrNomer;
                            orgContext.UpdateObject(ProjectTaskOut);
                            _service.Update(ProjectTaskOut);

                            Project.out_task_number = Nomer + 1;
                            orgContext.UpdateObject(Project);
                            _service.Update(Project);

                        }



                        #endregion
                    }

                    else if (entity.LogicalName == "defect")
                    {
                        #region 

                        //вынимаем задачу проекта-------------------------------------------------------------
                        var Defect = (from D in orgContext.CreateQuery<defect>()
                                      where (D.Id == EntityId)
                                      select new defect{ Id = D.Id }).FirstOrDefault();
                        if (Defect == null) return;
                        //------------------------------------------------------------------------------------
                        if (Defect.project== null) return;
                        else
                        {
                            //вытягиваем проект-------------------------------------------------------
                            var Project = (from P in orgContext.CreateQuery<project>()
                                           where (P.Id == Defect.project.Id)
                                           select new project{ Id = P.Id }).FirstOrDefault();
                            if (Project == null) return;
                            //-----------------------------------------------------------------------

                            if (Project.new_nomer_defecta == null) Nomer = 1;
                            else Nomer = (int)Project.new_nomer_defecta;

                            EntityPrefix = "D";

                            if (Project.prefix!= null) ProjectPrefix = Project.new_prefix_numeracii;
                            StrNomer = WorkWithNumber(Nomer, EntityPrefix, ProjectPrefix);

                            Defect.number= StrNomer;
                            orgContext.UpdateObject(Defect);
                            _service.Update(Defect);

                            Project.number= Nomer + 1;
                            orgContext.UpdateObject(Project);
                            _service.Update(Project);

                        }



                        #endregion
                    }

                    else if (entity.LogicalName == "changes")
                    {
                        #region 

                        //вынимаем задачу проекта-------------------------------------------------------------
                        var Izm = (from I in orgContext.CreateQuery<changes>()
                                   where (I.Id == EntityId)
                                   select new changes{ Id = I.Id }).FirstOrDefault();
                        if (Izm == null) return;
                        //------------------------------------------------------------------------------------
                        if (Izm.new_proekt == null) return;
                        else
                        {
                            //вытягиваем проект-------------------------------------------------------
                            var Project = (from P in orgContext.CreateQuery<project>()
                                           where (P.Id == Izm.project.Id)
                                           select new project{ Id = P.Id }).FirstOrDefault();
                            if (Project == null) return;
                            //-----------------------------------------------------------------------

                            if (Project.changes== null) Nomer = 1;
                            else Nomer = (int)Project.number;

                            EntityPrefix = "C";

                            if (Project.prefix != null) ProjectPrefix = Project.prefix;
                            StrNomer = WorkWithNumber(Nomer, EntityPrefix, ProjectPrefix);

                            Izm.new_nomer = StrNomer;
                            orgContext.UpdateObject(Izm);
                            _service.Update(Izm);

                            Project.new_nomer_izmeneniya = Nomer + 1;
                            orgContext.UpdateObject(Project);
                            _service.Update(Project);

                        }



                        #endregion
                    }

                    else if (entity.LogicalName == "risk")
                    {
                        #region 

                        //вынимаем задачу проекта-------------------------------------------------------------
                        var Risk = (from R in orgContext.CreateQuery<risk>()
                                    where (R.Id == EntityId)
                                    select new risk{ Id = R.Id }).FirstOrDefault();
                        if (Risk == null) return;
                        //------------------------------------------------------------------------------------
                        if (Risk.project== null) return;
                        else
                        {
                            //вытягиваем проект-------------------------------------------------------
                            var Project = (from P in orgContext.CreateQuery<project>()
                                           where (P.Id == Risk.new_proektid.Id)
                                           select new project{ Id = P.Id }).FirstOrDefault();
                            if (Project == null) return;
                            //-----------------------------------------------------------------------

                            if (Project.number== null) Nomer = 1;
                            else Nomer = (int)Project.number;

                            EntityPrefix = "R";

                            if (Project.prefix!= null) ProjectPrefix = Project.prefix;
                            StrNomer = WorkWithNumber(Nomer, EntityPrefix, ProjectPrefix);

                            Risk.number= StrNomer;
                            orgContext.UpdateObject(Risk);
                            _service.Update(Risk);

                            Project.number= Nomer + 1;
                            orgContext.UpdateObject(Project);
                            _service.Update(Project);

                        }



                        #endregion
                    }

                }
                
                catch (FaultException<OrganizationServiceFault> ex)
                {
                    throw new InvalidPluginExecutionException(ex.Message,ex);
                }
            }
        }
    }
}

Последний раз редактировалось 2rik; 21.02.2012 в 11:43.
Старый 21.02.2012, 11:51   #2  
griefon is offline
griefon
Участник
 
131 / 52 (2) ++++
Регистрация: 07.12.2010
Адрес: down under
А вы в отладчике смотрели, плагин не запускается вообще или по какой-то причине не выполняет заложенную логику?
Старый 21.02.2012, 11:55   #3  
2rik is offline
2rik
Участник
 
20 / 10 (1) +
Регистрация: 15.11.2011
Пока не могу получить доступ на сервак, где он лежит, но когда создаю сущность вручную - он отрабатывает без проблем. Поэтому делаю выводы - что не запускается вообще.
Старый 21.02.2012, 12:06   #4  
griefon is offline
griefon
Участник
 
131 / 52 (2) ++++
Регистрация: 07.12.2010
Адрес: down under
Смущает вот такая проверка context.Depth > 1
Вроде как бизнес-процесс увеличивает глубину на единицу.

http://www.officeextend.nl/blog/tag/CRM%204

По ссылке есть пост с заголовком Workflow adds 1 to context depth of plugin, там подробно расписано.
За это сообщение автора поблагодарили: 2rik (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Создание Order из другой сущности ashuron Dynamics CRM: Разработка 3 16.11.2011 22:21
создание прайса бизнес-процессом lin2nil Dynamics CRM: Функционал 2 12.10.2011 00:06
Как открыть в новом окне созданный бизнес-процессом объект? NatK Dynamics CRM: Разработка 6 30.09.2009 09:18
Создание экземпляра кастомной сущности из плагина Roman08 Dynamics CRM: Разработка 14 31.08.2009 21:34
Создание объекта сущности из другого объекта! SnSS Dynamics CRM: Разработка 5 29.05.2008 13:38
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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