2017-03-31 18 views
0

我發現了一個腳本,可讓用戶編寫高級過濾器;此腳本可以從每個視圖加載當前過濾器,但不能加載Filtering對話框中存在的所有過濾器。我希望能夠提取所有當前的高級過濾器,即使只是作爲字符串(因爲我有將這些字符串解析回Filter類對象的工具)。如果有人知道DXL函數來檢索該信息,或者存儲過濾器字符串的位置,我將非常感謝這些信息。 注意:沒有運氣在Rational論壇中追逐這一點。保存所有高級過濾器的DXL腳本

回答

0

這是我的黑客方法。基本上,有一些設置和操作線,以及中間的一些過濾器定義和組合。這確實將定義的過濾器保存爲當前視圖的一部分。

// copypaste next block into DXL edit window 
string viewName = "My_View" 
filtering off 
// individual items first 
Filter head = attribute "_ObjectType" == "Heading" 
Filter req = attribute "_ObjectType" == "requirement" 
Filter inrev = attribute "_ReqStatus" == "In Review" 
Filter ApprListBob = includes(attribute "_ApprovalList","BobJones") 
Filter ApprListMary = includes(attribute "_ApprovalList","MaryContrary") 
// now combine as desired. examples shown 
// Filter ftwo = ((head && !freq) || inrev) 

Filter foofilt = (head) || (req && inrev) //) && ApprListBob 
set foofilt 
filtering on 
// now write 
addFilter( foofilt) 
set(foofilt) 
refresh current  // module... 
save view viewName //last arg is viewname 
// end of copypaste block 

對於這些新的DXL語法,

& &爲AND ||對於OR !不適用

如果一個屬性只能取一個值,請使用attribute "atname" == "value" 表單。如果可能需要多個值(例如清單),請使用includes(attribute "atname", "value")表單。

+0

我不同意這是你自己問題的答案。恕我直言,這是一個非常不方便的解決方法,沒有任何用戶界面污染你的模塊與一堆的意見。 –

+0

@KaiK。首先,它不會**「污染...一堆視圖」 - 它使用**現有的**視圖名稱。接下來,這是一種解決方法,但它比通過內置GUI重建複雜的過濾器要快得多。如果你想要一個基於DXL的圖形用戶界面,可以讓你將整個過濾器寫成文本,我不會怪你 - 但我不確定這是否可能。 –

+0

我道歉,我的評論有點兒沒有檢查片段的每一行請原諒,無論如何,我不明白這是如何回答你的問題「如何從內置的過濾器對話框中獲取過濾器定義」,當然也可以存儲過濾器我認爲你的方法比(重新)編碼過濾器對話更容易和更快,但我確信它是可能的 –

0

我不認爲現有的API可以解決您的問題。一種方法是重新編碼過濾器對話框並添加額外的功能。例如。您可以將高級篩選器列表存儲在磁盤上,並從您想要的位置重新使用它們。

+0

就是這樣,我擔心。我採取了類似的方法:寫出每個原子過濾器的基於DXL的定義,然後編寫組合,並將整個混亂粘貼到「編輯DXL」窗口並執行。看到我的答案爲kludge。 –