如何明确告诉用户等待脚本在Spotfire中完成

时间:2018-06-25 02:56:58

标签: ironpython spotfire


我需要一些建议来完成该线程标题上的操作;让我详细说明一下,我有一个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)

1 个答案:

答案 0 :(得分:0)

请看一下此示例,以便在脚本执行时添加进度条-

here