我需要一些建议来完成该线程标题上的操作;让我详细说明一下,我有一个Spotfire分析,其中要使用的数据由一系列级联的下拉菜单控制,每个下拉菜单都链接到文档属性。
它的工作方式是用户在第一个下拉菜单中选择一个值,然后在后台运行一个脚本,该脚本会自动限制可用于以下下拉菜单的选项。在第二个和第三个下拉选择器中重复此行为。
这按预期工作。但是,我的问题是,当这些文档属性更改时,在后台会发生大量操作,例如重新计算sevreal相当大的表合并,重新计算分析后的其他几个表上的许多列等。
所有这些都需要花费很长时间才能执行,而且问题在于,在执行这些操作时,用户最终会看到无响应的屏幕。
我需要的是一种向用户指示分析未挂起的方法,他们只需要等待后台操作完成,然后再在下一个下拉菜单上进行选择即可。
我尝试了一些简单的操作,例如创建一个文档属性,该属性会在单击下拉脚本后立即分配一个值,然后在脚本末尾重置该属性,并使用该属性值指示脚本已经完成或尚未完成,但是这种方法不起作用。
# Copyright © 2017. TIBCO Software Inc. Licensed under TIBCO BSD-style license.
#
# Updates a dependent control, setting the value of the
# dependent property according to the first valid value
# for that property.
#
# This script should be configured to run when the independent
# control is changed
#
# Andrew Berridge, TIBCO Spotfire, July 2014, Revised September 2016
from Spotfire.Dxp.Data import *
#Updates one or more dependent property based on the selection made in another drop-down control
independentPropertyValue = Document.Properties[independentPropertyName]
Document.Properties["readyToDisplay"] = "No"
i = 0
for dependentPropertyName in dependentPropertyNames.Split(","):
dependentPropertyName = dependentPropertyName.Trim()
dependentValuesDataTableName = dependentValuesDataTableNames.Split(",")[i].Trim()
dependentValuesDataTable = Document.Data.Tables[dependentValuesDataTableName]
dependentPropertyName = dependentPropertyNames.Split(",")[i].Trim()
dependentPropertyValue = Document.Properties[dependentPropertyName]
dependentValuesColumnName = dependentValuesColumnNames.Split(",")[i].Trim()
dependentValuesColumnCursor = DataValueCursor.CreateFormatted(dependentValuesDataTable.Columns[dependentValuesColumnName])
independentValuesCursor = DataValueCursor.CreateFormatted(dependentValuesDataTable.Columns[independentValuesColumnName])
firstValidValue = ""
for row in dependentValuesDataTable.GetRows(dependentValuesColumnCursor, independentValuesCursor):
independentValue = independentValuesCursor.CurrentValue
val = dependentValuesColumnCursor.CurrentValue
if independentValue == independentPropertyValue and val != "(Empty)" :
if firstValidValue == "" :
firstValidValue = val
break
print "Setting value of dependent property " + dependentPropertyName + " to: " + firstValidValue
Document.Properties[dependentPropertyName] = firstValidValue
i += 1
Document.Properties["readyToDisplay"] = "Yes"
#print "readyToDisplay is " + Document.Properties["readyToDisplay"]
关于如何解决此问题的任何想法?
简而言之,我只需要一种方法,即可在下拉菜单选择器中的任何一个进行选择后,向用户指示“东西”正在后台发生,并在系统为它们准备就绪时通知他们进行以下选择,依此类推。
谢谢
马里奥·雷耶斯(Mario Reyes)