2012-04-15 1 views
6

Застрял с небольшой проблемой.Tridion 2009 - Использование Interops - Есть ли возможность добавить несколько setConditions для одного и того же имени

Я хочу добавить несколько setConditions для того же Имя, который для PublicationTarget. Это использование interops 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>

+0

Привет, друзья, в настоящее время я использовал @Mihai ответ '# 2', чтобы решить проблему. Если у кого-то есть несколько лучших решений, отправьте его. –

ответ

6

Нет, к сожалению, это невозможно. Если вы хотите поставить условие на PublicationTarget, оно должно быть только одинPublicationTarget.

Однако есть 2 обходные пути:

  1. Создание двух RowFilters и установить различные PublicationTarget условия в каждом из них. Затем вы дважды отправляете запрос (один раз для каждого фильтра). Это означает, что вам нужно обработать 2 XML-результирующих узла.

  2. Не используйте условие PublicationTarget при выполнении GetListPublishTransactions(). Затем вы получите XML-элемент, содержащий записи для всех PublicationTargets. В вашем коде вы отфильтровываете только те, которые вас интересуют (например, этап или Live).

я бы, вероятно, использовать # 2 (если я не знаю Опубликовать 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, я не тестировал этот бит.

+0

Спасибо, Михай. В настоящее время я не нашел иного способа, кроме вашего предложения '# 2'. Я использовал способ «# 2», чтобы преодолеть эту проблему. –

+0

+1 для вашего ответа. –

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

Метод GetListPublishTransactions принимает следующие условия как часть фильтра:

  • InfoType (строка) (ScheduledForPublish 0, WaitingForPublish 1, InProgress 2, ScheduledForDeployment 3, WaitingForDepl oyment 4, Не 5, Success 6) (Опускаем для всех)
  • StartDate (DateTime) возвращают только элементы после этой даты
  • EndDate (DateTime) возвращают только элементы до этой даты
  • пользователя (строка) только возвращают элементы не для пользователя
  • публикации (строка) возвращают элементы только для этой публикации
  • PublicationTarget (строка) вернуть товар только для этой цели публикации

Это не возможно иметь условие, которые используются более чем один раз.

Возможно, вам потребуется сделать несколько вызовов API TOM для достижения требуемых результатов?

+0

Нет. Использую ** 'GetListPublishTransactions' ** –

+0

Таким образом, вместо того, чтобы принимать еще один вызов, нет способа представления для передачи« промежуточного целевого идентификатора »и« живого целевого идентификатора »в« PublicationTarget » –

+0

Я обновил свой ответ чтобы отразить тот факт, что вы используете GetListPublishTransactions. Михай подтвердил, что у вас может быть только один PublicationTarget, а также предоставил вам решение. –