27.10.2010, 13:16 | #1 |
Участник
|
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 |
Участник
|
Оказалось, что при создании связи 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 | 0 |
|