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());
}