6

我被小问题困住了。

我想为PublicationTarget的同名添加多个 setConditions 。这是使用互操作 dll。

ListRowFilter rowFilter = mTDSE.CreateListRowFilter();
rowFilter.SetCondition("StartDate", sDate);
rowFilter.SetCondition("EndDate", eDate);
rowFilter.SetCondition("PublicationTarget", pubStgTarget);

为此PublicationTarget,我想使用暂存和实时目标进行过滤,我尝试了所有方法但没有用。

rowFilter.SetCondition("PublicationTarget", pubStgTarget);

请建议,
1.通过 xis 可能,最好的实现方法是什么?

我尝试了这种方法,但没有运气;-

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 

List<string>

4

2 回答 2

6

不,不幸的是这是不可能的。如果要加一个条件PublicationTarget,就必须只给一个 PublicationTarget

但是有两种解决方法:

  1. 创建两个RowFilters并在每个中设置不同的PublicationTarget条件。然后您将发出两次查询(每个过滤器一次)。这意味着您需要处理 2 个 XML 结果节点。

  2. 执行时不要使用PublicationTarget条件GetListPublishTransactions()。然后,您将返回一个包含所有记录的 XML 元素PublicationTargets。在您的代码中,您将只过滤您感兴趣的那些(例如StagingLive)。

我可能会使用#2(除非我知道发布队列可能会返回大量记录,在这种情况下,我会使用#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 表达式,我还没有实际测试过那个位。

于 2012-04-15T08:15:05.377 回答
2
Public Function GetListPublishTransactions( Optional ByVal rowFilter As TDS.ListRowFilter ) As String

GetListPublishTransactions 方法接受以下条件作为过滤器的一部分:

  • InfoType (string) (ScheduledForPublish 0, WaitingForPublish 1, InProgress 2, ScheduledForDeployment 3, WaitingForDeployment 4, Failed 5, Success 6) (全部省略)
  • StartDate (dateTime) 仅返回此日期之后的项目
  • EndDate (dateTime) 仅返回此日期之前的项目
  • 用户(字符串)只返回用户的项目
  • Publication (string) 仅返回此发布的项目
  • PublicationTarget (string) 仅返回此发布目标的项目

条件不能多次使用。

您可能需要多次调用 TOM API 才能获得所需的结果?

于 2012-04-15T07:58:18.770 回答