Ejemplo n.º 1
0
 public void ResolveAll(SolutionComponentGrid grid, IReadOnlyCollection <ConnectionModel> connections)
 {
     foreach (var resolver in this.resolverList)
     {
         resolver.Resolve(grid, connections);
     }
 }
Ejemplo n.º 2
0
        public void Resolve(SolutionComponentGrid grid, IReadOnlyCollection <ConnectionModel> connections)
        {
            using (this.log.Track("Fetching SystemForm definitions"))
            {
                var group = grid.FirstOrDefault(_ => _.ComponentTypeCode == (int)SolutionComponentType.SystemForm);
                if (group == null)
                {
                    return;
                }

                group.SetAnalyzed();

                var idList = group
                             .OfType <SolutionComponentLeaf>()
                             .Select(_ => _.ObjectId)
                             .ToList();

                foreach (var env in connections)
                {
                    if (idList.Count == 0)
                    {
                        return;
                    }

                    var query = new QueryExpression("systemform");
                    query.ColumnSet.AddColumns("objecttypecode", "type", "name", "description");
                    query.Criteria.AddCondition("formid", ConditionOperator.In, idList.Cast <object>().ToArray());
                    query.NoLock = true;

                    var result = env.Crm.RetrieveMultiple(query);

                    var entityList = result.Entities;

                    foreach (var entity in entityList)
                    {
                        var entityId = entity.Id;
                        idList.Remove(entityId);

                        var leaf = group.OfType <SolutionComponentLeaf>().First(_ => _.ObjectId == entityId);
                        leaf.SetLabelFromSystemForm(entity);
                    }
                }
            }
        }
Ejemplo n.º 3
0
        public void Resolve(SolutionComponentGrid grid, IReadOnlyCollection <ConnectionModel> connections)
        {
            using (this.log.Track("Fetching OptionSet definitions"))
            {
                var group = grid.FirstOrDefault(_ => _.ComponentTypeCode == (int)SolutionComponentType.OptionSet);
                if (group == null)
                {
                    return;
                }

                group.SetAnalyzed();

                var leafList = group
                               .OfType <SolutionComponentLeaf>()
                               .ToList();

                foreach (var solutionComponent in leafList)
                {
                    var env = solutionComponent.Environments.First();

                    try
                    {
                        var request = new RetrieveOptionSetRequest
                        {
                            MetadataId = solutionComponent.ObjectId
                        };

                        var response = (RetrieveOptionSetResponse)env.Crm.Execute(request);

                        solutionComponent.SetLabel(response.OptionSetMetadata.Name);
                    }
                    catch (FaultException <OrganizationServiceFault> ex)
                    {
                        log.Error($"Error fetching option set {solutionComponent.ObjectId} : {ex.Message}", ex);
                    }
                }
            }
        }
        public void Resolve(SolutionComponentGrid grid, IReadOnlyCollection <ConnectionModel> connections)
        {
            using (log.Track("Fetching entity relationships"))
            {
                var relationshipGroup = grid.FirstOrDefault(_ => _.ComponentTypeCode == (int)SolutionComponentType.EntityRelationship);
                if (relationshipGroup == null)
                {
                    return;
                }

                relationshipGroup.SetAnalyzed();


                var relationshipIdList = relationshipGroup
                                         .OfType <SolutionComponentLeaf>()
                                         .Select(_ => _.ObjectId)
                                         .ToList() ?? new List <Guid>();


                foreach (var env in connections)
                {
                    var query = new EntityQueryExpression
                    {
                        AttributeQuery = new AttributeQueryExpression
                        {
                            Properties = new MetadataPropertiesExpression("MetadataId", "SchemaName", "LogicalName", "DisplayName")
                        },
                        Properties = new MetadataPropertiesExpression
                        {
                            AllProperties = true
                        },
                        RelationshipQuery = new RelationshipQueryExpression
                        {
                            Criteria = new MetadataFilterExpression
                            {
                                Conditions =
                                {
                                    new MetadataConditionExpression("MetadataId", MetadataConditionOperator.In, relationshipIdList.ToArray())
                                }
                            }
                        }
                    };

                    var request = new RetrieveMetadataChangesRequest
                    {
                        Query = query
                    };

                    var result = (RetrieveMetadataChangesResponse)env.Crm.Execute(request);

                    var entityMetadataList = result.EntityMetadata;

                    foreach (var entityMetadata in entityMetadataList)
                    {
                        foreach (var relationshipMetadata in entityMetadata.OneToManyRelationships)
                        {
                            var relationshipId = relationshipMetadata.MetadataId.Value;
                            relationshipIdList.Remove(relationshipId);

                            var leaf = relationshipGroup.OfType <SolutionComponentLeaf>().FirstOrDefault(_ => _.ObjectId == relationshipId);
                            leaf?.SetLabelFromRelationship(relationshipMetadata);
                        }


                        foreach (var relationshipMetadata in entityMetadata.ManyToOneRelationships)
                        {
                            var relationshipId = relationshipMetadata.MetadataId.Value;
                            relationshipIdList.Remove(relationshipId);

                            var leaf = relationshipGroup.OfType <SolutionComponentLeaf>().FirstOrDefault(_ => _.ObjectId == relationshipId);
                            leaf?.SetLabelFromRelationship(relationshipMetadata);
                        }


                        foreach (var relationshipMetadata in entityMetadata.ManyToManyRelationships)
                        {
                            var relationshipId = relationshipMetadata.MetadataId.Value;
                            relationshipIdList.Remove(relationshipId);

                            var leaf = relationshipGroup.OfType <SolutionComponentLeaf>().FirstOrDefault(_ => _.ObjectId == relationshipId);
                            leaf?.SetLabelFromRelationship(relationshipMetadata);
                        }
                    }
                }
            }
        }
