2012-04-15 8 views
6

Estoy atrapado con un pequeño problema.Tridion 2009 - Uso de Interops - ¿Existe la posibilidad de agregar varios setConditions para el mismo nombre?

Quiero añadir múltiples setConditions para el mismo Nombre que es para PublicationTarget. Esto es usando interops dll.

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

Por esta PublicationTarget, quiero filtrar con puesta en escena & objetivo en vivo y he intentado todas las maneras, pero sin consumo.

rowFilter.SetCondition("PublicationTarget", pubStgTarget); 

Para sugerir,
1. Paso xis posible, ¿cuál es la mejor manera de lograr?

Probé este maneras pero sin suerte, -

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

Hola amigos, actualmente utilicé @Mihai answer '# 2' para resolver el problema. Si alguien tiene algunas mejores soluciones, por favor publíquelo. –

Respuesta

6

No, desafortunadamente no es posible. Si desea poner una condición en PublicationTarget, debe ser solo unaPublicationTarget.

Sin embargo, hay 2 soluciones:

  1. crear dos RowFilters y establecer un PublicationTarget condición diferente en cada uno de ellos. Luego emitirías la consulta dos veces (una para cada filtro). Esto significa que necesitaría procesar 2 nodos de resultados XML.

  2. No utilice una condición PublicationTarget al realizar el GetListPublishTransactions(). A continuación, obtendrá un elemento XML que contiene registros para todos PublicationTargets. En su código, filtrará solo aquellos que le interesen (por ejemplo, Puesta en escena o Live).

probablemente lo usaría # 2 (a menos que sepa la cola de publicación potencialmente podría devolver un número muy grande de registros, en cuyo caso, me gustaría utilizar # 1).

Código de ejemplo para # 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 
} 

Nota: doble Vea la expresión XPath, no he hecho probado que bits.

+0

Gracias Mihai. Actualmente no he encontrado otra manera que no sea tu sugerencia '# 2'. Utilicé el modo '# 2' para superar este problema. –

+0

+1 por su respuesta. –

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

Los GetListPublishTransactions método acepta las siguientes condiciones como parte del filtro:

  • TipoInformación (cadena) (ScheduledForPublish 0, WaitingForPublish 1, InProgress 2, ScheduledForDeployment 3, WaitingForDepl oyment 4, Error 5, Éxito 6) (omitir para todos)
  • StartDate (dateTime) sólo devuelven artículos después de esta fecha
  • EndDate (dateTime) Sólo devolver los artículos antes de esta fecha
  • usuario (cadena) Sólo devolver los artículos por un usuario
  • publicación (cadena) Sólo devolver los artículos de esta publicación
  • PublicationTarget (cadena) Sólo volver el artículo para este objetivo publicación

no es posible tener las condiciones que se utilizan más de una vez.

Es posible que deba realizar más de una llamada a la API de TOM para lograr los resultados que necesita.

+0

No. Estoy usando ** 'GetListPublishTransactions' ** –

+0

Así que en lugar de tomar una llamada más, no hay forma de representación para pasar' staging target ID' y 'live target ID' a' PublicationTarget' –

+0

Actualicé a mi respuesta para reflejar el hecho de que está utilizando GetListPublishTransactions. Mihai ha confirmado que solo puede tener un PublicationTarget y también le ha proporcionado una solución. –

Cuestiones relacionadas