Всем привет!
Познаю удобства использования 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