Мне кажется, я частично ответил на этот вопрос в ответ на один из ваших предыдущих вопросов , поэтому давайте посмотрим, будет ли мой ответ лучше на этот раз.
Три шага в этой проблеме,если я правильно понимаю проблему, это сначала получить последнюю запись new_lignecontrat
, созданную до создания текущей записи new_lignecontrat
, затем получить все записи new_produit
, связанные с последней new_lignecontrat
, и, наконец, Associate
каждая из этих new_produit
записей с новой new_lignecontrat
записью.
Для этого запроса вы можете использовать любой из трех поддерживаемых методов запроса в Dynamics (FetchXml, QueryExpression и Linq).Я предпочитаю Linq, так как метод .First()
- это простой способ выполнить эффективный запрос TOP
(чтобы получить вашу последнюю созданную запись new_lignecontrat
), но вы также можете использовать FetchXml и файл подкачки для достижения того же результата (не уверено QueryExpression).
Вы можете получить связанные записи new_produit
, используя таблицу N: N и идентификатор, полученный на шаге 1.
Получив идентификатор новых new_lignecontrat
и идентификаторы последних связанных new_produit
записей, выполните метод Associate
вашего IOrganizationService
для этих записей и их взаимосвязей.Ниже приведен макет, который обрабатывает эти три шага.
using (OrganizationServiceContext osc = new OrganizationServiceContext(service))
{
//assumes early binding, but this can be modified for late binding as well
Guid ligneContratID = (from lc in osc.CreateQuery<new_ligneContrat>()
where lc.CreatedOn < (DateTime)targetEntity.Attributes["CreatedOn"] //look at all new_ligneContrat records created before the newly created record
orderby lc.CreatedOn descending //sort newest to oldest
select lc.new_ligneContratID)
.First(); //get the newest record
var produits = from lcp in osc.CreateQuery<new_new_lignecontrat_new_produit>() //use your N:N relationship/table as your linking table
join p in osc.CreateQuery<new_produit>() on lcp.new_produitId equals p.new_produitId
where lcp.new_lignecontratId = ligneContratID //use the previous query result in your N:N lookup
select p.new_produitId;
EntityReferenceCollection erc = new EntityReferenceCollection();
foreach (var e in produits)
{
erc.Add(new EntityReference("new_produit", e));
}
service.Associate("new_lignecontrat", targetEntity.Id, new Relationship("new_new_lignecontrat_new_produit", erc);
}