2012-05-23 76 views
2

我得到的錯誤,而使用核心服務錯誤而使用的核心服務

根元素必須是在命名空間外表套上更新組件更新組件在外表套上

我的代碼:

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> 

如果組件的命名空間是不正確的 - 你會得到例外就像你有一個。 如果這不能解決您的問題,請您發佈您的模式和組件源?