2012-04-15 5 views
6

hinzufügen Am mit kleinen Problem stecken.Tridion 2009 - Verwendung von Interops - Gibt es eine Möglichkeit, mehrere setConditions für den gleichen Namen

Ich möchte mehrere setConditions für denselben Namen hinzuzufügen, die für PublicationTarget ist. Dies verwendet interops dll.

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

Für diese PublicationTarget möchte ich mit Staging & Live-Ziel filtern und ich versucht, alle Möglichkeiten, aber keine Verwendung.

rowFilter.SetCondition("PublicationTarget", pubStgTarget); 

Bitte legen nahe,
1. Passing xi möglich, was ist die beste Art und Weise zu erreichen?

ich diese Weise versucht, aber kein Glück; -

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

Hallo Freunde, zur Zeit habe ich @Mihai mit der Antwort '# 2' benutzt, um das Problem zu lösen. Wenn jemand einige bessere Lösungen hat, poste es bitte. –

Antwort

6

Nein, es ist leider nicht möglich. Wenn Sie eine Bedingung auf PublicationTarget setzen möchten, muss es nur einPublicationTarget sein.

Allerdings gibt es zwei Lösungen:

  1. zwei erstellen RowFilters und setzen einen anderen PublicationTarget Zustand in jedem von ihnen. Dann würden Sie die Abfrage zweimal (einmal für jeden Filter) ausgeben. Dies bedeutet, dass Sie 2 XML-Ergebnisknoten verarbeiten müssen.

  2. Verwenden Sie keinen PublicationTarget Zustand bei der Durchführung der GetListPublishTransactions(). Sie erhalten dann ein XML-Element zurück, das Datensätze für alle PublicationTargets enthält. In Ihrem Code filtern Sie nur diejenigen, die für Sie von Interesse sind (z. B. Staging oder Live).

ich wahrscheinlich # 2 verwenden würde (es sei denn, ich weiß, dass die Warteschlange möglicherweise veröffentlichen könnte eine sehr große Anzahl von Datensätzen zurückgeben, in diesem Fall würde ich # 1 verwenden).

Beispielcode für # 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 
} 

Hinweis: Doppel des XPath-Ausdruck überprüfen, habe ich eigentlich nicht, dass etwas getestet.

+0

Danke Mihai. Momentan finde ich keinen anderen Weg als deinen Vorschlag '# 2'. Ich habe "# 2" verwendet, um dieses Problem zu lösen. –

+0

+1 für Ihre Antwort. –

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

Die Methode GetListPublishTransactions akzeptiert die folgenden Bedingungen als Teil des Filters:

  • Infotype (string) (ScheduledForPublish 0, WaitingForPublish 1, InProgress 2, ScheduledForDeployment 3, WaitingForDepl oyment 4, Fehlgeschlagen 5, Erfolg 6) (auslassen für alle)
  • Startdate (Datums- und Uhrzeit) Nur Rückholeinzelteile nach diesem Datum
  • EndDate (Datums- und Uhrzeit) Nur Rückholeinzelteile vor diesem Datum
  • Benutzer (string) Nur Artikel zurückgeben von für Benutzer
  • Veröffentlichung (string) Nur Rückholeinzelteile für diese Publikation
  • PublicationTarget (string) Nur Rückholeinzelteil für diese Publikation Ziel

Es ist nicht möglich, Bedingungen zu haben, die mehr als einmal verwendet werden.

Sie müssen möglicherweise mehrere Aufrufe an die TOM-API senden, um die gewünschten Ergebnisse zu erzielen?

+0

Nein. Verwenden Sie ** "GetListPublishTransactions" ** –

+0

So, anstatt einen weiteren Anruf zu nehmen, gibt es keine Möglichkeit der Darstellung 'Staging-Ziel-ID' und' Live-Ziel-ID' nach 'PublicationTarget' –

+0

Ich aktualisiert, um meine Antwort um die Tatsache zu reflektieren, dass Sie GetListPublishTransactions verwenden. Mihai hat bestätigt, dass Sie nur ein PublicationTarget haben können, und hat auch eine Lösung für Sie bereitgestellt. –