我有一个如下的脚本 -
from Spotfire.Dxp.Application import Filters as filters
import Spotfire.Dxp.Application.Filters.ListBoxFilter
from Spotfire.Dxp.Application.Filters import FilterTypeIdentifiers
from Spotfire.Dxp.Data import *
from Spotfire.Dxp.Application.Filters import *
CurPanel = Document.ActivePageReference.FilterPanel
FilterA = CurPanel.TableGroups[1].GetFilter("column_name1")
CheckBoxesA = FilterA.FilterReference.As[filters.ListBoxFilter]()
FilterB = CurPanel.TableGroups[0].GetFilter("column_name2")
CheckBoxesB = FilterB.FilterReference.As[filters.CheckBoxFilter]()
print "success1"
for CheckBoxVal in CheckBoxesB.Values: CheckBoxesB.Uncheck(CheckBoxVal)
print "success2"
str = CheckBoxesA.ToString()
found, nodes = myTable.Columns ["column_name2"].Hierarchy.Levels.LeafLevel.TryGetNodes(int.MaxValue)
for node in nodes:
if str.Contains("All"): CheckBoxesB.check(node.Value.ValidValue)
if str.Contains(node.Value.ValidValue): CheckBoxesB.check(node.Value.ValidValue)
当我在第10行使用CheckBoxFilter时,这完全正常。但是对于超过100的值,spotfire会自动考虑列表框过滤器, 我应该修改第10行 -
CheckBoxesB = FilterB.FilterReference.As[filters.ListBoxFilter]()
然后我收到以下错误消息 -
success1回溯(最近一次调用最后一次):文件 " Spotfire.Dxp.Application.ScriptSupport",行未知,在 ExecuteForDebugging File"",第16行,in AttributeError:' ListBoxFilter'对象没有属性'值'
System.MissingMemberException:' ListBoxFilter'对象没有属性 '值' at stub $ 619 ## 619(Closure,CallSite,Object,CodeContext) 在Microsoft.Scripting.Actions.MatchCaller.Call2 [T0,T1,TRet](Func4 target,CallSite site,Object [] args) 在Microsoft.Scripting.Actions.CallSite1.UpdateAndExecute(Object [] args) 在Microsoft.Scripting.Actions.UpdateDelegates.Update2 [T,T0,T1,TRet](CallSite) site,T0 arg0,T1 arg1) $ 606 ## 606(关闭,范围,语言上下文) at Spotfire.Dxp.Application.ScriptSupport.IronPythonScriptEngine.ExecuteForDebugging(String scriptCode,Dictionary2 scope,Stream outputStream)
我理解uncheck和检查第12行和最后两行中使用的函数的问题。是否有用于列表框过滤器的等效函数?
答案 0 :(得分:2)
它看起来并不完全相同,但有几种方法可以做到这一点。
首先,有一个方法IsSelected,您可以确定是否选择了All,并相应地重置过滤器。
CurPanel.InteractiveSearchPattern = "status:m"
for filters in CurPanel.FiltersMatchingSearchPattern:
##Optional Table name to find column in specific table
#if str(filters.ParentGroup) == "Table_Name":
print filters.FilterReference.ToString()
您可以根据需要使用字符串列表设置值,如下所示: http://spotfired.blogspot.com/2014/03/change-filters-programatically-from.html
如果出于某种原因,您实际上需要获取从过滤器中选择的特定值,您可以通过添加此代码来查看它们:
{{1}}
首先显示过滤器列名称,然后显示字符串列表中的选定值。你可以相应地调整它。