2012-05-23 2 views
2

я получаю сообщение об ошибке при обновлении компонента в TRIDION с помощью основной службыОшибка при обновлении компонента в TRIDION с помощью основной службы

Корневой элемент должен находиться в пространстве имен

Мой код:

ComponentData component = client.Read(webDavPath, readOptions) as ComponentData; 
component = client.TryCheckOut(webDavPath, readOptions) as ComponentData; 
//XDocument dom = XDocument.Parse(component.Content); 
//// do your modifications to dom 
//component.Content = dom.ToString(); 
doc.Load(filePath); 
sw = new StringWriter(); 
xw = new XmlTextWriter(sw); 
doc.WriteTo(xw); 
component.Content = sw.ToString(); 
//client.CheckOut(webDavPath, true, readOptions); 
client.Update(component, readOptions); 
client.Save(component, readOptions); 
client.CheckIn(component.Id, readOptions); 

//client.Update(component, new ReadOptions()); 
// component = client.Update(component, readOptions) as ComponentData; 

ответ

7

Необходимо указать пространство имен схемы при добавлении новых полей в компонент.

Вы можете получить пространство имен схемы в своем коде, а затем использовать это при добавлении новых полей.

Вы не указали код, который используете для обновления своего контента, поэтому его трудно показать в контексте вашей проблемы, но приведенный ниже пример может помочь. (Это может быть немного отличается для вас, как вы, исходя из существующего компонента)

// get namespace from component schema 
SchemaData sd = client.Read(_componentSchemaTcmId, null) as SchemaData; 
XNamespace ns = sd.NamespaceUri; 

//create/update content 
XElement contentXml = new XElement(ns + "news"); 
contentXml.Add(new XElement(ns + "title", "Title")); 
contentXml.Add(new XElement(ns + "sub_title", "Sub Title")); 

component.Content = contentXml.ToString(); 

Кроме того, я не думаю, что вам нужно как client.Update(component, readOptions); и client.Save(component, readOptions);

Если это не помогает, то пожалуйста, напишите ваш полный код.

2

В вашей схеме есть пространство имен, например, вот моя схема:

<xsd:schema elementFormDefault="qualified" targetNamespace="uuid:ce656a4c-71e8-407f-8734-26a60da2440a" xmlns="uuid:ce656a4c-71e8-407f-8734-26a60da2440a" xmlns:tcmi="http://www.tridion.com/ContentManager/5.0/Instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<xsd:import namespace="http://www.tridion.com/ContentManager/5.0/Instance"></xsd:import> 
<xsd:annotation> 
    <xsd:appinfo> 
     <tcm:Labels xmlns:tcm="http://www.tridion.com/ContentManager/5.0"> 
      <tcm:Label ElementName="text" Metadata="false">text</tcm:Label> 
     </tcm:Labels> 
    </xsd:appinfo> 
</xsd:annotation> 
<xsd:element name="Content"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="text" minOccurs="1" maxOccurs="1" type="xsd:normalizedString"> 
       <xsd:annotation> 
        <xsd:appinfo> 
         <tcm:ExtensionXml xmlns:tcm="http://www.tridion.com/ContentManager/5.0"></tcm:ExtensionXml> 
        </xsd:appinfo> 
       </xsd:annotation> 
      </xsd:element> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 

Примечание "uuid:ce656a4c-71e8-407f-8734-26a60da2440a" это пространство имен вашей схемы. Корневой элемент вашего компонента должен быть в том же пространстве имен, вот соответствующий исходный компонент:

<Content xmlns="uuid:ce656a4c-71e8-407f-8734-26a60da2440a"> 
    <text>Some text</text> 
</Content> 

Если пространство имен компонента не является правильным - вы получите исключение, как тот, который вы имеете. Если это не решит вашу проблему, не могли бы вы разместить свои источники схемы и компонентов?

Смежные вопросы