JSL:如何将红色热按钮选项添加到大纲框中? 或者你可以吗?大家好,
我有兴趣了解如何(如果可能)将红色热按钮菜单添加到您自己定义的大纲框中。 例如,在图形生成器平台上,有一个热门按钮,允许执行“将脚本保存到数据表”和其他选项等操作。

我编写了其他脚本,希望有此选项。 大纲框带有一些选项的灰色小三角形,但它不提供红色热按钮选项。 例如:

我搜索了脚本索引和脚本指南,但找不到任何相关文档。
有谁知道这是否可能? 如果是这样,怎么办?
谢谢!,
DS
自动化和脚本编写大规模定制分享和交流结果视窗回复:JSL:如何将红色热按钮选项添加到大纲框? 或者你可以吗?您是否正在寻找<<设置菜单脚本? 脚本索引示例
Names Default To Here(1);
New Window("Example",
fontobj = ob = Outline Box("Outline Box",
V List Box(
ob2 = Outline Box("Outline Box 2",
H List Box(
Text Edit Box("Top Left"),
Text Edit Box("Top Right")
)
),
ob3 = Outline Box("Outline Box 3",
H List Box(
Text Edit Box("Bottom Left"),
Text Edit Box("Bottom Right")
)
)
)
)
);
ob << Set Menu Script(
{"A", Print("A"), "B", Print("B"), "B1", Print("B1"), "B2",
Print("B2"), "B3", Print("B3"), "C", Print("C")}
);
ob << Set Submenu(2, 3);

