Am stuck with small problem.
I want to add multiple setConditions for the same Name that is for PublicationTarget. This is using interops dll.
ListRowFilter rowFilter = mTDSE.CreateListRowFilter();
rowFilter.SetCondition("StartDate", sDate);
rowFilter.SetCondition("EndDate", eDate);
rowFilter.SetCondition("PublicationTarget", pubStgTarget);
For this PublicationTarget
, I want to filter with staging & live target and I tried all the ways but no use.
rowFilter.SetCondition("PublicationTarget", pubStgTarget);
Please suggest,
1. Passing xis possible, what is the best way to achieve?
I tried this ways but no luck;-
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>
Nope, it is not possible unfortunately. If you want to put a condition on PublicationTarget
, it must be to only one PublicationTarget
.
However there are 2 workarounds:
Create two RowFilters
and set a different PublicationTarget
condition in each of them. Then you would issue the query twice (once for each filter). This means you would need to process 2 XML result nodes.
Don't use a PublicationTarget
condition when performing the GetListPublishTransactions()
. You will then get back an XML element that contains records for all PublicationTargets
. In your code, you will filter only those that are of interest to you (e.g. Staging or Live).
I would probably use #2 (unless I know the Publish Queue could potentially return a very large number of records, in which case, I would use #1).
Sample code for #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
}
Note: double check the XPath expression, I haven't actually tested that bit.
Public Function GetListPublishTransactions( Optional ByVal rowFilter As TDS.ListRowFilter ) As String
The method GetListPublishTransactions accepts the following conditions as part of the filter:
It's not possible to have conditions that are used more than once.
You might have to make more than one call to the TOM API to achieve the results you require?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With