JSL 4.0使用脚本编写者俱乐部平台来讨论 JSL 的新功能和未来改进是否合理?其目的是为了整理想法、告知用户新功能并宣传未来的改进方案。
变革者:
实用/有趣的新功能:
锦上添花:
回复:JSL 4.0我不知道多个用户是否可以对主帖中的列表拥有写入权限?
JMP19 中您最喜欢哪些改进?
还缺少什么?
哪些方法可以被视为“颠覆性创新”?
回复:JSL 4.0嗨 Hogi,JMP 官方有没有提供关于 JMP19 新 JSL 特性的概要介绍?我还没看过任何文档,目前还在摸索阶段,测试 19.0.01 版本与我之前的版本(17.2 和 18.2)的对比。
在插件构建器中:
过去十多年里,我开发了几个插件工具栏,它们大多使用自定义图标(jpg 等),这些图标存储在网络驱动器上。由于我的代码和设置方式,每次打开 JMP 窗口时,JMP 都需要加载所有这些图标,因为 JMP 需要显示这些工具栏。等我意识到问题所在时(当时脚本数量已经达到 40 个左右),打开一个 JMP 窗口可能需要几秒钟的时间。这个问题逐渐出现,是因为在第一年之后,我只是偶尔添加一些新脚本。
现在,JMP19 新增了一个插件构建器,它会自动将 JSL 和图标文件包含在插件中。因此,当用户安装插件时,JSL 和图标图像会被复制到本地主文件夹。但我已经设置好,JMP 用户(使用 19 及更高版本)可以在 JMP 检测到服务器 .jmpaddin 文件更新时自动检测到插件已更新,并在重启 JMP 时收到更新提示。这个过程与我之前的方法略有不同,但它恰好解决了我的问题……我最近几个月才找到问题的根本原因。所以这对我很有帮助,但我怀疑我的情况比较特殊。不过在这个论坛里可能不算罕见。感谢 JMP 支持团队和开发人员的帮助。
谢谢,
麦克风
回复:JSL 4.0据我所知,目前还没有发布说明(“包含所有详细信息”)。
简要概述: JMP 新功能和发行说明
以及此页面,其中包含有关安全更新的信息: https://www.jmp.com/en/company/trust-center
因此,我认为在这里提供一个简要概述会很有帮助。
欢迎提出任何意见和提供其他功能的链接。
回复:JSL 4.0插件 -
除了 JMP 中包含的标准“插件生成器”之外,还可以(应该!!!)使用
插件管理器@Justin_Chilton -> 现在可通过 Marketplace 获取: 插件管理器
https://community.jmp.com/t5/Learn-JMP-Events/Scripters-Club-Managing-Your-JMP-Add-Ins-with-Justin-Chilton/ev-p/887937

