Tridion 2009 - 使用互操作 - 是否可以为同一名称添加多个设置条件

本文关键字:一名 添加 条件 设置 互操作 2009 是否 Tridion | 更新日期: 2023-09-27 18:31:13

我遇到了小问题。

我想为用于发布目标的同一名称添加多个设置条件。这是使用互操作 dll。

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

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

rowFilter.SetCondition("PublicationTarget", pubStgTarget);

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

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

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>

Tridion 2009 - 使用互操作 - 是否可以为同一名称添加多个设置条件

不,不幸的是这是不可能的。如果要对PublicationTarget施加条件,则必须仅对一个PublicationTarget

但是,有 2 种解决方法:

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

  2. 执行GetListPublishTransactions()时不要使用PublicationTarget条件。然后,您将获得一个 XML 元素,其中包含所有PublicationTargets的记录。在代码中,您将仅过滤您感兴趣的内容(例如暂存实时)。

我可能会使用 #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表达式,我还没有实际测试过那个位。

Public Function GetListPublishTransactions( Optional ByVal rowFilter As TDS.ListRowFilter ) As String

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

  • 信息类型(字符串)(计划发布 0、等待发布 1、进行中 2、计划部署 3、等待部署 4、失败 5、成功 6)(全部省略)
  • 开始日期(日期时间) 仅返回此日期之后的项目
  • 结束日期(日期时间) 仅返回此日期之前的项目
  • 用户(字符串)仅返回用户的项
  • 发布(字符串) 仅返回此发布的项目
  • 发布目标
  • (字符串)仅返回此发布目标的项目
不可能

有多个条件使用。

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