/// <summary> /// Write out any custom metadata for the Tridion deployer extension /// </summary> /// <remarks> /// Sample custom metadata XML: /// <!--<my_metadata> /// <keywords> /// <Category Name="my_publication_path"> /// <Keyword>\publication\english</Keyword> /// </Category> /// </keywords> /// <custom> /// <ValidityStart>2010-10-31T15:42:00</ValidityStart> /// <ValidityEnd type="dateTime">2020-01-01T23:59:00</ValidityEnd> /// <Subject>Dubai</Subject> /// <Location /> /// <ContentType>General</ContentType> /// </custom> /// </my_metadata>--> /// </remarks> protected void WriteCustomMetadata() { if (CustomMetaData.Count > 0 || CustomKeywords.Count > 0) { using (StringWriter sw = new StringWriterEncoding(Encoding.UTF8)) { using (XmlTextWriter xw = new XmlTextWriter(sw)) { xw.WriteStartElement(CUSTOM_META_INSTRUCTION); if (CustomKeywords.Count > 0) { xw.WriteStartElement("keywords"); foreach (IGrouping<String, Keyword> category in CustomKeywords.GroupBy(k => k.OrganizationalItem.Title, k => k)) { xw.WriteStartElement("Category"); xw.WriteAttributeString("Name", category.Key); foreach (Keyword keyword in category) { xw.WriteStartElement("Keyword"); xw.WriteValue(keyword.Title); xw.WriteEndElement(); } xw.WriteEndElement(); } xw.WriteEndElement(); // </keywords> } if (CustomMetaData.Count > 0) { xw.WriteStartElement("custom"); foreach (KeyValuePair<String, Object> entry in CustomMetaData) { switch (Type.GetTypeCode(entry.Value.GetType())) { case TypeCode.String: xw.WriteStartElement(entry.Key); xw.WriteValue(entry.Value as String); xw.WriteEndElement(); break; case TypeCode.DateTime: xw.WriteStartElement(entry.Key); xw.WriteAttributeString("type", "dateTime"); xw.WriteValue(((DateTime)entry.Value).ToString("yyyy-MM-ddTHH:mm:ss")); xw.WriteEndElement(); break; case TypeCode.Byte: case TypeCode.Decimal: case TypeCode.Double: case TypeCode.Int16: case TypeCode.Int32: case TypeCode.Int64: case TypeCode.SByte: case TypeCode.Single: case TypeCode.UInt16: case TypeCode.UInt32: case TypeCode.UInt64: xw.WriteStartElement(entry.Key); xw.WriteAttributeString("type", "float"); xw.WriteValue(entry.Value.ToString()); xw.WriteEndElement(); break; } } xw.WriteEndElement(); // </custom> } xw.WriteEndElement(); // </my_metadata> } sw.Flush(); Xml.WriteComment(sw.ToString()); } } }