2012-04-15 1 views
6

小さな問題が残っています。Tridion 2009 - Interopsを使用する - 同じ名前の複数のsetConditionsを追加する可能性はありますか?

PublicationTの名前に複数のsetConditionsを追加したいとします。これはinterops dllを使用しています。このPublicationTargetのために

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

、私は&ライブターゲットをステージングでフィルタリングしたいと私はすべての方法が、ありません使用することを試みました。

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に条件を設定する場合は、1つだけPublicationTargetにする必要があります。

  1. は2 RowFiltersを作成し、それらのそれぞれに異なるPublicationTarget条件を設定します。

    は、しかし2つの回避策があります。次に、クエリを2回発行します(各フィルタにつき1回)。つまり、2つのXML結果ノードを処理する必要があります。

  2. GetListPublishTransactions()を実行するときには、PublicationTargetの条件を使用しないでください。すべてのレコードが含まれているXML要素が返されますPublicationTargets。あなたのコードでは、関心のあるものだけをフィルタリングします(ステージングまたはライブなど)。

(私はキューが潜在的に、私は#1を使用した場合には、レコードの非常に大きな数を、返すことができパブリッシュ知っている限り)私はおそらく#2を使用します。 #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

ありがとうMihai。現在私はあなたの提案「#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、成功6、5失敗)(項目のみを返す)だけがこの日付
  • ユーザー(文字列の前にアイテムを返す)
  • 開始日(dateTime型)のみ、この日
  • 終了日(dateTimeの後にアイテムを返す)すべてのために省略しますユーザーのために
  • 公報(文字列)だけが、この出版物のためにアイテムを返す
  • PublicationTarget(文字列)のみが複数回使用されている条件を持ってすることはできません

この出版ターゲットの項目を返します。

必要な結果を得るには、TOM APIを複数回呼び出す必要がありますか?

+0

いいえ** 'GetListPublishTransactions'を使用しています** –

+0

もう一度呼び出すのではなく、「ステージングターゲットID」と「ライブターゲットID」を「PublicationTarget」に渡す表現方法はありません –

+0

私は私の答えに更新しましたGetListPublishTransactionsを使用しているという事実を反映します。 MihaiはあなたにはPublicationTargetが1つしかないことを確認しており、あなたにも解決策を提供しています。 –

関連する問題