Dynamics CRM 365 查询实体之间的关系---C#篇

 

 public class CrmHelper
    {
        /// <summary>
        /// 获取实体窗体
        /// </summary>
        /// <param name="service"></param>
        /// <param name="objecttypecode"></param>
        /// <returns></returns>
        public static EntityCollection GetEntityForm(IOrganizationService service, int objecttypecode)
        {
            QueryExpression query = new QueryExpression("systemform");
            query.Criteria.AddCondition("objecttypecode", ConditionOperator.Equal, objecttypecode);
            return service.RetrieveMultiple(query);
        }
        /// <summary>
        /// 获取实体视图
        /// </summary>
        /// <param name="service"></param>
        /// <param name="objecttypecode">实体编码</param>
        /// <returns></returns>
        public static EntityCollection GetEntityView(IOrganizationService service, int objecttypecode)
        {
            //查询实体对应的视图
            QueryExpression mySavedQuery = new QueryExpression
            {
                ColumnSet = new ColumnSet("savedqueryid", "name", "querytype", "isdefault", "returnedtypecode", "isquickfindquery", "fetchxml"),
                EntityName = "savedquery",
                Criteria = new FilterExpression
                {
                    Conditions =
                        {
                            //new ConditionExpression
                            //{
                            //    AttributeName = "querytype",
                            //    Operator = ConditionOperator.Equal,
                            //    Values = {0}
                            //},
                        new ConditionExpression
                                {
                                    AttributeName = "returnedtypecode",
                                    Operator = ConditionOperator.Equal,
                                    Values = { objecttypecode }
                                }
                        }
                }
            };
            RetrieveMultipleRequest retrieveSavedQueriesRequest = new RetrieveMultipleRequest { Query = mySavedQuery };

            RetrieveMultipleResponse retrieveSavedQueriesResponse = (RetrieveMultipleResponse)service.Execute(retrieveSavedQueriesRequest);

            return retrieveSavedQueriesResponse.EntityCollection;
        }
         
        /// <summary>
        /// 获取实体关系
        /// </summary>
        /// <param name="service"></param>
        /// <param name="entityname"></param>
        /// <returns></returns>
        public static List<OneToManyRelationshipMetadata> GetEntityRelationship(IOrganizationService service,string entityname)
        {
            List<OneToManyRelationshipMetadata> models = new List<OneToManyRelationshipMetadata>();

            MetadataFilterExpression EntityFilter = new MetadataFilterExpression(LogicalOperator.And);
            EntityFilter.Conditions.Add(new MetadataConditionExpression("LogicalName", MetadataConditionOperator.Equals, entityname));

            MetadataPropertiesExpression EntityProperties = new MetadataPropertiesExpression()
            {
                AllProperties = false
            };
            EntityProperties.PropertyNames.AddRange(new string[] { "ManyToOneRelationships" });  //N:1
            MetadataFilterExpression AttributeFilter = new MetadataFilterExpression(LogicalOperator.Or);
            AttributeFilter.Conditions.AddRange(new MetadataConditionExpression[] { });

            RetrieveMetadataChangesRequest request = new RetrieveMetadataChangesRequest()
            {
                Query = new EntityQueryExpression()
                {
                    Criteria = EntityFilter,
                    Properties = EntityProperties,
                    RelationshipQuery = new RelationshipQueryExpression()
                    {
                        Criteria = AttributeFilter,
                        Properties = new MetadataPropertiesExpression() { AllProperties = true }
                    },
                    LabelQuery = new LabelQueryExpression()

                }
            };

            RetrieveMetadataChangesResponse resp = (RetrieveMetadataChangesResponse)service.Execute(request);
            foreach (OneToManyRelationshipMetadata item in resp.EntityMetadata[0].ManyToOneRelationships)   //N:1
            {
                models.Add(item);
                //if (item.IsCustomRelationship.HasValue&&item.IsCustomRelationship.Value)
                //{
                //    models.Add(item);
                //}
            }

            return models;
        }


        public static void CreateEntity(IOrganizationService svc, EntityMetadata copyEn)
        {
            CreateEntityRequest createrequest = new CreateEntityRequest
            {
                //Define the entity--实体的定义
                Entity= copyEn,
                //Entity = new EntityMetadata
                //{
                //    SchemaName = copyEn.LogicalName,
                //    DisplayName = copyEn.DisplayName,
                //    DisplayCollectionName = copyEn.DisplayCollectionName,
                //    Description = copyEn.Description,
                //    OwnershipType = copyEn.OwnershipType,
                //    IsActivity = copyEn.IsActivity//,
                //    MetadataId=copyEn.MetadataId
                //},

                // Define the primary attribute for the entity--定义实体的主字段
                PrimaryAttribute = new StringAttributeMetadata
                {
                    SchemaName = copyEn.PrimaryNameAttribute,
                    RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
                    MaxLength = 100,
                    FormatName = StringFormatName.Text,
                    DisplayName = new Label("Bank Name", 1033),
                    Description = new Label("The primary attribute for the Bank entity.", 1033)
                },
                SolutionUniqueName = "CodeCreate20220801"
            };
            svc.Execute(createrequest);
            Console.WriteLine($"The bank {copyEn.LogicalName} entity has been created.");

        }

        /// <summary>
        /// 获取所有实体信息
        /// </summary>
        /// <returns></returns>
        public static List<EntityMetadata> GetAllEntity(IOrganizationService service,bool isall=false)
        {
            List<EntityMetadata> crmEntities = new List<EntityMetadata>();
            RetrieveAllEntitiesRequest retrieveAll = new RetrieveAllEntitiesRequest
            {
                EntityFilters = EntityFilters.Entity,
            //   EntityFilters = Microsoft.Xrm.Sdk.Metadata.EntityFilters.Attributes,  //查询字段
            RetrieveAsIfPublished = true
            };
            var response = (RetrieveAllEntitiesResponse)service.Execute(retrieveAll);
            //crmEntities = response.EntityMetadata
            //    .Where(x => x.DisplayName.UserLocalizedLabel != null && x.MetadataId != null && x.ObjectTypeCode.HasValue && x.IsCustomizable.Value
            //    && x.CollectionSchemaName.Contains("new_"))
            //    .ToList();
            if (isall)
            {
                crmEntities = response.EntityMetadata.ToList();
            }
            else
            {
                crmEntities = response.EntityMetadata
                  .Where(x => x.DisplayName.UserLocalizedLabel != null && x.MetadataId != null && x.ObjectTypeCode.HasValue && x.IsCustomizable.Value&&x.LogicalName.Contains("new_")
                  )
                  .ToList();
            }
            return crmEntities;
        }

        /// <summary>
        /// 获取实体数据
        /// </summary>
        /// <param name="service"></param>
        /// <param name="entityName"></param>
        /// <returns></returns>
        public static RetrieveEntityResponse GetEntityResponse(IOrganizationService service, string entityName)
        {
            RetrieveEntityRequest request = new RetrieveEntityRequest();
            request.EntityFilters = Microsoft.Xrm.Sdk.Metadata.EntityFilters.Attributes;  //查询字段
            request.LogicalName = entityName;
            return (RetrieveEntityResponse)service.Execute(request);
        }

        /// <summary>
        /// 获取解决方案,没有就新增
        /// </summary>
        /// <param name="svc"></param>
        /// <param name="solutionName">解决方案唯一名称</param>
        /// <returns></returns>
        public static Entity GetSolution(IOrganizationService svc, string solutionName)
        {
            QueryExpression querySolution = new QueryExpression("solution");
            querySolution.Criteria.AddCondition("uniquename", ConditionOperator.Equal, solutionName);
            querySolution.ColumnSet = new ColumnSet(true);
            var ec = svc.RetrieveMultiple(querySolution);
            if (ec.Entities.Count > 0)
            {
                return ec.Entities[0];
            }
            else
            {
                return null;
            }
        }
    }

 

posted @ 2022-08-02 00:32  溜溜球_小钢wan  阅读(185)  评论(0编辑  收藏  举报