3

Tridion 2009、SP1 を使用しているため、古い COM+ TOM API です。PublishTransaction の情報を取得しようとしていますが、PublishTransaction.Information プロパティを呼び出すたびにエラーが発生します。

これが私のコードです:

try
{
    var pubTrans = (PublishTransaction)tdse.GetObject("tcm:0-166535-66560",
                                                      EnumOpenMode.OpenModeView);
    Console.WriteLine("transaction id=" + pubTrans.ID);
    Console.WriteLine("transaction itemtype=" + pubTrans.itemType.ToString());
    Console.WriteLine("transaction info=" + pubTrans.Information);
}
catch (Exception e)
{
    Console.WriteLine(e.Message, e.StackTrace);
}

上記では、トランザクション ID とアイテム タイプが正しく表示されています。Delete メソッドが正常に機能するコードは他にもありますが、情報を取得しようとすると、エラーが発生します。

エラーは次のとおりです。

<tcm:Error xmlns:tcm="http://www.tridion.com/ContentManager/5.0" ErrorCode="D"
           Category="18" Source="Kernel" Severity="1">
  <tcm:Line Cause="false" MessageID="16138">
    <![CDATA[Unable to get Information of Unknown (tcm:0-166535-66560).]]>
    <tcm:Token>RESID_4485</tcm:Token><tcm:Token>Information</tcm:Token>
    <tcm:Token>RESID_4663</tcm:Token><tcm:Token>tcm:0-166535-66560</tcm:Token>
  </tcm:Line>
  <tcm:Line ErrorCode="D" Cause="true"><![CDATA[Type mismatch]]></tcm:Line>
  <tcm:Details>
    <tcm:CallStack>
      <tcm:Location>PublishTransaction.Information</tcm:Location>
      <tcm:Location>PublishTransaction.Information</tcm:Location>
    </tcm:CallStack>
  </tcm:Details>
</tcm:Error>

SDL Tridion World フォーラムを検索しましたが、答えが見つかりませんでした。サポートに連絡する必要がありますか、またはトランザクション情報を取得する別の方法はありますか?

4

3 に答える 3

3

私はよくわかりませんが(この夜にさらに掘り下げることなく)、ドキュメントが言うように、「情報」プロパティは実際には文字列ではなくXMLElementですか?デバッガーを使用する場合、このプロパティにウォッチを配置して内容を確認できますか?

于 2012-05-17T03:17:32.213 に答える
2

PublishTransaction 情報を取得するために、別の方法でこれを試しました。以下はコードです: -

PublishTransaction pubTrans = (PublishTransaction)tdse.GetObject(
                                                    "tcm:0-4294103-66560",
                                                    EnumOpenMode.OpenModeView, 
                                                    null, 
                                                    XMLReadFilter.XMLReadNull);
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(pubTrans.GetXML(XMLReadFilter.XMLReadAll));
XmlNamespaceManager nameSpace = new XmlNamespaceManager(xmlDoc.NameTable);
nameSpace.AddNamespace("tcm", "http://www.tridion.com/ContentManager/5.0");
nameSpace.AddNamespace("xlink", "http://www.w3.org/1999/xlink");
Console.WriteLine("transaction id=" + pubTrans.ID); 
Console.WriteLine("transaction itemtype=" + pubTrans.itemType.ToString());
EnumPublishTransactionState transState = pubTrans.get_State();
if (transState == EnumPublishTransactionState.Failed)
  Console.WriteLine("transaction info=" + 
    xmlDoc.SelectSingleNode("/tcm:PublishTransaction/tcm:Data/tcm:Information",
    nameSpace).InnerText); 
于 2012-05-17T06:57:04.073 に答える
0

私は作業環境を持っていないので、利用可能な既存のコードを調べているだけです。これは、管理者権限がある場合にのみキュー アイテムを削除するイベント システムのスニペットです。

public void OnPublicationPublishPost(Publication publication, IXMLDOMDocument2 publishResult)
{
    TDSE tdse = Utilities.GetTDSEInstance();
    publishResult.setProperty("SelectionNamespaces", "xmlns:tcm=\"http://www.tridion.com/ContentManager/5.0\"");
    PublishTransaction publishTransaction = Utilities.GetTridionItem<PublishTransaction>(publishResult.selectSingleNode("/*/*").attributes[2].text, null) as PublishTransaction;
    User user = Utilities.GetTridionItem<User>(publishResult.selectSingleNode("/tcm:PublishResponse/tcm:PublisherRequest/tcm:User").attributes[0].text, null) as User;
    TDSPrivileges isAdmin = user.privileges;
    if (isAdmin != TDSPrivileges.TdsPrivilegeSystemAdministrator)
    {
        publishTransaction.Delete();
    }
}
于 2012-05-17T19:49:12.023 に答える