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

Tridion 发布事务信息类型不匹配错误,tridion,tridion2009,Tridion,Tridion2009,使用Tridion2009、SP1,因此使用了旧的COM+TOMAPI。我试图获取PublishTransaction的信息,但每次调用PublishTransaction.information属性时都会出错 这是我的密码: 试试看 { var pubTrans=(PublishTransaction)tdse.GetObject(“tcm:0-166535-66560”, EnumOpenMode.OpenModeView); Console.WriteLine(“事务id=“+pubTra

使用Tridion2009、SP1,因此使用了旧的COM+TOMAPI。我试图获取PublishTransaction的信息,但每次调用PublishTransaction.information属性时都会出错

这是我的密码:

试试看
{
var pubTrans=(PublishTransaction)tdse.GetObject(“tcm:0-166535-66560”,
EnumOpenMode.OpenModeView);
Console.WriteLine(“事务id=“+pubTrans.id”);
Console.WriteLine(“事务项类型=“+pubTrans.itemtype.ToString());
Console.WriteLine(“事务信息=“+pubTrans.Information”);
}
捕获(例外e)
{
控制台写入线(e.Message,e.StackTrace);
}
上面,事务ID和项目类型可以打印。我还有其他代码,其中Delete方法可以很好地工作,但每当我尝试获取信息时,它就会崩溃

以下是错误:


住宅信息
剩余油4663tcm:0-166535-66560
公开交易信息
公开交易信息

我搜索了SDL Tridion世界论坛,没有找到答案。我是否缺少修补程序,是否应该联系支持部门,或者是否有其他方法获取交易信息?

我不太确定(在晚上的这个时候没有进一步挖掘),但“信息”属性实际上是一个XMLElement而不是文档中所说的字符串吗?当您使用调试器时,是否能够在此属性上放置一个监视以查看它包含的内容?

我尝试用另一种方式获取PublishTransaction信息。代码如下:

PublishTransaction pubTrans=(PublishTransaction)tdse.GetObject(
“变速器控制模块:0-4294103-66560”,
EnumOpenMode.OpenModeView,
无效的
XMLReadFilter.XMLReadNull);
XmlDocument xmlDoc=新的XmlDocument();
LoadXml(pubTrans.GetXML(XMLReadFilter.XMLReadAll));
XmlNamespaceManager nameSpace=新的XmlNamespaceManager(xmlDoc.NameTable);
nameSpace.AddNamespace(“tcm”http://www.tridion.com/ContentManager/5.0");
nameSpace.AddNamespace(“xlink”http://www.w3.org/1999/xlink");
Console.WriteLine(“事务id=“+pubTrans.id”);
Console.WriteLine(“事务项类型=“+pubTrans.itemtype.ToString());
EnumPublishTransactionState transState=pubTrans.get_State();
if(transState==EnumPublishTransactionState.Failed)
Console.WriteLine(“事务信息=“+
xmlDoc.SelectSingleNode(“/tcm:PublishTransaction/tcm:Data/tcm:Information”,
名称空间);

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

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();
    }
}
PublicationPublishPost(出版物出版物,IXMLDOMDocument2 publishResult)上的公共作废 { TDSE TDSE=Utilities.GetTDSEInstance(); setProperty(“SelectionNamespaces”,“xmlns:tcm=\”http://www.tridion.com/ContentManager/5.0\""); PublishTransaction PublishTransaction=Utilities.GetTridinItem(publishResult.selectSingleNode(“/*/*”)。属性[2]。文本,null)作为PublishTransaction; User User=Utilities.gettridinite(publishResult.selectSingleNode(“/tcm:PublishResponse/tcm:PublishRequest/tcm:User”)。属性[0]。文本,null)作为用户; TDSPrivileges isAdmin=user.privileges; if(isAdmin!=TDSPrivileges.TdsPrivilegeSystemAdministrator) { publishTransaction.Delete(); } }
加载发布事务的代码显然可以工作,因为ID和ItemType是可访问的,所以我非常怀疑这是解决方案。能够读取ID和ItemType只是TOM能够将您输入的值返回给您的唯一证据。可以想象,这可以正常工作,但是当需要“深入到各个层”(获取信息)时,需要一个格式正确的TCM Uri。另外,使用XMLAPI是一种很好的方法,即使在对象模型出现问题的情况下也能正常工作。感谢您发现问题代码中缺少的“tcm”前缀。这实际上只是一个粘贴错误。我已经在我的问题中修复了它。同样的代码在2011年运行良好(刚刚测试过)。很遗憾,无法在2009年进行测试…如果使用Console.WriteLine(“transaction info=“+pubTrans.Information.ToString()”),会得到什么结果;它也会以同样的方式爆炸。我还没有机会把它扔进远程调试器。有一些AD跨域信任问题要绕过。我的事件系统代码片段对您不起作用?我看到@SivaCharan的答案变成了一个非常类似的解决方案。我想知道你是否已经解决了。所以我在调试器中尝试了这个。它应该是发布的。信息应该返回一个字符串。我什么都做不到。我想这应该是一张支持票。