public EntityCollection RetrieveRecords(EntityMetadata emd, ExportSettings settings) { var query = new QueryExpression(emd.LogicalName) { ColumnSet = new ColumnSet(true), Criteria = new FilterExpression { Filters = { new FilterExpression(LogicalOperator.Or) } } }; if (settings.CreateFilter.HasValue) { query.Criteria.Filters[0].AddCondition("createdon", ConditionOperator.OnOrAfter, settings.CreateFilter.Value.ToString("yyyy-MM-dd")); } if (settings.ModifyFilter.HasValue) { query.Criteria.Filters[0].AddCondition("modifiedon", ConditionOperator.OnOrAfter, settings.ModifyFilter.Value.ToString("yyyy-MM-dd")); } if (emd.LogicalName == "adx_webfile") { var noteLe = new LinkEntity { LinkFromEntityName = "adx_webfile", LinkFromAttributeName = "adx_webfileid", LinkToAttributeName = "objectid", LinkToEntityName = "annotation", LinkCriteria = new FilterExpression(LogicalOperator.Or), EntityAlias = "note" }; bool addLinkEntity = false; if (settings.CreateFilter.HasValue) { query.Criteria.Filters[0].AddCondition("note", "createdon", ConditionOperator.OnOrAfter, settings.CreateFilter.Value.ToString("yyyy-MM-dd")); addLinkEntity = true; } if (settings.ModifyFilter.HasValue) { query.Criteria.Filters[0].AddCondition("note", "modifiedon", ConditionOperator.OnOrAfter, settings.ModifyFilter.Value.ToString("yyyy-MM-dd")); addLinkEntity = true; } if (addLinkEntity) { query.LinkEntities.Add(noteLe); } } if (settings.WebsiteFilter != Guid.Empty) { var lamd = emd.Attributes.FirstOrDefault(a => a is LookupAttributeMetadata metadata && metadata.Targets[0] == "adx_website"); if (lamd != null) { query.Criteria.AddCondition(lamd.LogicalName, ConditionOperator.Equal, settings.WebsiteFilter); } else { switch (emd.LogicalName) { case "adx_entityformmetadata": query.LinkEntities.Add( CreateParentEntityLinkToWebsite( emd.LogicalName, "adx_entityform", "adx_entityformid", "adx_entityform", settings.WebsiteFilter)); break; case "adx_webformmetadata": var le = CreateParentEntityLinkToWebsite( emd.LogicalName, "adx_webformstep", "adx_webformstepid", "adx_webformstep", Guid.Empty); le.LinkEntities.Add(CreateParentEntityLinkToWebsite( "adx_webformstep", "adx_webform", "adx_webformid", "adx_webform", settings.WebsiteFilter)); query.LinkEntities.Add(le); break; case "adx_weblink": query.LinkEntities.Add(CreateParentEntityLinkToWebsite( emd.LogicalName, "adx_weblinksetid", "adx_weblinksetid", "adx_weblinkset", settings.WebsiteFilter)); break; case "adx_blogpost": query.LinkEntities.Add(CreateParentEntityLinkToWebsite( emd.LogicalName, "adx_blogid", "adx_blogid", "adx_blog", settings.WebsiteFilter)); break; case "adx_communityforumaccesspermission": case "adx_communityforumannouncement": case "adx_communityforumthread": query.LinkEntities.Add(CreateParentEntityLinkToWebsite( emd.LogicalName, "adx_forumid", "adx_communityforumid", "adx_communityforum", settings.WebsiteFilter)); break; case "adx_communityforumpost": var lef = CreateParentEntityLinkToWebsite( emd.LogicalName, "adx_forumthreadid", "adx_communityforumthreadid", "adx_communityforumthread", Guid.Empty); lef.LinkEntities.Add(CreateParentEntityLinkToWebsite( "adx_communityforumthread", "adx_forumid", "adx_communityforumid", "adx_communityforum", settings.WebsiteFilter)); query.LinkEntities.Add(lef); break; case "adx_idea": query.LinkEntities.Add(CreateParentEntityLinkToWebsite( emd.LogicalName, "adx_ideaforumid", "adx_ideaforumid", "adx_ideaforum", settings.WebsiteFilter)); break; case "adx_pagealert": case "adx_webpagehistory": case "adx_webpagelog": query.LinkEntities.Add(CreateParentEntityLinkToWebsite( emd.LogicalName, "adx_webpageid", "adx_webpageid", "adx_webpage", settings.WebsiteFilter)); break; case "adx_pollsubmission": query.LinkEntities.Add(CreateParentEntityLinkToWebsite( emd.LogicalName, "adx_pollid", "adx_pollid", "adx_poll", settings.WebsiteFilter)); break; case "adx_webfilelog": query.LinkEntities.Add(CreateParentEntityLinkToWebsite( emd.LogicalName, "adx_webfileid", "adx_webfileid", "adx_webfile", settings.WebsiteFilter)); break; case "adx_webformsession": case "adx_webformstep": query.LinkEntities.Add(CreateParentEntityLinkToWebsite( emd.LogicalName, "adx_webform", "adx_webformid", "adx_webform", settings.WebsiteFilter)); break; } } } if (settings.ActiveItemsOnly && emd.LogicalName != "annotation") { query.Criteria.AddCondition("statecode", ConditionOperator.Equal, 0); } return(service.RetrieveMultiple(query)); }
public List <EntityResult> RetrieveNnRecords(ExportSettings exSettings, List <Entity> records) { var ers = new List <EntityResult>(); var rels = new List <ManyToManyRelationshipMetadata>(); foreach (var emd in exSettings.Entities) { foreach (var mm in emd.ManyToManyRelationships) { var e1 = mm.Entity1LogicalName; var e2 = mm.Entity2LogicalName; var isValid = false; if (e1 == emd.LogicalName) { if (exSettings.Entities.Any(e => e.LogicalName == e2)) { isValid = true; } } else { if (exSettings.Entities.Any(e => e.LogicalName == e1)) { isValid = true; } } if (isValid && rels.All(r => r.IntersectEntityName != mm.IntersectEntityName)) { rels.Add(mm); } } } foreach (var mm in rels) { var ids = records.Where(r => r.LogicalName == mm.Entity1LogicalName).Select(r => r.Id).ToList(); if (!ids.Any()) { continue; } var query = new QueryExpression(mm.IntersectEntityName) { ColumnSet = new ColumnSet(true), Criteria = new FilterExpression { Conditions = { new ConditionExpression(mm.Entity1IntersectAttribute, ConditionOperator.In, ids.ToArray()) } } }; ers.Add(new EntityResult { Records = service.RetrieveMultiple(query) }); } return(ers); }