public static string CreateEntityAndAttributeDescription(EntityIntellisenseData entity, AttributeIntellisenseData attribute)
        {
            List <string> lines = new List <string>();

            if (entity.IsIntersectEntity)
            {
                lines.Add("IntersectEntity");

                if (entity.ManyToManyRelationships != null)
                {
                    var relations = entity.ManyToManyRelationships.Values.Where(r => string.Equals(r.IntersectEntityName, entity.EntityLogicalName, StringComparison.InvariantCultureIgnoreCase));

                    foreach (var rel in relations.OrderBy(r => r.Entity1Name).ThenBy(r => r.Entity2Name).ThenBy(r => r.Entity1IntersectAttributeName).ThenBy(r => r.Entity2IntersectAttributeName))
                    {
                        lines.Add(string.Format("{0} - {1}", rel.Entity1Name, rel.Entity2Name));
                    }
                }
            }

            CreateFileHandler.FillLabelEntity(lines, true, entity.DisplayName, entity.DisplayCollectionName, entity.Description);

            lines.Add(string.Empty);

            lines.Add(string.Format("Attribute:\t{0}", GetDisplayTextAttribute(entity.EntityLogicalName, attribute)));

            FillDescriptionAttribute(lines, attribute);

            return(string.Join(System.Environment.NewLine, lines));
        }
        private HashSet <string> GetRefererenceAttributes(EntityIntellisenseData entityData, HashSet <string> commonEntities)
        {
            HashSet <string> result = new HashSet <string>();

            if (!string.IsNullOrEmpty(entityData.EntityPrimaryIdAttribute))
            {
                if (commonEntities.Contains(entityData.EntityLogicalName))
                {
                    result.Add(entityData.EntityPrimaryIdAttribute);
                }
            }

            if (entityData.Attributes != null)
            {
                foreach (var attr in entityData.Attributes.Values)
                {
                    if (!string.Equals(entityData.EntityPrimaryIdAttribute, attr.LogicalName, StringComparison.InvariantCultureIgnoreCase))
                    {
                        if (attr.AttributeType == AttributeTypeCode.Uniqueidentifier)
                        {
                            result.Add(attr.LogicalName);
                        }
                    }
                }
            }

            if (entityData.ManyToOneRelationships != null)
            {
                foreach (var item in entityData.ManyToOneRelationships.Values)
                {
                    if (commonEntities.Contains(item.TargetEntityName))
                    {
                        result.Add(item.BaseAttributeName);
                    }
                }
            }

            if (entityData.IsIntersectEntity && entityData.ManyToManyRelationships != null)
            {
                foreach (var item in entityData.ManyToManyRelationships.Values)
                {
                    if (commonEntities.Contains(item.Entity1Name))
                    {
                        result.Add(item.Entity1IntersectAttributeName);
                    }

                    if (commonEntities.Contains(item.Entity2Name))
                    {
                        result.Add(item.Entity2IntersectAttributeName);
                    }
                }
            }

            return(result);
        }
        public static string GetDisplayTextEntityAndAttribute(EntityIntellisenseData entityData, AttributeIntellisenseData attribute)
        {
            StringBuilder result = new StringBuilder();

            result.AppendFormat("{0}.{1}", entityData.EntityLogicalName, attribute.LogicalName);

            {
                string temp = CreateFileHandler.GetLocalizedLabel(entityData.DisplayName);

                if (!string.IsNullOrEmpty(temp))
                {
                    result.AppendFormat(" - {0}", temp);
                }

                if (entityData.IsIntersectEntity)
                {
                    result.Append(" - IntersectEntity");
                }
            }

            {
                string temp = CreateFileHandler.GetLocalizedLabel(attribute.DisplayName);

                if (!string.IsNullOrEmpty(temp))
                {
                    result.AppendFormat(" - {0}", temp);
                }

                if (attribute.IsPrimaryIdAttribute.GetValueOrDefault())
                {
                    result.Append(" - PrimaryId");
                }

                if (attribute.IsPrimaryNameAttribute.GetValueOrDefault())
                {
                    result.Append(" - PrimaryName");
                }
            }

            if (attribute.AttributeType.HasValue)
            {
                result.AppendFormat(" - {0}", attribute.AttributeType.ToString());
            }

            return(result.ToString());
        }
        public static List <string> GetCompareValuesForEntity(EntityIntellisenseData entityData)
        {
            List <string> result = GetCompareValues(entityData.DisplayName);

            result.Add(entityData.EntityLogicalName);

            if (entityData.IsIntersectEntity)
            {
                result.Add("IntersectEntity");
            }

            if (entityData.ObjectTypeCode.HasValue)
            {
                result.Add(entityData.ObjectTypeCode.Value.ToString());
            }

            return(result);
        }
        public static string GetDisplayTextEntity(EntityIntellisenseData entityData)
        {
            StringBuilder result = new StringBuilder(entityData.EntityLogicalName);

            string temp = CreateFileHandler.GetLocalizedLabel(entityData.DisplayName);

            if (!string.IsNullOrEmpty(temp))
            {
                result.AppendFormat(" - {0}", temp);
            }

            if (entityData.IsIntersectEntity)
            {
                result.Append(" - IntersectEntity");
            }

            return(result.ToString());
        }
