4

TridionのTOM.NETAPIを使用して、C#のマルチメディア画像のメタデータを次のように更新しようとしています。

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

これは他のコンポーネントでは機能しますが、マルチメディアイメージでは失敗します。

<?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>

ここで何が間違っているのか教えていただけますか?

4

4 に答える 4

3

ご回答ありがとうございます。ノードを削除していましたが、場所が間違っていました。このようにコードを更新すると、正常に動作するようになりました。

 if (localComponent.IsMultimediaComponent)

                        {

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

                            XmlNode dataNode = multimediaFileSizeNode.ParentNode;

                            dataNode.RemoveChild(multimediaFileSizeNode);

                        }



                        localComponent.UpdateXML(localComponentXML.InnerXml);
于 2012-12-06T15:34:55.513 に答える
2

更新にtcm:Metadataノードのみを含めますか?

具体的には、mmファイルのサイズを指定することについて不平を言っていますが、これはシステムプロパティです。Tridionから受け取ったXMLをクリーンアップして、そのプロパティを削除します(その後、別のプロパティについて文句を言う可能性があります。要求されたとおりに実行してください)。

編集:エラーメッセージを読むことは持っている素晴らしいスキルです...

于 2012-12-05T16:00:06.403 に答える
2

これを行うときは、変更されたメタデータデータのみを保存する必要があります(XML全体ではありません)。呼び出す前に、XML構造からtcm:Metadataを除くすべての子ノードを削除してみてください.UpdateXML()

さらにサポートが必要な場合は、サンプルXMLを貼り付けることができます。

于 2012-12-05T16:02:00.590 に答える
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);
于 2012-12-05T16:36:17.047 に答える