点火盒中的铁蟒蛇脚本在spotfire中过滤

时间:2016-09-20 10:44:28

标签: ironpython tibco spotfire

我有一个如下的脚本 -

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行和最后两行中使用的函数的问题。是否有用于列表框过滤器的等效函数?

1 个答案:

答案 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}}

首先显示过滤器列名称,然后显示字符串列表中的选定值。你可以相应地调整它。