Documentation Center

Example creating a Schema with ExtensionXml (.NET)

You can create a Schema by using the ExtensionXml element. The contents of this element are available to all add-on applications (so two add-ons cannot both use an element with the same name). The element holds additional data on the Schema field definition level for use by add-ons.

IList<ItemFieldDefinitionData> fieldDefinitions = new List<ItemFieldDefinitionData>();

DateFieldDefinitionData date = new DateFieldDefinitionData()
{
	Description = "Date",
	Name = "Date",
	MinOccurs = 0,
	MaxOccurs = 1
};

SingleLineTextFieldDefinitionData author = new SingleLineTextFieldDefinitionData()
{
	Name = "Author",
	Description = "Author",
	MinOccurs = 1,
	MaxOccurs = 1
};

XNamespace tcmNs = "http://www.tridion.com/ContentManager/5.0";
XNamespace ns = "http://www.tridion.com/TranslationManager";

XElement extensionXml = new XElement(tcmNs + "ExtensionXml");
extensionXml.Add(new XElement(ns + "TranslationManager", 
	new XElement(ns + "IsTranslatable", true)));

MultiLineTextFieldDefinitionData article = new MultiLineTextFieldDefinitionData()
{
	Name = "Article",
	Description = "Article",
	Height = 15,
	MinOccurs = 1,
	MaxOccurs = 1,
	ExtensionXml = extensionXml
};

SchemaFieldsData schemaFieldsData = new SchemaFieldsData();
schemaFieldsData.RootElementName = "Content";
schemaFieldsData.NamespaceUri = "ns:TranslationManager";
fieldDefinitions.Add(date);
fieldDefinitions.Add(author);
fieldDefinitions.Add(article);
schemaFieldsData.Fields = fieldDefinitions.ToArray();

using (ChannelFactory<ISessionAwareCoreService> factory = 
	new ChannelFactory<ISessionAwareCoreService>("netTcp"))
{
	ISessionAwareCoreService client = factory.CreateChannel();

	XElement xsd = client.ConvertSchemaFieldsToXsd(schemaFieldsData);

	// Create schema
	SchemaData schema = 
		(SchemaData)client.GetDefaultData(ItemType.Schema, "tcm:11964-35150-2");
	schema.Purpose = SchemaPurpose.Component;
	schema.Description = "Translation Manager";
	schema.RootElementName = "Content";
	schema.NamespaceUri = string.Empty;
	schema.Title = "News";
	schema.Xsd = xsd.ToString(SaveOptions.None);

	schema = (SchemaData)client.Create(schema, new ReadOptions());
}