脚本一直有效,直到它被加载项调用!<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />你好,
我有一个脚本,它从用户界面获取数据,在 JMP 中运行拟合并生成包含原始数据、一些计算数据和各种图表以及从 JMP 输出中选择的信息的报告。
从脚本运行时效果很好,即使加密后也是如此。
然而,一旦我将加密文件粘贴到一个只有这个脚本的简单插件中,一切正常,除了它不再显示我从 JMP 输出中提取的拟合方程。
我很困惑!
更令人费解的是,只要我在使用插件之前从脚本窗口运行一次脚本,JMP 就可以完美地从插件中运行。 就好像它现在记得要做什么一样!
脚本在这里得到等式:
nlr = nlModel << 报告;
pb = nlr[PictBox(1)];
modEq = pb << 获取图像;
然后使用以下方式显示它:
V 列表框(
Text Box("模型方程", << 设置字体大小 (12)),
图片框(modEq),
文本框(” ”),
知道为什么这个位在集成到插件后就停止工作了吗?
我附上了从脚本窗口运行的输出与从插件运行的输出的屏幕转储(在打开 JMP 后立即运行)
谢谢
回复:脚本一直有效,直到它被加载项调用!我怀疑保存公式的 PictBox 确实需要出现在屏幕上才能实际创建您要捕获的位图。最好在它可见时捕捉它。
您可以对数据表使用“隐藏”而不是“私有”。隐藏的表有一个隐藏的窗口。私人餐桌没有窗户。私有表需要在您仍有指向它们的变量时关闭(或者它们累积直到 JMP 关闭,耗尽内存)。隐藏的表不太容易丢失。
回复:脚本一直有效,直到它被加载项调用!为了能够运行我的验证测试,我不得不使用一种难看的解决方法:就在调用非线性 JMP 分析之前,我打开了一个空窗口,并在脚本结束时将其关闭。
有用。 我希望 show then hide log 也能正常工作。
我很想知道为什么要这样做!
回复:脚本一直有效,直到它被加载项调用!嗨克雷奇,
太... 我尝试使用 newimage 函数(我不知道的好函数)但仍然没有成功。
我尝试在报表平台提取时添加:
nlr = nlModel << 报告;
pb = nlr[PictBox(1)];
//modEq = pb << 获取图像;
//这里:modEq = pb << 获取图像;
modEq = pb << 获取图像;
modEq = NewImage(modEq);
我也在自己的报告窗口中尝试过:
V 列表框(
Text Box("模型方程", << 设置字体大小 (12)),
图片框(新图像(modEq)),
我在这两个地方都试过了!
有一点不同:背景 JMP 报告仍然显示一个十字,但我的报告什么也没有显示,甚至没有空白。
然而,回过头来看脚本,运行的越来越少,我意识到它实际上失败的地方在这里:
// 数据分析
win3 = New Window( "非线性模型报告",
nlModel = dt << 非线性(
Y( :姓名( "hGH" ) ),
X( :Name( "模型增长" ) ),
二阶导数法( 1 ),
牛顿,
结束,
置信限度,
显示预测表达式( 1 )
)
);
win3 被脚本关闭,取而代之的是我自己的报告窗口,其中包含科学家要求我提供的所有内容。 所以出于某种原因,如果 JMP 中除了主窗口之外没有打开任何窗口,显示预测方程指令将失败! 此线程中建议的所有技巧都与执行 NLR 后完成的操作有关,因此它们不会影响结果。
几个月前我在编写插件时从未发现此错误的原因是因为我打开了每日提示窗口。 它一定足以让插件工作:任何打开的 JMP 窗口似乎都可以解决问题。
对于背景:hGH 是响应,值由用户进一步输入,模型增长是使用难以捉摸的模型方程作为公式的列,它需要时间并模拟将与实际增长相匹配的“预期增长”。
所以问题是,当没有打开其他 jmp 窗口时,非线性函数不会在我的脚本中调用它的地方显示 pred 方程。
我之前创建了一个表:
dt = 新表("数据",
私人的,
添加行( 6 ),
新列(“时间”,数字,设置值(lstTimes)),
新列(“hGH”,数字,设置值(lsthGH))
);
我取消了私人指导,当然现在插件可以工作了。
但我使用 private 的原因是因为这是我的输出工作的唯一方式。 如果我尝试在最后关闭数据表,即使等待,也不会生成报告。
无论如何,这不是一个合适的解决方案,但如果有一种方法可以在生成报告时打开数据表,这样就不会出现故障,然后在脚本失败的情况下关闭数据表,我会接受的。
我想知道它是否适用于 JMP 13,它是否是一个错误,或者我编写脚本的方式是否真的存在错误......
回复:脚本一直有效,直到它被加载项调用!尝试这个:
图片框(新图片(模型均衡器))
我认为红色 X 表示图片框已连接到图像的原始数据并且该数据不再存在.通过克隆图像(使用 newImage),我认为 pict 框将拥有自己的私有副本。
您也许还可以省略图片框功能:
V 列表框(
Text Box("模型方程", << 设置字体大小 (12)),
modEq, // 我认为图像可以在没有 PictureBox 函数的情况下工作,但它可能仍然需要 newImage
文本框(” ”),
回复:脚本一直有效,直到它被加载项调用!你好,
我现在尝试了几种不同的场景。
笔记
- 插件和脚本都使用名称默认为此处子句(主要是为了防止人们同时将 JMP 用于其他用途)
- 我想从 JMP 报告导入到我的方程式是来自表中一列的自定义方程式,它使用要填充的公式,我打开了显示预测表达式( 1个)
- 在树结构中,这显示为 pictbox,因为 craige 说,因为 JMP 中的方程是图片而不是文本。 所以在我的新剧本中,我采纳了 Eric 的建议,现在
近红外线=模型<<报告;
铅=近红外线[图片框( 1个)] ;
模型均衡器=铅<<获取图像;
结核病=近红外线[表格框( 5个)] ;
表值=结核病<<制作成数据表;
- 它还会得到一个由几个位组成的图形,这些位聚集在一个图片框中:
bb =近红外线[图片框( 1个)] ;
阴谋= bb <<获取图片;
它在我自己的报告中显示那些没有任何问题的。
场景:
- 每次都从脚本工作
- 在脚本打开时从插件工作,即使它没有运行
- 如果插件被第二次调用并且报告没有关闭(没有显示方程的报告),则工作
- 第一次从插件调用时或报告窗口已关闭时的任何时候都不起作用
- 如果打开日志则有效
- 即使事先关闭了日志和报告窗口,也可以在日志打开后工作
- 只要打开任何 JMP 窗口(JMP 插件编辑窗口/任何数据表/脚本窗口)即可工作,但一旦关闭,它就不再工作
看起来我的插件需要一个朋友才能工作
从图片中可以看出,它显示了一个十字。 我还应该说,当脚本运行时,JMP 打开它自己的报告窗口和我编写脚本以运行非线性拟合的表。 那些在背景中打开和关闭,因为我想不出一种让它们完全不可见的方法。 发生这种情况时,我瞥见 JMP 分析报告也有一个十字而不是预测方程。
如果这是给我的,我不介意,但我必须验证它是否可以用于 cGMP,我不能很好地告诉人们每次运行两次以获得正确的格式!
我在这里不知所措...
还有什么想法吗?
回复:脚本一直有效,直到它被加载项调用!PictBox 和 PictureBox 是两个不同的框。在内部,JMP 使用 PictureBox 作为显示框树中的标记。该标记以多种方式使用,以帮助确定何时应将子框分组为一个块。平台通常围绕图形及其轴放置 PictureBox。这就是树中您经常想要“拍照”的点。
PictBox 是一个包含位图图片的框。
不幸的是,图片框()功能创建一个 PictBox。没有用于创建 PictureBox 的 JSL 函数,但平台会创建它们。
除非您要将图像添加到报告中,否则您可能找不到 PictBox。如果有图表,您可能会找到 PictureBox。
回复:脚本一直有效,直到它被加载项调用!您好 Hardner,非常感谢您的评论。
也感谢您提供故障排除提示。 几个月前,当我最初写这篇文章时,th 中的数字树结构不匹配,我最终不得不猜测。 我忘记了这件事。 这真的很奇怪:树结构会显示数字框 18,但要将其取出并显示在我的报告窗口中,我必须调用数字框 7,例如!!!
插件将始终执行相同的分析,因此在这方面没有问题。
回复:脚本一直有效,直到它被加载项调用!嗨,埃里克,感谢您的回答。
当我走开思考时,我也想起了范围问题,意识到那一定是个问题。
我尝试了您的两种解决方案,但都没有用……第一次。
但是现在,如果我连续两次运行插件,预测方程将显示在我的第二个报告输出中。 当我不在两次会议之间时,我会再试一次!
有趣的是,这个特定的图片框如何给我带来问题,而我从 jmp 报告中得到的其他位也得到了正确显示。
在这里好好学习!
再次感谢 :)
回复:脚本一直有效,直到它被加载项调用!同意这看起来像是范围界定。
但是,可能无关,我也很惊讶这对你有用: pb = nlr[PictBox(1)];
如果我不拼出 [PictureBox(1)] 我会收到错误消息。想知道这是否是 JMP 版本的问题。
我还打算建议你可以添加
nlr<
同样可能与这个紧迫的问题无关,但我建议,如果您的插件每次都将提取不同的数据(或者被其他人使用可能有其他偏好),您要确保该框将始终存在并且始终是 PictureBox (1). 你可能想寻找更多具体来说基于它所在的大纲框名称或测试查找它。也许您已经在做后者,因为您的脚本不会失败但会继续生成报告。我在 PictBox 上看到的失败会停止整个脚本,它不会继续使用空白。
回复:脚本一直有效,直到它被加载项调用!嘿,格温尼卡特,
JMP 日志中是否有任何消息?
这种类型的大多数问题往往归结为变量作用域。您的加载项很可能与名称默认为此处(1) ,但是当您在加载项的上下文之外运行脚本时,脚本可能在没有它的情况下运行。因此,在加载项上下文之外,您的变量都是全局变量,但在加载项上下文中,它们被添加到这里命名空间代替。所以我认为模型均衡器在插件版本中无法找到 V 列表框内部。当您在加载项外部运行脚本时它起作用的事实首先支持了这一理论,因为这样做会模型均衡器进入全局命名空间,允许加载项脚本找到它。
尝试更改这两行:
modEq = pb << 获取图像;
图片框(modEq),
到
::模态方程= pb << 获取图像;
图片框( ::模态方程),
看看这是否效果更好。这保证了模型均衡器被放入全局命名空间。或者,如果您想将其保存在这里命名空间(可能是更好的做法),而是这样做:
这里:modEq = pb << 获取图像;
图片框(这里:modEq ),
让我知道是否可以解决问题。
谢谢,
埃里克