c# – Tridion 2009 – 使用Interops – 是否有可能为同一个Name
我遇到了小问题.
我想为PublicationTarget的相同Name添加多个setConditions.这是使用interops dll. ListRowFilter rowFilter = mTDSE.CreateListRowFilter(); rowFilter.SetCondition("StartDate",sDate); rowFilter.SetCondition("EndDate",eDate); rowFilter.SetCondition("PublicationTarget",pubStgTarget); 对于这个PublicationTarget,我想要使用staging&活的目标,我尝试了所有的方式,但没有用. rowFilter.SetCondition("PublicationTarget",pubStgTarget); 请建议, 我尝试过这种方式,但没有运气; – rowFilter.SetCondition("PublicationTarget","tcm:0-1-65537"); // Gives only staging rowFilter.SetCondition("PublicationTarget","tcm:0-2-65537"); // Gives only Live rowFilter.SetCondition("PublicationTarget","tcm:0-1-65537|tcm:0-1-65537"); // No result rowFilter.SetCondition("PublicationTarget",oPubList); // No result - `oPubList` is a 列表与LT;串GT; 解决方法
不,不幸的是,这是不可能的.如果要在PublicationTarget上添加条件,则必须只有一个PublicationTarget.
但是有2种解决方法: >创建两个RowFilter并在每个RowFilters中设置不同的PublicationTarget条件.然后,您将发出两次查询(每个过滤器一次).这意味着您需要处理2个XML结果节点. 我可能会使用#2(除非我知道Publish Queue可能会返回大量的记录,在这种情况下,我会使用#1). #2的示例代码: tdse = new TDS.TDSEClass(); tdse.Impersonate(user.Title); tdse.Initialize(); mgtInfo = tdse.GetManagementInfo(); filter = tdse.CreateListRowFilter(); filter.SetCondition("InfoType",2); // InProgress filter.SetCondition("Publication","tcm:0-23-1"); XmlDocument dom = new XmlDocument(); dom.LoadXml(mgtInfo.GetListPublishTransactions(filter)); XmlNamespaceManager namespaceManager = new XmlNamespaceManager(new NameTable()); namespaceManager.AddNamespace("tcm","http://www.tridion.com/ContentManager/5.0"); String xPath = String.Format( "tcm:ListPublishTransactions/tcm:Item[@PublicationTarget='{0}'] | " + "tcm:ListPublishTransactions/tcm:Item[@PublicationTarget='{1}']",stagingTcmUri,liveTcmUri); XmlNodeList nodeList = dom.SelectNodes(xPath,namespaceManager); foreach (XmlNode node in dom.DocumentElement.ChildNodes) { //do your thing } 注意:仔细检查XPath表达式,我实际上没有测试过那个位. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |