Al escribir una herramienta de importación personalizada para un proyecto de Tridion 2011 utilizando el servicio central me he encontrado con un problema al intentar guardar un componente.Servicio principal de Tridion 2011: no se puede actualizar el componente con un nuevo campo usando manipulación Xml
El siguiente código funciona bien cuando el campo en el componente tiene un valor pero cuando no aparece, aparece un error.
Aquí está mi código (la gestión de errores eliminado por razones de brevedad):
//component is a ComponentData object from Tridion
var doc = new XmlDocument();
doc.LoadXml(component.Content);
var namespaces = new XmlNamespaceManager(doc.NameTable);
namespaces.AddNamespace("ns", doc.DocumentElement.NamespaceURI);
//componentFromSpreadsheet has a dictionary of fields and values to update
foreach (var field in componentFromSpreadsheet.Fields)
{
XmlNode xmlNode = doc.SelectSingleNode("//ns:" + field.Key, namespaces);
if (xmlNode == null)
{
xmlNode = doc.CreateNode(XmlNodeType.Element, field.Key,
doc.DocumentElement.NamespaceURI);
doc.DocumentElement.AppendChild(xmlNode);
}
//Namespace any Html in the field
string fieldValue = HtmlTidy.Tidy(field.Value);
xmlNode.InnerXml = fieldValue;
}
component.Content = doc.OuterXml;
//This line throws a FaultException<CoreServiceException> with an
//XmlException from tridion
client.Save(component, null);
Aquí es el mensaje de Tridion:
El elemento 'contenido' de espacio de nombres 'uuid: 09ed2feb-f7cb-4760 -ba4c-b9ff4f45d025 'tiene un elemento secundario no válido ' summary 'en el espacio de nombres' uuid: 09ed2feb-f7cb-4760-ba4c-b9ff4f45d025 '. lista de posibles elementos esperados: '' related_links en espacio de nombres 'uuid: 09ed2feb-f7cb-4760-ba4c-b9ff4f45d025'
sé resumen es un campo válido para el esquema de este componente.
Parece que el esquema es estricto y se preocupa por el orden de los campos dentro del Xml. ¿Hay alguna forma de evitar este u otro enfoque?
En la recomendación de un colega (Ryan Durkin) utilizamos el enfoque de serialización, que funciona muy bien y está fuertemente tipado, pero no es flexible, por lo que debemos aceptar los esquemas que actualizaremos. –