通用化 App Builder 参数化应用程序
当列的数量和类型不变时,参数化应用程序可以很好地工作。将 App Builder 与许多 JMP 平台一起使用要求用于初始构建报告的列的数量和类型与用于未来分析的列之间存在一一对应的关系。在许多情况下,这限制太多。
为了避免这个问题,可以概括应用程序,以便在适用的情况下可以使用任何数量或类型的列。最大的缺点是用于用户输入的内置对话框不再可用。幸运的是,App Builder 可以轻松创建和使用对话框来启动报告窗口。
原料:
示例数据表 –汽车 1993、城市
难度——困难
视频长度– 8:04
脚步
- 打开在构建参数化应用程序配方中创建的应用程序。 Cars 1993示例数据表将随之打开,因为它用于创建配方。
- 由于我们不会使用参数化方法,因此我们必须为用户输入构建自己的对话框。首先添加一个新的Module 。
- 在“属性”面板中,将Module重命名为Dialog 。
- 将报告类型更改为Dialog 。这会隐藏对话框窗口顶部的菜单。
- 在“源”面板中的“输入轮廓”下,将“过滤器列选择器”拖到工作区中。将变量名称更改为clbAll 。
- 添加一个排队框。
- 将两个列列表框和两个按钮框拖到队列中,并将它们两两排列,每行都有一个按钮,后面跟着一个列列表框。阵容内的蓝色轮廓显示对象的位置。您还可以将对象放入放置区域(如果存在)。必须在当前应用程序中打开数据表,过滤器列选择器和列列表框才可用。

- 将第一个按钮变量名称属性更改为btnY并将标题更改为Add Y 。
- 将另一个按钮的Name和Title属性分别更改为btnX和Add X。
- 将第一个列表框的变量名称设置为clbY 。
- 取消选中“建模类型”中除“连续”之外的所有项目,以便只能添加连续列。
- 将最小项目更改为1 。框中的提示从可选变为必需。
- 将Max Items设置为1 ,限制可以放入盒子内的物品数量。
- 最后,将N Lines更改为2 。这将改变盒子的高度。
- 将第二个列列表的变量名称设置为clbX并将N Lines更改为8 。
- 在Lineup周围添加一个V 列表框。
- 将新的按钮框拖到V 列表中,使其显示在底部。将新按钮的名称更改为btnRemove ,并将标题更改为“删除所选内容” 。
- 在按钮周围添加一个H 中心框。
- 选择过滤器列选择器和围绕其他元素的V 列表框。右键单击并添加一个H 列表框。右键单击最外面的框并选择“移动到角” 。
- 添加两个标题为Run和Cancel 的按钮,分别将其变量重命名为btnRun和btnCancel 。
- 将它们放置在H 列表框中,然后放置在H 中心框中。
- 选择包含其他对象的H 中心框和H 列表框,并将它们添加到V 列表框。

现在我们已经构建了对话框,让我们向按钮添加功能。
- 选择取消按钮。滚动到“属性”面板的底部。最后一个属性Press与按钮脚本关联。可以将脚本直接添加到右侧的输入框中,或者,如果需要更多空间,单击三点按钮将打开一个具有更多空间的窗口。这是可以放置对象脚本的两个位置之一。
- Use the following code for the button:
(thisModuleInstance << Get Box) << Close Window;
需要thisModuleInstance命名空间引用才能使“取消”按钮正常工作。每个模块都会创建自己的同名命名空间引用。由于它们的作用域不会扩展到与其关联的模块之外,因此它们可以具有相同的名称。在使用多个模块时认识到这一点很重要。 Get Box消息用于获取对对话框窗口的引用,而Close Window 消息则用于关闭它。
- 选择添加 Y按钮。右键单击并选择底部的脚本 > Press 。这将为脚本创建一个默认名称,将其添加到“运行”按钮的“Press”属性中,并在“脚本”选项卡中添加一个脚本外壳,这是脚本可以定位的第二个位置。 “属性”面板中的脚本名称必须与“脚本”选项卡中的脚本名称相同才能正常工作。
- 对“添加 X”和“删除所选”按钮重复此操作。
- 转到脚本选项卡。删除已添加到脚本中的默认注释和代码。参数thisBox是对与脚本关联的对象的引用。所有 App Builder 脚本属性都使用thisBox作为其第一个参数。它是可选的,如果不使用并且不需要其他参数,则可以将其删除。
- For the Add Y button script, add the following line:
clbY << Append(clbAll << Get Selected)
这将导致在过滤列选择器中选择的内容被添加到 Y 列表框中。
- 为“添加 X”按钮添加相同的脚本,将clbY替换为clbX 。
- Use the following two lines for the Remove Selected button:
clbY << Remove Selected;
clbX << Remove Selected;
- Add a script for the Run button. Use the following code:
If(N Items(clbY << Get Items) > 0 & N Items(clbX << Get Items) > 0,
(thisModuleInstance << Get Box) << Close Window;
thisApplication:Report << Create Instance(clbY << Get Items,clbX << Get Items);
)
If语句检查 X 列和 Y 列列表框中是否至少有一项。如果满足此条件,第 2 行将关闭对话框窗口,第 3 行将启动报告模块。 thisApplication是应用程序使用的命名空间,其范围包括在其中创建的所有对象和变量。在本例中,它用于引用报告模块并且它是可选的。创建实例是用于启动模块的消息。它的参数被传递给已启动模块的OnModuleLoad函数。我们将传递用户在其中选择分析列的列表框的内容。
- 选择模块并将其重命名为Report 。取消选中右下角的自动启动,以防止其在应用程序启动时启动。
- 删除报告中当前的三个报告。在用户选择分析列后,我们将使用 JSL 在运行时构建它们。
- 将选项卡页框重命名为tpbDistribution 、 tpbFitYbyX和tpbScatter 。
- To finish building the application, navigate to the Report section of the Scripts tab. It can be found by selecting the Scripts tab and choosing Report using the combo box at the top. We used Create Instance in the Dialog module script to launch the report and pass it the analysis columns. A module receives any arguments in its OnModuleLoad function. This happens before any of the report visuals are rendered. The following code will receive the passed variables and assign them variables local to the module (i.e., in the thisModuleInstance namespace for report).
OnModuleLoad({yCols,xCols},
allCols = Insert(yCols,xCols);
yVars = yCols;
xVars = xCols;
);
变量allCols组合了散点图平台的 X 和 Y 变量。
- The 附加 function will be used to add the platforms to the appropriate Tab Page Boxes.
tpbDistribution << Append();
tpbFitYbyX << Append( );
tpbScatter << Append()
- Working from the saved scripts from the Parameterized Application recipe, copy and paste the Scatterplot Matrix code into the 附加 function for tpbScatter. Delete the list of hard coded column names and replace them with 评估(所有列).
tpbScatter << Append(
Scatterplot Matrix(
Y( Eval(allCols) ),
)
)
- We will use an alternative form for the 分配 platform:
tpbDistribution << Append(
Distribution(
Y(Eval(allCols))
)
);
这种方法的优点是不需要指定输入列的建模类型,从而使代码更加简单。
- We will also use an alternative for 用 X 拟合 Y
tpbFitYbyX << Append(
Fit Y by X(
Y( Eval(yVars)),
X( Eval(xVars) )
) << Fit Line << ANOVA;
);
除了不必更改不同建模类型的平台调用之外,还可以使用拟合线和方差分析消息,使代码更加紧凑。
您可以使用Cities示例数据表测试应用程序。虽然您仅限于单个响应列,但 X 列的数量和建模类型不受限制。
自动化和脚本编写甜点