各位,
(JMP Pro 16.1.0, Win10)
我有一个与我以前的帖子有关的问题这里,如果你对一些“背景故事”感兴趣。
我现在遇到的主要问题是 Throw() 命令没有按预期工作。 在我的代码中(完整代码见末尾),我在几个地方进行了测试,看看当前是否有一个打开的图形生成器报告,看起来像这样,它包含在 Expr() 语句中:
If( Is Empty( Current Report() ) == 1,
Throw( "No Graph Builder Window is Open" )
);
问题是,每当我运行代码(就像从工具栏热按钮运行它一样)时,它似乎会跳过这些行并忽略如果没有打开报告。 但是,当我“逐行”运行代码时,它会正确捕捉到没有打开的报告并通知用户。
我正在尝试编写代码以分发给整个组织的用户,并尝试使其足够健壮以处理不同类型的情况,例如,如果用户打开一个或多个数据表和/或打开一个或多个项目(其中可以包含多个数据表)。
这是代码的概念(问题出现在第 6 项):用户正在 Graph Builder 中创建图形,然后想要对图形进行例行修改(有关详细信息,请参见上面的链接),然后用户单击工具栏执行上述操作的热键。
- 代码运行 Graphic_Expr 表达式以确定图形的位置——它是在“独立”数据表中还是在项目中(只能选择一个选项)。 ->(转到)
- 根据选中的复选框,代码然后运行 dt_win_Expr 或 prj_win_Expr 代码(现在,我只在测试代码时为数据表选项设置了它,但理想情况下最终的功能应该或多或少相同) . ->(转到)
- 如果是独立的数据表,则运行 dt_win_Expr 并创建一个窗口供用户选择他们要编辑的图形所在的数据表。 回想一下,用户可以打开多个数据表,并可能打开多个 Graph Builder。 | (或者)
- 同样,如果用户选择一个项目,它将运行 prj_win_Expr(尚未完成)以让用户选择哪个项目(如果打开多个)以及该项目中的后续数据表。 ->(转到)
- 一旦选择了数据表,无论是独立的还是在项目中,代码都会运行 SquarifyWin_Expr 表达式。 它在这里做的第一件事是测试是否确实存在当前报告 - 上面的 If() 代码(我可能需要修改和测试当前报告是否是 Graph Builder)。 **这是代码无法按预期运行的地方。 即使没有打开 Graph Builder,它也会在应该引发警告时继续执行其余代码。** 如果一切正常....->(转到)
- 然后,根据像素尺寸和是否平方化,代码运行 RprtUpdate_Expr 表达式,将所需的更新发送到 Graph Builder 报告。
我希望这个描述是有意义的,并有助于将我想要的编程路径/功能放在上下文中。
非常感谢您在寻找解决方案方面的任何帮助。 最后是完整的 JSL 代码。
谢谢!,
DS
Names Default To Here( 1 );
Clear Symbols();
RprtUpdate_Expr = Expr(
gb = Current Report()[Outline Box( 1 )] << Get Scriptable Object;
Report( gb )[framebox( 1 )] << FrameSize( widthN, heightN );
theMax = Max( Report( gb )[axisbox( 1 )] << get max, Report( gb )[axisbox( 2 )] << get max );
theMin = Min( Report( gb )[axisbox( 1 )] << get min, Report( gb )[axisbox( 2 )] << get min );
Report( gb )[framebox( 1 )] << Xaxis( Min( theMin ), Max( theMax ) );
Report( gb )[framebox( 1 )] << Yaxis( Min( theMin ), Max( theMax ) );
Report( gb )[framebox( 1 )] << AddGraphicsScript(
xmin = X Origin();
xmax = X Origin() + X Range();
ymin = Y Origin();
ymax = Y Origin() + Y Range();
Pen Color( "blue" );
Pen Size( 1 );
Line Style( "solid" );
Line( {xmin, ymin}, {xmax, ymax} );
);
);
SquarifyWin_Expr = Expr(
If( Is Empty( Current Report() ) == 1,
Throw( "No Graph Builder Window is Open" )
);
nwin = New Window( "Enter Size of Desired Graph",
<<RETURN result=""></RETURN>