Ejemplo n.º 1
0
        private EntityDefinition GetFilteredEntity(EntityDefinition entity, Version solutionVersion, IDictionary <string, SolutionInfo> crmSolutions)
        {
            var filteredRelationships = entity.GetFilteredRelationships(crmSolutions);
            var filteredColumnSet     = entity.GetFilteredColumns(solutionVersion);

            return(new EntityDefinition(entity.Solution,
                                        entity.LogicalName,
                                        entity.PrimaryIdAttributeName,
                                        entity.EntityNodeType,
                                        entity.ActiveStateCode,
                                        filteredColumnSet,
                                        entity.QueryBuilder,
                                        entity.IntroducedVersion,
                                        entity.CheckEntityBeforeContentMapRefresh,
                                        filteredRelationships));
        }
        public override Fetch CreateQuery(EntityDefinition ed, IDictionary <string, object> parameters)
        {
            // the input links are appended to the query to filter the set of entities

            if (!parameters.ContainsKey("Links"))
            {
                return(null);
            }

            var links = parameters["Links"] as ICollection <Link>;

            if (links == null)
            {
                return(null);
            }

            var fetch = ed.CreateFetchExpression();

            if (Links != null && Links.Any())
            {
                // append the input links to the specified intermediate links

                var chains = Links.Clone();

                SetParameters(chains, links);

                fetch.Entity.Links = chains;
            }
            else
            {
                // assign the input links directly to the fetch

                fetch.Entity.Links = links;
            }

            // skip cache for ContentMap
            fetch.SkipCache = true;

            return(fetch);
        }
 public override Fetch CreateQuery(EntityDefinition ed, IDictionary <string, object> parameters)
 {
     return(ed.CreateFetchExpression());
 }
 /// <summary>
 /// Creates a query from an entity definition and a set of input parameters.
 /// </summary>
 /// <param name="ed"></param>
 /// <param name="parameters"></param>
 /// <returns></returns>
 public abstract Fetch CreateQuery(EntityDefinition ed, IDictionary <string, object> parameters);
        private static DataCollection <Entity> RetrieveCRMRecords(CrmDbContext context, string primaryEntityAttribute, EntityReference reference, EntityDefinition ed, List <Guid> guids)
        {
            var fetch = ed.CreateFetch();

            //Make Retrive Multiple Query
            object[] guidArray = guids.Cast <object>().ToArray();

            var condition = new Condition(primaryEntityAttribute, ConditionOperator.In, guidArray);

            if (fetch.Entity.Filters == null || !fetch.Entity.Filters.Any())
            {
                fetch.AddFilter(new Filter
                {
                    Conditions = new List <Condition>
                    {
                        condition
                    }
                });
            }
            else
            {
                var firstFilter = fetch.Entity.Filters.FirstOrDefault();
                if (firstFilter.Conditions == null)
                {
                    firstFilter.Conditions = new List <Condition>();
                }
                firstFilter.Conditions.Add(condition);
            }

            // retrieve a fresh entity which also acts as a backend validation
            ADXTrace.Instance.TraceInfo(TraceCategory.Application, string.Format("Calling Retrieve Multiple Request for Entity {0} ", EntityNamePrivacy.GetEntityName(reference.LogicalName)));
            RetrieveMultipleResponse responses = (RetrieveMultipleResponse)context.Service.Execute(fetch.ToRetrieveMultipleRequest());
            var entities = responses.EntityCollection.Entities;

            ADXTrace.Instance.TraceInfo(TraceCategory.Application, string.Format("Retrieve Multiple Response for Entity {0} has Record Count {1}  ", EntityNamePrivacy.GetEntityName(reference.LogicalName), responses.EntityCollection.Entities.Count));
            return(entities);
        }