public CommonProperty[] ForType(Type interfaceType, Type entityType) { if (cache.ContainsKey(interfaceType)) { return(cache[interfaceType]); } var interfaceProperties = interfaceType.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); var instanceProperties = entityType.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); var result = new List <CommonProperty>(); foreach (var interfaceProp in interfaceProperties) { var instanceProp = (from i in instanceProperties where i.Name == interfaceProp.Name select i).SingleOrDefault(); if (instanceProp != null) { var customProp = (Microsoft.Xrm.Sdk.AttributeLogicalNameAttribute)instanceProp.GetCustomAttributes(typeof(Microsoft.Xrm.Sdk.AttributeLogicalNameAttribute), false).FirstOrDefault(); if (customProp != null) { var attr = new CommonProperty { LogicalName = customProp.LogicalName }; attr.Required = interfaceProp.GetCustomAttributes(Types.RequiredAttribute, false).Any(); result.Add(attr); } } } cache[interfaceType] = result.ToArray(); return(cache[interfaceType]); }
private void ResolveProperties() { if (this.FromType.Inheriting(typeof(Microsoft.Xrm.Sdk.Entity))) { this.AllProperties = true; return; } if (this.ToType.Inheriting(typeof(Microsoft.Xrm.Sdk.Entity))) { this.FilteredProperties = CommonProperty.ForType(this.FromType, this.ToType); } }
public static CommonProperty[] ForType(Type interfaceType, Type entityType) { var key = new CommonProperty.Key() { FromType = interfaceType, ToType = entityType }; if (cache.ContainsKey(key)) { return(cache[key]); } var interfaceProperties = interfaceType.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); var instanceProperties = entityType.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance); var result = new List <CommonProperty>(); foreach (var interfaceProp in interfaceProperties) { if (interfaceProp.GetGetMethod() == null) { continue; } if (interfaceProp.Name == nameof(Microsoft.Xrm.Sdk.Entity.Id)) { continue; } if (interfaceProp.Name == nameof(Microsoft.Xrm.Sdk.Entity.LogicalName)) { continue; } var instanceProp = (from i in instanceProperties where i.Name == interfaceProp.Name select i).SingleOrDefault(); if (instanceProp != null) { var customProp = (Microsoft.Xrm.Sdk.AttributeLogicalNameAttribute)instanceProp.GetCustomAttributes(typeof(Microsoft.Xrm.Sdk.AttributeLogicalNameAttribute), false).FirstOrDefault(); if (customProp != null) { var attr = new CommonProperty { LogicalName = customProp.LogicalName }; attr.Required = interfaceProp.GetCustomAttributes(Types.RequiredAttribute, false).Any(); attr.TargetFilter = interfaceProp.GetCustomAttributes(Types.TargetFilterAttribute, false).Any(); result.Add(attr); } } } if (Types.ITarget.IsAssignableFrom(interfaceType)) { var attributes = Extensions.Sdk.KiponSdkGeneratedExtensionMethods.TargetFilterAttributesOf(entityType, interfaceType); if (attributes != null && attributes.Length > 0) { foreach (var name in attributes) { var attr = result.Where(e => e.LogicalName == name).SingleOrDefault(); if (attr == null) { attr = new CommonProperty { LogicalName = name }; attr.Required = false; attr.TargetFilter = true; result.Add(attr); } } } } cache[key] = result.ToArray(); return(cache[key]); }