JMP19 新增功能:JMP 中直接包含更新检查。
在之前的版本中,可以通过 UpdateCheck.jsl(来自插件管理器)设置类似的功能。
有人比较过这两种方法的速度吗?
例如,对于 40 个插件更新检查,是通过 UpdateCheck 还是通过新功能进行检查?
新函数是比较文件日期还是比较文件内容?
顺便说一句: @mikedriscoll
这是一个很有趣的想法,和您之前的想法非常相似:
企业加载项管理策略 (2025-US-30MP-2576) @MikeD_Anderson
所提出概念的重要区别在于:
包含“当前”版本脚本(和图标?)的文件夹存储在 OneDrive/Sharepoint 上,可通过同步文件夹在本地系统上访问。
回复:JSL 4.0我根据 Justin 最初提供的更新功能编写了自己的更新脚本,但还没有与 19 版中的新方法进行对比测试。不过,JMP 的方法可能会更快,因为它会查找源文件夹中的更新文件,而 Justin 的方法(至少我使用的方法)可能会因为元数据主文件的位置而有所延迟。就我几次在 JMP 19 中收到更新插件的提示来看,它的速度感觉和我自己实现的差不多。
由于 19 版本中的新方法似乎基本上是在某个位置查找新文件,而不再与任何构建日期元数据关联,虽然我总体上喜欢这种方法,但它无法真正控制“源文件夹”的定义……例如,如果我从下载文件夹拖入一个插件,它询问我是否要检查更新,它会将下载文件夹列为要检查的源。此外,它无法区分插件的生产版本和测试版本,如果用户检查更新时使用的是从其他位置安装的测试版本,那么“源”文件夹可能不正确。
我已在此请求允许我们对这些内容进行编纂(主要是为了这个帖子,因为我们之前曾简要讨论过另一个愿望清单项目)。
回复:JSL 4.0@nathan-clark就我目前使用 JMP19 的插件构建器来看,情况并非如此。很遗憾,我现在没有时间详细记录我的经验,但我会简要概述一下。不过我并非专家。我的目标是使用 JMP19 的方法,在不同的区域完全复刻我之前的共享驱动器版本。
使用“文件”->“新建”->“加载项”创建加载项。
通过添加脚本/图标来设置插件。我的脚本/图标都放在共享驱动器上。
让它自动更新文件(在“包含文件”选项卡中),并在 JMP 启动时检查更新(在“常规”选项卡中)。
另存为以在易于访问的位置创建一个新的 .jmpaddin 文件。将其保留在该位置,以便其他人可以从该位置安装。
其他 JMP 用户将从该位置安装,并且他们的 JMP 版本将检查该位置以检测更改。
当您想要编辑任何文件时,请打开插件构建器/jmpaddin 文件,以便看到插件编辑器。然后对脚本进行编辑。之后,“保存”按钮应该会在插件构建器中显示。或者,您也可以使用“另存为”功能,将插件保存为相同的名称。如果您只是拖放更新后的脚本文件,或者编辑完jsl文件后关闭它,然后再打开插件构建器,则不会看到保存选项。这是一个已报告给开发者的错误。
使用旧版本 JMP 的用户需要重新安装 .jmpaddin 文件来更新插件。如果 JMP19 用户是从同一位置安装的插件,系统应该会提示他们更新。我不知道如果通过电子邮件发送 .jmpaddin 文件会发生什么……估计 JMP 之后就不知道在哪里检查更新了。
回复:JSL 4.0@mikedriscoll ,你说的有道理。可惜的是,这依赖于 JMP 的插件创建实现。我的插件数量太多了,而且现在所有插件都通过 GitHub 管理,这种方法无法扩展,所以我才请求在 addin.def 文件中明确具体细节。
我认为 JMP19 在插件管理方面取得了一些不错的进展,但从长远来看,还需要提供更多选项来应对不同用户/组织在插件管理方面所面临的规模挑战。我相信,如果 JMP 能进行一些更新,我就可以开始逐步淘汰我目前使用的一些插件更新基础架构了。
回复:JSL 4.0无论你喜不喜欢,令人遗憾的是,点击后的反应速度比之前的 18 版本稍慢。当然,这取决于电脑配置,但我认为反应速度的差异是显而易见的。
回复:JSL 4.0我还注意到,在 JMP 19 中,关于插件的一些事情可能会变得更加容易。
我最喜欢这种开发插件的方式:
- 在我的文档文件夹中一个已解压缩的文件夹中
- 要安装它,我用 JMP 打开 .def 文件。
- 我用文本编辑器编辑 .jmpcust 文件(这有点棘手,但对我来说效果很好,因为我只需要做很少的更改)。
- 菜单项指的是此文件夹中的脚本
- 我可以直接测试/编辑此文件夹中的脚本(我发现这是一个很大的优势,因为我发现通过菜单复制和更新 .jmpaddin 中的文件非常繁琐、不必要且容易出错)。
- 为了进行部署,我编写了一个小型 PowerShell 脚本,该脚本会将插件打包并移动到其他用户共享的位置(顺便说一句,它还会创建一个旧版本的副本,以便在出现问题时可以执行回滚)。
回复:JSL 4.0是的,我希望在脚本编写者俱乐部讨论未来的功能增强等问题,也就是说,这个话题可以作为讨论的一部分,但不应该是唯一的讨论主题。谢谢你的建议。
回复:JSL 4.0@hogi如果能像我在愿望清单里建议的那样改进错误处理,那将彻底改变游戏体验。至少在 17.1 版本中,错误处理机制并不统一,而且文档也不完善。目前(我认为 18.2 版本也是如此),`exception_msg()` 函数中似乎有两种不同的错误信息形式,而这些形式在脚本索引或其他任何文档中都没有记录。
错误信息应该与语言无关,以便在错误处理中进行检查;或者应该具有某种唯一的错误代码,以便在错误处理程序中进行检查。例如:
try (
<SOME action="https://community.jmp.com/">
,
<BR /> // we have to check for the exact message in all languages to handle a specific error:
<BR /> If (error_msg()[1] == "File not found" || error_msg()[1] == "Datei wurde nicht gefunden", // better would it be to have a language independent code // If (error_code() == 93 or better: ...== error_code["FileNotFound"] print("File not found: ");
<DO something="" because="" file="" was="" not="" found="">
, ... ); );
</DO>
</SOME>
Open 函数目前会返回一个包含附加参数的列表项,其中包含一条错误消息:
try(
open ("table");
,
Show(exception_msg());
//
// Returns in german language setting
// exception_msg() = {"Tabelle kann nicht geöffnet werden"(1, 2, "Open", Open /*###*/("table"))};
//
// Returns in english
// exception_msg() = {"Cannot open table"(1, 2, "Open", Open /*###*/("table"))};
);
这两个论点都没有任何文献记载,或者我还没有找到相关资料。
我认为最好能返回一个错误对象(类格式),其中包含有关错误的所有信息,例如:
try(
<ACTION>
<BR /> ,
<BR /> if (exception() << code == exception.FILENOTFOUND,
<BR /> Print( exception() << message );
<BR /> ...
</ACTION>
此外,还有 throw 函数,它虽然不错,但似乎不支持 exception_msg() 中使用的参数。如果能将任何参数值传递给错误处理例程就更好了。
try(
throw("Error"(1,2));
,
Show (exception_msg());
// Arguments to the thrown "Error" are lost.
);
综上所述,错误处理机制还有改进空间。如果错误处理机制能够得到改进,我将不胜感激。
回复:JSL 4.0链接: 改进并记录错误消息
谢谢,我已经把它添加为“很酷/很有帮助的新功能”——一旦它进入前 10 名,就会把它移到“游戏规则改变者”类别。
文档部分有综合脚本索引。
按照“十大”的思路,我把它从“很酷/很有帮助”提升到“改变游戏规则”。
更多候选人?
回复:JSL 4.0您多久使用一次列聚合?多久使用一次带有复杂如果()表达式的“受限”列聚合?
请查看“需要填写唯一条目数”部分
并投票: 列中位数(及其他):添加“位置”选项