using System; using System.Collections.Generic; using Telerik.Sitefinity.Model; using Telerik.Sitefinity.ModuleEditor.Web.Services.Model; using Telerik.Sitefinity.Modules.News.Web.UI; using Telerik.Sitefinity.News.Model; using Telerik.Sitefinity.Services; using Telerik.Sitefinity.Utilities.TypeConverters; using Telerik.Sitefinity.Web.UI.Fields; namespace SitefinityWebApp { public class AddRelatedDataField { public void AddField(string contentTypeFullName, string fieldName) { Type contentType = TypeResolutionService.ResolveType(contentTypeFullName); var customFieldContext = new CustomFieldsContext(contentType); UserFriendlyDataType userFriendlyDataType = UserFriendlyDataType.RelatedData; var field = new WcfField() { Name = fieldName, ContentType = contentTypeFullName, FieldTypeKey = userFriendlyDataType.ToString(), IsCustom = true, //Field definition Definition = new WcfFieldDefinition() { Title = fieldName, FieldName = fieldName, FieldType = typeof(RelatedDataField).FullName, AllowMultipleSelection = true, FrontendWidgetTypeName = typeof(NewsView).FullName, //For Example: news view added for a frontend widget RelatedDataProvider = string.Empty, RelatedDataType = typeof(NewsItem).FullName //For Example: news item added as related data type } }; Dictionary<string, WcfField> relatedDataFields = new Dictionary<string, WcfField>(); relatedDataFields.Add(fieldName, field); customFieldContext.AddOrUpdateCustomFields(relatedDataFields, contentType.Name); customFieldContext.SaveChanges(); //The soft restart of Sitefinity CMS is needed in order to add the recently added custom fields to OA context // SystemManager.RestartApplication(false); -- This is obsolete // This is from the documentation: https://docs.sitefinity.com/for-developers-application-restart // SystemManager.RestartApplication("Restart invoked through the Sitefinity CMS API", SystemRestartFlags.Default, true); } } }