2012-12-05 49 views
4

我想用這樣的更新使用TOM.NET

componentMM.LoadXML(localComponent.GetXML(XMLReadFilter.XMLReadALL)); 
// make changes to the component mm multimedia text; 
localComponent.UpdateXML(componentMM.InnerXML); 
localComponent.Save(True) 

外表套上的TOM.NET API儘管這適用於其他組件來更新C#中的多媒體圖像上的元數據的多媒體組件,它是失敗的多媒體圖片。

<?xml version="1.0"?> 
<tcm:Error xmlns:tcm="http://www.tridion.com/ContentManager/5.0" 
      ErrorCode="80040345" Category="19" Source="Kernel" Severity="2"> 
    <tcm:Line ErrorCode="80040345" Cause="false" MessageID="16137"><![CDATA[ 

    Unable to save Component (tcm:33-32599). 
    ]]><tcm:Token>RESID_4574</tcm:Token> 
     <tcm:Token>RESID_4418</tcm:Token> 
     <tcm:Token>tcm:33-32599</tcm:Token> 
    </tcm:Line> 
    <tcm:Line ErrorCode="80040345" Cause="true" MessageID="15747"><![CDATA[ 

    Unexpected element: MultimediaFileSize 
    ]]><tcm:Token>MultimediaFileSize</tcm:Token> 
    </tcm:Line> 
    <tcm:Details> 
     <tcm:CallStack> 
      <tcm:Location>ComponentBL.CheckMultiMediaProperties</tcm:Location> 
      <tcm:Location>ComponentBL.CheckMultiMediaProperties</tcm:Location> 
      <tcm:Location>ComponentBL.Update</tcm:Location> 
      <tcm:Location>XMLState.Save</tcm:Location> 
      <tcm:Location>Component.Save</tcm:Location> 
     </tcm:CallStack> 
    </tcm:Details> 
</tcm:Error> 

您能否讓我知道我在這裏做錯了什麼?

+0

在更新中只包含tcm:Metadata節點? –

回答

2

在更新中只包含tcm:Metadata節點?

具體來說,它是抱怨你指定mm文件的大小,你不應該這是一個系統屬性。清理從Tridion收到的XML以刪除該屬性(然後它可能會抱怨另一個屬性,只是按照您的要求去做)。

編輯:讀取錯誤信息是一個偉大的技能,有...

2

當你這樣做,你只需要保存修改後的元數據的數據(而不是整個XML)。嘗試在調用之前,從XML結構中刪除除tcm之外的所有子節點:.UpdateXML()

也許如果您需要進一步的幫助,可以粘貼您的示例XML。

1

我通常是這樣的: -

mComponent = (Component)mTDSE.GetObject("YOUR-COMPONENT-ID", EnumOpenMode.OpenModeView, null, XMLReadFilter.XMLReadAll); 
mComponent.CheckOut(false); 
mComponent.MetadataFields["YOUR-METADATA-FIELD-NAME"].value[1] = "VALUE TO BE REPLACED"; 
mComponent.Save(true); 
3

感謝您的答覆。我正在刪除節點,但在錯誤的地方。我更新這樣的代碼,現在它工作正常。

if (localComponent.IsMultimediaComponent) 

         { 

          XmlNode multimediaFileSizeNode = localComponentXML.SelectSingleNode("//*[local-name()='MultimediaFileSize']",tridionNamespace); 

          XmlNode dataNode = multimediaFileSizeNode.ParentNode; 

          dataNode.RemoveChild(multimediaFileSizeNode); 

         } 



         localComponent.UpdateXML(localComponentXML.InnerXml); 
+0

BTW Stackoverflow真棒! – user1373140