public static void SetItemData(object target, Type targetType, Item item, bool isLazyLoad) { foreach (var property in targetType.GetProperties()) { if (property == null || string.IsNullOrEmpty(property.Name) || !property.CanWrite) { continue; } SitecoreItemFieldAttribute attribute = (SitecoreItemFieldAttribute)property.GetCustomAttribute(_types[DataTypes.SitecoreItemFieldAttribute]); if (attribute == null) { SitecoreItemPropertyAttribute propAttribute = (SitecoreItemPropertyAttribute)property.GetCustomAttribute(_types[DataTypes.SitecoreItemPropertyAttribute]); if (propAttribute == null) { SitecoreItemAttribute itemAttribute = (SitecoreItemAttribute)property.GetCustomAttribute(_types[DataTypes.SitecoreItemAttribute]); if (itemAttribute != null) { property.SetValue(target, item); } } else { property.SetValue(target, GetSitecoreItemPropertyValue(property.PropertyType, item, propAttribute)); } } else { property.SetValue(target, GetSitecoreItemFieldValue(property.PropertyType, item, attribute, isLazyLoad)); } } }
public static void SetFieldValueFromDatabase(object target, bool isLazyLoad) { List <PropertyInfo> properties = target.GetType().GetProperties().ToList(); PropertyInfo uniqueIdProperty = properties.FirstOrDefault(property => { IndexFieldAttribute attribute = property.GetCustomAttributes <IndexFieldAttribute>().FirstOrDefault(attr => attr.IndexFieldName == BuiltinFields.UniqueId); return(attribute != null); }); if (uniqueIdProperty != null) { object uniqueIdValue = uniqueIdProperty.GetValue(target); if (uniqueIdValue.GetType() == typeof(ItemUri)) { ItemUri uri = (ItemUri)uniqueIdValue; Item contextItem = null; if (uri != null && (contextItem = Database.GetItem(uri)) != null) { properties.ForEach(property => { if (property != null && property.GetValue(target) == null && !string.IsNullOrEmpty(property.Name) && property.CustomAttributes.Any() && property.CanWrite) { SitecoreItemFieldAttribute attribute = property.GetCustomAttribute <SitecoreItemFieldAttribute>(); SitecoreItemPropertyAttribute propAttribute = property.GetCustomAttribute <SitecoreItemPropertyAttribute>(); SitecoreItemAttribute itemAttribute = property.GetCustomAttribute <SitecoreItemAttribute>(); if (attribute != null) { property.SetValue(target, GetSitecoreItemFieldValue(property.PropertyType, contextItem, attribute, isLazyLoad)); } else if (propAttribute != null) { property.SetValue(target, GetSitecoreItemPropertyValue(property.PropertyType, contextItem, propAttribute)); } else if (itemAttribute != null) { property.SetValue(target, contextItem); } } }); } } } }
private static object GetSitecoreItemPropertyValue(Type propertyType, Item item, SitecoreItemPropertyAttribute attribute) { object value = null; switch (attribute.ItemInfoType) { case SitecoreItemInfo.Id: value = item.ID; break; case SitecoreItemInfo.DisplayName: value = item.DisplayName; break; case SitecoreItemInfo.FullPath: value = item.Paths.FullPath; break; case SitecoreItemInfo.Language: value = item.Language; break; case SitecoreItemInfo.Name: value = item.Name; break; case SitecoreItemInfo.Path: value = item.Paths.Path; break; case SitecoreItemInfo.TemplateId: value = item.TemplateID; break; case SitecoreItemInfo.TemplateName: value = item.TemplateName; break; case SitecoreItemInfo.Version: value = item.Version; break; case SitecoreItemInfo.HasLayout: value = item.Visualization.Layout != null; break; case SitecoreItemInfo.Uri: value = item.Uri; break; case SitecoreItemInfo.Url: value = LinkManager.GetItemUrl(item, LinkManager.GetDefaultUrlOptions()); break; } return(value); }