Lors de l'écriture d'un outil d'importation personnalisé pour un projet Tridion 2011 utilisant le service de base, j'ai rencontré un problème lors de l'enregistrement d'un composant.
Le code suivant fonctionne bien lorsque le champ du composant a une valeur, mais s'il n'en a pas, j'obtiens une erreur.
Voici mon code (le traitement des erreurs a été supprimé pour des raisons de brièveté) :
//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);
Voici le message de Tridion :
L'élément 'Content' dans l'espace de nom 'uuid:09ed2feb-f7cb-4760-ba4c-b9ff4f45d025' a un élément enfant invalide summary' dans l'espace de nom 'uuid:09ed2feb-f7cb-4760-ba4c-b9ff4f45d025'. Liste des éléments possibles attendus : 'related_links' dans l'espace de noms 'uuid:09ed2feb-f7cb-4760-ba4c-b9ff4f45d025'
Je sais que summary est un champ valide pour le schéma de ce composant.
Il semble que le schéma soit strict et se soucie de l'ordre des champs dans le Xml. Existe-t-il un moyen de contourner ce problème ou une autre approche ?