JMP 帮助中也有与此相关的内容,但由于 JMP 帮助页面的搜索非常糟糕,因此很难找到( https://www.jmp.com/support/help/en/17.2/#page/jmp/construct-display-boxes-for-new-windows.shtml#ww883930 )

回复:JSL:如何将红色热按钮选项添加到大纲框? 或者你可以吗?教程视频:
JMP 脚本语言简介第 5.3 章@ 10:30分钟
回复:JSL:如何将红色热按钮选项添加到大纲框? 或者你可以吗?你好@jthi和@hogi ,
感谢您提供有关从哪里开始此过程的信息,这非常有帮助。 而且,目前这实际上只是部分解决方案。
我已经能够添加菜单脚本 - 现在,我只添加两件事:本地数据过滤器和保存脚本(3 个选项):数据表、脚本窗口和日志。
现在,我的本地数据过滤器和保存脚本到日志工作得很好。 我遇到的困难是将保存脚本保存到数据表并将脚本保存到脚本窗口功能正常工作。 下面是激活菜单脚本的代码部分,然后为每个选定的菜单项分配操作。
mob << Set Menu Script(
{"Local Data Filter", ts << Local Data Filter ; gb << Local Data Filter, "Save Script", "", "To Data Table", nwin <<
Save Script to Data Table( "Correlation Analysis of " || ycols[1] || " vs. " || xcols[1], <<PROMTP></PROMTP>我的自定义报告窗口看起来像这样:

我希望有一个选项,用户可以选择将脚本保存到数据表(或脚本窗口),它基本上保存用于生成此自定义报告的脚本,以便可以将此分析保存到数据表中,并且有人可以单击脚本旁边的绿色脚本箭头并重新运行分析,而无需重新运行整个加载项。
通过阅读脚本索引中的相关内容,似乎只有平台报告(例如图形生成器或时间序列)之类的对象可以单独保存到数据表中,但整个大纲框对象(即我的报告窗口)却不能保存到数据表中。 t 接受那种发送(<<)命令。 我不想单独保存每个平台对象,而是在使用它对数据表/脚本窗口进行分析后保存整个脚本代码。
我不确定到底为什么,但也许是因为我的代码结构不同,因为我使用了多个 Expr 语句。 作为一个粗略的想法,我的代码结构如下:
Names Default To Here( 1 );
//any variable definitions
var1 = .;
var2 = .;//etc
//Expression to recall roles
RecallRoles = Expr(
//inside is the code to recall roles
);
//Expression to clear roles
ClearRoles = Expr(
//similar code to clear roles
);
//User interface window
ValueDlg = Expr(
nwin = New Window(
// opens a new window with the main outline box and subpanels
//and action buttons
mob = Outline Box(
//this is the main outline box that contains the subpanels and
//time series and graph builder platforms
//it also contains the action buttons that perform certain tasks
)
);
mob << Set Menu Script(
//this is where I'm trying to save the evaluated script to the data
//table so a usercan just cick it, and the script will execute with
//the variables already evaluated and not have to cast columns into
//roles, etc.
);
);
ValueDlg;//this calls the ValueDlg Expr and evaluates it.
如果你们中的任何一个人对我如何做到这一点有任何想法或想法(我希望我的解释有意义),我很感激任何对此的反馈。
谢谢!,
DS
回复:JSL:如何将红色热按钮选项添加到大纲框? 或者你可以吗?添加数据过滤器并将报告的保存脚本保存到数据表 - 如果您使用视窗电脑,您可以考虑使用报告工具栏:

回复:JSL:如何将红色热按钮选项添加到大纲框? 或者你可以吗?向大纲框询问脚本只会返回类似显示树的内容。
所以,这也是行不通的。
生成报告时,您拥有用于生成报告的完整表达式。
因此,当用户单击“保存脚本”时,您可以使用此表达式并将其另存为脚本。
[那么用户之后所做的更改将不会被保存]
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = dt << Graph Builder(
Size( 437, 413 ),
Graph Spacing( 4 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
New Window( "test",
ob = Outline Box( "test",
V List Box( Text Box( "hello" ), gb = dt << Graph Builder( Variables( X( :height ), Y( :weight ), Overlay( :sex ) ) ) )
)
);
ob << get script(); // Display Tree
ob << get scriptable Object (); // Empty
回复:JSL:如何将红色热按钮选项添加到大纲框? 或者你可以吗?保存创建自定义窗口的脚本通常非常困难,因为您必须基本上在该脚本中包含整个加载项,并应用用户选择(然后它与用户基本上重新运行加载项相同)在)。 对于这样的事情,我至少有几种不同的解决方案(我不会尝试保存整个窗口,因为我的加载项通常太复杂):
- 将某种设置变量保存到数据表中,然后用户可以将其加载到您的加载项中以“重新填充”它
- 不要保存整个脚本,而是保存某种“仪表板”类型的解决方案,功能不多
- 仅将一些简单的部分保存为表脚本
- 也许还有一些我现在不记得了......
回复:JSL:如何将红色热按钮选项添加到大纲框? 或者你可以吗?我认为最好的想法不是手动生成报告 - 而是通过仪表板生成器。
在生成的仪表板中,有一个红色三角形菜单,其中包含保存(仪表板)脚本的选项
...从 Jmp17 开始,甚至可以选择保存简化版本,它看起来像手动生成的脚本:

回复:JSL:如何将红色热按钮选项添加到大纲框? 或者你可以吗?添加到建议中@jthi ,您可以创建一个在加载项中调用的函数,然后您的保存脚本只是函数调用。 需要一些管理来确保该函数设计良好并处理您需要的选项,但如果您正在构建一个对话框来启动加载项,那么您可能已经定义了许多参数。
回复:JSL:如何将红色热按钮选项添加到大纲框? 或者你可以吗?你好@jthi , @hogi , 和@杰夫·珀金森,
我感谢您的反馈、想法和讨论。 嗯,看来事情可能比我想象的要棘手。 这并不是说它不可行,但它不会像将菜单脚本添加到大纲框中那么“简单”。 我可能需要仔细思考这里的一些想法。
@hogi ,我确实尝试了“将脚本保存到窗口”以及“将所有对象的脚本保存到数据表”,但这些都没有按照我的预期工作。
如果我确实找到了我想要的解决方案,我一定会更新这篇文章,说明我是如何解决它的,以防其他人遇到这个问题并感兴趣。
感谢大家!,
DS
回复:JSL:如何将红色热按钮选项添加到大纲框? 或者你可以吗?应用程序/仪表板生成器非常有用 - 值得尝试:)
使用 JMP® 构建仪表板和应用程序 (US 2018 408)
YouTube 视频 (Jmp 10)
https://www.youtube.com/watch?v=XyiQqUELc2A
这是一个更长的视频,包含很多细节:
您为什么还没有使用 App Builder? - (2023-US-30MP-1401)
简洁版本:
使用 App 生成器创建参数化应用程序
回复:JSL:如何将红色热按钮选项添加到大纲框? 或者你可以吗?基本上,您应该从一开始就设计它,以使其“轻松”可行。
这是我的一个示例,从这个意义上说,该加载项相当简单,它只包含图形生成器(和分区/引导林)。

但试图保存构建的脚本将是一场噩梦。 有许多隐藏的东西无法通过 JMP 的获取脚本或将脚本保存到数据表(或任何方法)捕获,并且该插件分为 10 多个不同的 .jsl 文件。 即使我能够将 UI 保存到数据表中,当用户重新运行脚本时,由于我对命名空间的严格管理(例如,UI 无法访问所有不同的功能),它也无法工作。因此,在这种情况下,我只为用户提供一个选项来保存列选择和顺序(他们可以保存多个)。然后,当他们打开相同的表并重新运行插件时,他们可以加载不同的输入。

我很可能会重构这个加载项以这样的方式工作,我可以将(大部分)保存到表脚本或脚本窗口,但我必须从头开始重写它。
其他加载项(我无法显示其图片)我有它根据用户输入查询数据,执行一些计算,然后使用几个图形生成器和一些额外的列切换器/数据过滤器显示结果,确实保存了“平台”/查询和计算完成后立即向数据表显示 UI/可视化。 然后我运行该表脚本向用户显示结果。 这是相当简单的插件,所以我可以很容易地使用一些表达式来完成此操作(我的初始版本没有保存可视化,但这是用户的请求,所以我确实实现了它)。
我目前正在研究的第三个(再次无法展示)也做了类似的事情。 它根据用户输入获取数据,对其进行计算,显示分析结果并将其可视化。 再说一遍,我无法将整个 UI 保存到数据表中,因为我为用户提供的所有选项都太麻烦了,但我将添加一个按钮,该按钮基本上是“弹出仪表板”,然后它只会创建仪表板用户界面的某些部分以及在这个“弹出仪表板”中,我可以添加一些额外的功能,因为我会从一开始就为它设计。 然后可以将这个弹出仪表板保存(希望)到数据表中。
编辑:我也很少在我的脚本中添加调用按钮,因为它也可能很麻烦并且需要很长时间才能正常工作。 我知道有一个脚本可以帮助解决此问题,但它无法(总是)足够好地执行任务以供我使用。 如果用户开始请求调用我编写的大多数工具的按钮,我可能会考虑编写希望在大多数情况下都能工作的脚本。
回复:JSL:如何将红色热按钮选项添加到大纲框? 或者你可以吗?通过应用程序生成器生成的 GUI,这一切都非常简单 - 您可以在 GUI 上工作,对其进行优化并将完整功能的最新版本保存为新的表脚本。 注意到隐含的“最好不要使用应用程序生成器来执行此操作” - 是否存在无法通过应用程序生成器实现的功能?
我注意到一个缺点:
对于不只是平台对象的简单集合的仪表板,必须添加一些 JSL 代码来自动化 GUI。
调试此 JSL 代码感觉比在 JSL 编辑器中复杂得多。
也许我只是不知道怎样做才是正确的。
Application Builder 用户是否对如何调试部分代码有任何建议,例如从 Application Builder 启动应用程序并在 JSL 编辑器中并行运行代码片段以检查它们的作用? 是否有一个框架如何访问应用程序的名称空间,以便我可以在 JSL 编辑器中使用代码片段而不进行任何更改?