Ejemplo n.º 5
0
        public void Resolve(SolutionComponentGrid grid, IReadOnlyCollection <ConnectionModel> connections)
        {
            using (this.log.Track("Fetching entity definitions"))
            {
                var entityGroup = grid.FirstOrDefault(_ => _.ComponentTypeCode == (int)SolutionComponentType.Entity);
                if (entityGroup == null)
                {
                    return;
                }

                entityGroup.SetAnalyzed();


                var attributeGroup = grid.FirstOrDefault(_ => _.ComponentTypeCode == (int)SolutionComponentType.Attribute);
                if (attributeGroup != null)
                {
                    attributeGroup.SetAnalyzed();
                }



                var entityIdList = entityGroup
                                   .OfType <SolutionComponentLeaf>()
                                   .Select(_ => _.ObjectId)
                                   .ToList();

                var attributeIdList = attributeGroup?
                                      .OfType <SolutionComponentLeaf>()
                                      .Select(_ => _.ObjectId)
                                      .ToList() ?? new List <Guid>();

                foreach (var env in connections)
                {
                    var query = new EntityQueryExpression
                    {
                        AttributeQuery = new AttributeQueryExpression
                        {
                            Properties = new MetadataPropertiesExpression("MetadataId", "SchemaName", "LogicalName", "DisplayName")
                        },
                        Properties = new MetadataPropertiesExpression
                        {
                            AllProperties = true
                        }
                    };
                    query.Criteria.Conditions.Add(new MetadataConditionExpression("MetadataId", MetadataConditionOperator.In, entityIdList.ToArray()));

                    var request = new RetrieveMetadataChangesRequest
                    {
                        Query = query
                    };

                    var result = (RetrieveMetadataChangesResponse)env.Crm.Execute(request);

                    var entityMetadataList = result.EntityMetadata;

                    foreach (var entityMetadata in entityMetadataList)
                    {
                        var entityId = entityMetadata.MetadataId.Value;
                        entityIdList.Remove(entityId);

                        var leaf = entityGroup.OfType <SolutionComponentLeaf>().First(_ => _.ObjectId == entityId);
                        leaf.SetLabelFromEntityMetadata(entityMetadata);

                        if (attributeGroup != null)
                        {
                            foreach (var attributeMetadata in entityMetadata.Attributes)
                            {
                                var attributeId = attributeMetadata.MetadataId.Value;
                                attributeIdList.Remove(attributeId);

                                leaf = attributeGroup.OfType <SolutionComponentLeaf>().FirstOrDefault(_ => _.ObjectId == attributeId);
                                leaf?.SetLabelFromAttributeMetadata(entityMetadata, attributeMetadata);
                            }
                        }
                    }
                }
            }
        }