|
using System; |
|
using System.Collections.Generic; |
|
using System.Web.Script.Serialization; |
|
using Telerik.Sitefinity.Data.Metadata; |
|
using Telerik.Sitefinity.Ecommerce.Catalog.Model; |
|
using Telerik.Sitefinity.Metadata.Model; |
|
using Telerik.Sitefinity.Model; |
|
using Telerik.Sitefinity.ModuleEditor.Web.Services.Model; |
|
using Telerik.Sitefinity.Modules.Ecommerce.Common; |
|
using Telerik.Sitefinity.Utilities.TypeConverters; |
|
using Telerik.Sitefinity.Web.UI.Fields; |
|
|
|
namespace SitefinityWebApp |
|
{ |
|
public class CreateMultichoiceFieldOfProduct |
|
{ |
|
public static void CreateMultichoiceField(Guid productTypeId, string fieldName, string fieldLabel, List<string> choices) |
|
{ |
|
EcommerceManager ecommerceManager = EcommerceManager.GetManager(); |
|
|
|
ProductType productType = ecommerceManager.GetProductType(productTypeId); |
|
if (productType == null) |
|
{ |
|
return; //The product type does not exist. |
|
} |
|
|
|
Type productClrType = TypeResolutionService.ResolveType(productType.ClrType); |
|
string fieldClrType = typeof(string).FullName; |
|
UserFriendlyDataType userFriendlyDataType = UserFriendlyDataType.MultipleChoice; |
|
|
|
var wcfField = new WcfField() |
|
{ |
|
Name = fieldName, |
|
ContentType = fieldClrType, |
|
FieldTypeKey = userFriendlyDataType.ToString(), |
|
IsCustom = true, |
|
|
|
//Database mapping |
|
DatabaseMapping = new WcfDatabaseMapping() |
|
{ |
|
ClrType = fieldClrType, |
|
ColumnName = fieldName.ToLower(), |
|
Nullable = true, |
|
DbType = "VARCHAR" |
|
}, |
|
|
|
//Field definition |
|
Definition = new WcfFieldDefinition() |
|
{ |
|
Title = fieldLabel, |
|
FieldName = fieldName, |
|
FieldType = typeof(ChoiceField).FullName, |
|
} |
|
}; |
|
|
|
List<ChoiceItem> choiceItems = new List<ChoiceItem>(); |
|
|
|
foreach (string choice in choices) |
|
{ |
|
ChoiceItem choiceItem = new ChoiceItem() |
|
{ |
|
Text = choice, |
|
Value = choice, |
|
Selected = false |
|
}; |
|
|
|
choiceItems.Add(choiceItem); |
|
} |
|
|
|
JavaScriptSerializer serializer = new JavaScriptSerializer(); |
|
wcfField.Definition.Choices = serializer.Serialize(choiceItems); |
|
|
|
CustomFieldsContext.Validate(wcfField, productClrType); |
|
|
|
var typeContext = new CustomFieldsContext(productClrType.FullName); |
|
typeContext.SaveFieldDefinition(wcfField, productClrType.Name, null); |
|
typeContext.SaveChanges(); |
|
|
|
using (MetadataManager metadataManager = MetadataManager.GetManager()) |
|
{ |
|
MetaType metaType = metadataManager.GetMetaType(productClrType); |
|
MetaField metaField = metadataManager.CreateMetafield(fieldName); |
|
CustomFieldsContext.SetFieldDatabaseMappings(metaField, metaType, userFriendlyDataType, wcfField, metadataManager); |
|
|
|
metaField.Title = fieldLabel; |
|
metaField.MetaAttributes.Add(new MetaFieldAttribute { Name = "UserFriendlyDataType", Value = userFriendlyDataType.ToString() }); |
|
metaField.MetaAttributes.Add(new MetaFieldAttribute { Name = "IsCommonProperty", Value = "true" }); |
|
metaType.Fields.Add(metaField); |
|
|
|
metadataManager.SaveChanges(); |
|
} |
|
|
|
//SystemManager.RestartApplication(false); |
|
} |
|
|
|
|
|
} |
|
} |