首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >发布事务信息类型不匹配错误

发布事务信息类型不匹配错误
EN

Stack Overflow用户
提问于 2012-05-17 07:17:51
回答 3查看 281关注 0票数 3

使用Tridion2009,SP1,因此使用旧的COM+ TOM API。我试图获取PublishTransaction的信息,但每次调用PublishTransaction.Information属性时都会得到一个错误。

下面是我的代码:

代码语言:javascript
复制
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方法,但每当我尝试获取信息时,它都会崩溃。

下面是错误:

代码语言:javascript
复制
<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论坛,但找不到答案。我是否缺少热修复程序,我是否应该联系支持人员,或者是否有其他方法可以获取交易信息?

EN

回答 3

Stack Overflow用户

发布于 2012-05-17 11:17:32

我真的不确定(在晚上这个时候不深入挖掘),但是“信息”属性实际上是一个XMLElement而不是文档中所说的字符串?使用调试器时,是否可以在此属性上放置监视以查看其包含的内容?

票数 3
EN

Stack Overflow用户

发布于 2012-05-17 14:57:04

我尝试了另一种方法来获取PublishTransaction信息。以下是代码:

代码语言:javascript
复制
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); 
票数 2
EN

Stack Overflow用户

发布于 2012-05-18 03:49:12

我没有一个工作环境,所以我只是查看我现有的任何可用的代码。这是来自事件系统的代码片段,仅当您拥有管理员权限时才会删除队列项目:

代码语言:javascript
复制
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();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10628024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档