Ejemplo n.º 6
0
        private string GetEntityPrimaryIdAttribute(string entityName)
        {
            EntityIntellisenseData entityData = GetEntityIntellisenseData(entityName);

            if (entityData != null)
            {
                if (!string.IsNullOrEmpty(entityData.EntityPrimaryIdAttribute))
                {
                    return(entityData.EntityPrimaryIdAttribute);
                }

                if (entityData.IsActivityEntity.GetValueOrDefault())
                {
                    return("activityid");
                }
            }

            return(string.Empty);
        }
        private HashSet <string> GetReferencedEntities(EntityIntellisenseData entityData)
        {
            HashSet <string> result = new HashSet <string>(StringComparer.InvariantCultureIgnoreCase);

            if (!string.IsNullOrEmpty(entityData.EntityPrimaryIdAttribute))
            {
                result.Add(entityData.EntityLogicalName);
            }

            if (entityData.ManyToOneRelationships != null)
            {
                foreach (var item in entityData.ManyToOneRelationships.Values)
                {
                    if (!string.IsNullOrEmpty(item.TargetEntityName))
                    {
                        result.Add(item.TargetEntityName);
                    }
                }
            }

            if (entityData.IsIntersectEntity)
            {
                if (entityData.ManyToManyRelationships != null)
                {
                    foreach (var item in entityData.ManyToManyRelationships.Values)
                    {
                        if (!string.IsNullOrEmpty(item.Entity1Name))
                        {
                            result.Add(item.Entity1Name);
                        }

                        if (!string.IsNullOrEmpty(item.Entity2Name))
                        {
                            result.Add(item.Entity2Name);
                        }
                    }
                }
            }

            return(result);
        }
Ejemplo n.º 8
0
        private void FillMultiLinkForEntity(IList <CompletionSet> completionSets, ITrackingSpan applicableTo, ConnectionIntellisenseData intellisenseData, EntityIntellisenseData entityData)
        {
            TupleList <string, string> childEntities = new TupleList <string, string>();

            if (entityData.OneToManyRelationships != null)
            {
                foreach (var item in entityData.OneToManyRelationships.Values)
                {
                    childEntities.Add(item.ChildEntityName, item.ChildEntityAttributeName);
                }
            }

            if (!entityData.IsIntersectEntity.GetValueOrDefault() && entityData.ManyToManyRelationships != null)
            {
                foreach (var item in entityData.ManyToManyRelationships.Values)
                {
                    if (string.Equals(entityData.EntityLogicalName, item.Entity1Name, StringComparison.InvariantCultureIgnoreCase))
                    {
                        childEntities.Add(item.IntersectEntityName, item.Entity1IntersectAttributeName);
                    }
                    else if (string.Equals(entityData.EntityLogicalName, item.Entity2Name, StringComparison.InvariantCultureIgnoreCase))
                    {
                        childEntities.Add(item.IntersectEntityName, item.Entity2IntersectAttributeName);
                    }
                }
            }

            List <CrmCompletion> list = new List <CrmCompletion>();

            foreach (var relation in childEntities.OrderBy(e => e.Item1).ThenBy(e => e.Item2))
            {
                if (intellisenseData.Entities.ContainsKey(relation.Item1))
                {
                    var childEntityData = intellisenseData.Entities[relation.Item1];

                    if (childEntityData.Attributes != null && childEntityData.Attributes.ContainsKey(relation.Item2))
                    {
                        var childAttribute = childEntityData.Attributes[relation.Item2];

                        List <string> compareValues = CrmIntellisenseCommon.GetCompareValuesForEntity(childEntityData);

                        compareValues.Add(relation.Item2);

                        var insertText = string.Format("multi {0} {1}", relation.Item2, relation.Item1);

                        list.Add(CreateCompletion(CrmIntellisenseCommon.GetDisplayTextEntityAndAttribute(childEntityData, childAttribute), insertText, CrmIntellisenseCommon.CreateEntityAndAttributeDescription(childEntityData, childAttribute), _defaultGlyph, compareValues));
                    }
                }
            }

            if (list.Count > 0)
            {
                completionSets.Add(new CrmCompletionSet(SourceNameMoniker, "Child Entities", applicableTo, list, Enumerable.Empty <CrmCompletion>()));
            }
        }
Ejemplo n.º 9
0
        private void FillEntityIntellisenseDataAttributes(IList <CompletionSet> completionSets, ITrackingSpan applicableTo, EntityIntellisenseData entityData)
        {
            if (entityData == null ||
                entityData.Attributes == null
                )
            {
                return;
            }

            List <CrmCompletion> list = new List <CrmCompletion>();

            string entityDescription = CrmIntellisenseCommon.GetDisplayTextEntity(entityData);

            foreach (var attribute in entityData.AttributesOrdered())
            {
                string attributeDescription = CrmIntellisenseCommon.GetDisplayTextAttribute(entityData.EntityLogicalName, attribute);

                List <string> compareValues = CrmIntellisenseCommon.GetCompareValuesForAttribute(attribute);

                list.Add(CreateCompletion(attributeDescription, attribute.LogicalName, CrmIntellisenseCommon.CreateAttributeDescription(entityDescription, attribute), _defaultGlyph, compareValues));
            }

            if (list.Count > 0)
            {
                completionSets.Add(new CrmCompletionSet(SourceNameMoniker, string.Format("{0} Attributes", entityData.EntityLogicalName), applicableTo, list, Enumerable.Empty <CrmCompletion>()));
            }
        }