(不,再不是法国女孩!!!)
所以...我有两个具有n-n关系的实体:“new_produit”和“new_lignecontrat”。 我需要将最后一个“new_lignecontrat”记录的“new_produit”记录复制到新创建的“new_lignecontrat”中。
插件在Create for new_lignecontrat上触发。
到目前为止,我已经写了这篇文章,但我不太确定要复制“new_produit”记录的步骤......
else if (modeleContrat.Id.Equals (ContratForfaitaire))
{
FetchExpression fetch = new FetchExpression(@"
<fetch distinct='false' mapping='logical'>
<entity name='new_contrats'><link-entity name='" + context.PrimaryEntityName + "' alias='nombreligne' from='new_contratsid' to='new_contratsid'><filter type='and'><condition attribute='new_contratsid' value='" + contrats.Id + "' operator='eq'></condition></filter></link-entity></entity></fetch>");
EntityCollection lines = service.RetrieveMultiple(fetch);
if (lines.Entities.Any())
{
var last = lines.Entities.Last();
if (last.GetAttributeValue<OptionSetValue>("statecode").Value == 1)
{
QueryExpression query = new QueryExpression();
query.EntityName = "new_produit";
query.ColumnSet = new ColumnSet("new_produitid");
Relationship relationship = new Relationship();
// name of relationship between team & systemuser
relationship.SchemaName = "new_new_lignecontrat_new_produit";
RelationshipQueryCollection relatedEntity = new RelationshipQueryCollection();
relatedEntity.Add(relationship, query);
RetrieveRequest request = new RetrieveRequest();
request.RelatedEntitiesQuery = relatedEntity;
request.ColumnSet = new ColumnSet("new_lignecontratid");
request.Target = new EntityReference
{
Id = last.Id,
LogicalName = last.LogicalName
};
RetrieveResponse response = (RetrieveResponse)service.Execute(request);
if (((DataCollection<Relationship, EntityCollection>)(((RelatedEntityCollection)(response.Entity.RelatedEntities)))).Contains(new Relationship("new_new_lignecontrat_new_produit")) && ((DataCollection<Relationship, EntityCollection>)(((RelatedEntityCollection)(response.Entity.RelatedEntities))))[new Relationship("new_new_lignecontrat_new_produit")].Entities.Count > 0)
{
response.Entity.Attributes.Remove("new_produitid");
response["new_lignecontratid"] = new EntityReference(target.LogicalName, target.Id);
答案 0 :(得分:3)
我相信我已回答one of your previous questions部分回答了这个问题,所以让我们看看这次我的回答是否更好。
如果我正确理解问题,这个问题的三个步骤是首先获取在创建当前new_lignecontrat
记录之前创建的最后new_lignecontrat
条记录,然后获取所有{{1与最后new_produit
相关联的记录,最后new_lignecontrat
每个Associate
记录与新new_produit
记录相关联的记录。
对于此查询,您可以使用Dynamics(FetchXml,QueryExpression和Linq)中三种支持的查询方法中的任何一种。我更喜欢Linq,因为new_lignecontrat
方法是执行高效.First()
查询(获取上次创建的TOP
记录)的简单方法,但您也可以使用FetchXml和分页cookie完成同样的事情(不确定QueryExpression)。
您可以使用N:N表和步骤1中检索到的ID获取链接的new_lignecontrat
记录。
获得新new_produit
的ID以及最后关联的new_lignecontrat
记录的ID后,执行针对这些new_produit
的{{1}}方法记录和他们的关系。下面是一个处理这三个步骤的模型。
Associate