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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.10.2010, 13:16   #1  
_AV_ is offline
_AV_
Участник
 
29 / 19 (1) ++
Регистрация: 27.02.2008
Адрес: Санкт-Петербург
AddLink в LINQ
Всем привет!

Познаю удобства использования LINQ в разработке бизнес-логики в CRM и с толкнулся с непонятностью работы метода AddLink.

Архитектура:
Отчет N:N Группа пользователей
Группа пользователей N:N Пользователи

Проблема в том, что AddLink() не связывает группу с отчетом, при этом никаких ошибок не возьникает и, что совсем интересно, AddLink() отлично связывает пользователей с группой .
Подскажите куда копать?

X++:
        #region IPlugin Members
        DataContext crm;
        /// <summary>
        /// Создает или находит групу пользователей для уведомления
        /// </summary>
        /// <param name="negotiationsbg"></param>
        mrv_membershipsgroup CreateOrFindGroup(mrv_reportsofopportunity reportsofopportunity)
        {
            mrv_membershipsgroup membershipsgroup = (from membershipsgroups in crm.mrv_membershipsgroups
                                                     where membershipsgroups.mrv_name == reportsofopportunity.mrv_name
                                                     select membershipsgroups).Single();

            if (membershipsgroup == null)
            {
                membershipsgroup = new Entities.mrv_membershipsgroup();
                membershipsgroup.mrv_name = reportsofopportunity.mrv_name;
                //Добавляем новую группу пользователей для уведомления    
                crm.AddTomrv_membershipsgroups(membershipsgroup);
                crm.SaveChanges();
                //Связываем N:N с отчетом НО ПОЧЕМУ ТО НЕ СВЯЗЫВЕТ!!!
                crm.AddLink(reportsofopportunity, "mrv_membershipsgroup_mrv_reportsofopportuni", membershipsgroup);
                crm.SaveChanges();
            }

            return membershipsgroup;
        }
        /// <summary>
        /// Добавляет пользователей в группу уведомления 
        /// </summary>
        /// <param name="membershipsgroup"></param>
        void AddSysUsersToGroup(mrv_membershipsgroup membershipsgroup, mrv_negotiationsbg negotiationsbg)
        {
            var queryResponsibilitys = from responsibilitys in crm.marvel_responsibilitymarvel_responsibilities
                                       where responsibilitys.marvel_bg.Value == negotiationsbg.mrv_product.Value
                                       select responsibilitys;


            foreach (marvel_responsibility responsibility in queryResponsibilitys)
            {
                if (responsibility.marvel_otv_sotr.Value != null)
                {
                    systemuser sysUser = (from sususers in crm.systemusers
                                                   where sususers.systemuserid == responsibility.marvel_otv_sotr.Value 
                                                   select sususers).Single();

                    if (sysUser != null)
                    {
                        try
                        {
                            //Создаем связь N:N РАБОТАЕТ!
                            crm.AddLink(membershipsgroup, "mrv_membershipsgroup_systemuser", sysUser);
                            crm.SaveChanges();
                        }
                        catch
                        {
 
                        }
                    }
                }
            }
        }

        public void Execute(IPluginExecutionContext context)
        {

            if (context.MessageName == MessageName.Create.ToString() &&
                context.InputParameters.Properties.Contains(ParameterName.Target) &&
                context.InputParameters.Properties[ParameterName.Target] is DynamicEntity)
            {
                crm = new DataContext(CrmConnection.Parse(string.Format("Authentication Type=Integrated; Server=http://CRM/{0}", context.OrganizationName)));

                mrv_negotiationsbg negotiationsbg = (from negotiationsbgs in crm.mrv_negotiationsbgs
                                                     where negotiationsbgs.mrv_negotiationsbgid == (Guid)context.OutputParameters[ParameterName.Id]
                                                     select negotiationsbgs).Single();

                if (negotiationsbg != null && negotiationsbg.mrv_reportsofopportunity.HasValue)
                {
                    mrv_reportsofopportunity reportsofopportunity = (from reportsofopportunitys in crm.mrv_reportsofopportunitymrv_reportsofopportunities
                                                                     where reportsofopportunitys.mrv_reportsofopportunityid == negotiationsbg.mrv_reportsofopportunity
                                                                     select reportsofopportunitys).Single();

                    if (reportsofopportunity != null && reportsofopportunity.mrv_autonotifylist.Value == true)
                    {
                        this.AddSysUsersToGroup(this.CreateOrFindGroup(reportsofopportunity), negotiationsbg);
                    }
                }
            }
        }
       #endregion IPlugin Members
Старый 05.11.2010, 11:56   #2  
_AV_ is offline
_AV_
Участник
 
29 / 19 (1) ++
Регистрация: 27.02.2008
Адрес: Санкт-Петербург
Оказалось, что при создании связи N-to-N нужно обязательно указать индентичные Имя и Имя объекта отношения при определении отношения. В этом случает AddLink() класса xrmDataContext отрабатывает правильно.

Последний раз редактировалось _AV_; 05.11.2010 в 12:06.
Теги
addlink, linq, xrmdatacontext

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
CRMScape: MS CRM 4.0 LINQ Support in CRM SDK 4.0.12 Blog bot Dynamics CRM: Blogs 0 07.08.2010 05:18

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

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

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