从应用程序制作加载项? 获取应用程序路径?有没有办法从我构建的应用程序创建加载项? 该应用程序相当复杂,我想做的就是将其捆绑到一个加载项中。 此外,如果有人可以帮助我解决以下问题,这个问题可能会得到解决:
我构建了一个应用程序并将其放在文件夹 (myApp/) 中,并包含我想要从源目录 (myApp/src/) 中包含() 的脚本。 但是,当我尝试从应用程序内获取默认目录()时,它返回“/”,如果应用程序在不同的计算机上运行,这将不允许我找到源文件夹。 有没有办法查询当前正在运行的应用程序的位置? 或者,有没有办法将文件捆绑到应用程序中,以便我可以可靠地访问我的文件(也许通过默认路径变量)?
我尝试将应用程序放入加载项中但失败了。 我无法从加载项运行应用程序(.jmpappsource 或 .jmpapp)。 另外,由于应用程序相当复杂,我不想在加载项生成器中重建它。 有没有办法可以将应用程序组织到加载项中? 如果 JMP 添加“将应用程序导出为加载项”或“从应用程序创建加载项”功能,那就太好了。
回复:从应用程序制作加载项? 获取应用程序路径?感谢 nascif_jmp 分享你的方法,感谢 ian_jmp 分享论文! 两者都有帮助,但我选择了不同的方法 - 重组我的应用程序/插件。 以下是我为确保我的应用程序能够在不同计算机上可靠地找到其包含文件而采取的步骤。
- 将与应用程序相关的所有文件/文件夹放入一个文件夹中(我称之为应用程序根目录,简称根目录)
- 使用应用程序根目录的路径变量和相对路径来引用应用程序中的文件和目录。
- 例如,目录“$appRoot/”包含带有我的脚本的文件夹“src/”和带有图像和图标的“lib/”。 我将它们称为“$appRoot/src/”和“$appRoot/lib/”
- 将您的应用程序另存为 .jmpapp 文件,位于应用程序根目录下或其子目录之一中(只要可以通过根文件夹的相对路径访问它即可)
- 创建一个加载项,然后在其他文件下添加应用程序根目录(jmp 还将导入其所有文件和子目录以包含在加载项中)。这些文件将位于加载项的目录中。
- 现在,您可以通过引用加载项的目录来找到所有文件,该目录位于每台计算机上的默认位置。 通过执行 getPathVariable("ADDIN_HOME("My Add In Name")) 检索此位置。 使用它来查找您在上一步中添加的文件和目录。 在加载项脚本中,将路径变量设置为加载项根目录:
- ADDIN_NAME = "我的添加名称";
- setPathVariable("appRoot", getPathVariable(evalInsert("ADDIN_HOME(^ADDIN_NAME^)")) || "应用程序根目录/");
- 设置相对于该根目录的其他路径变量
- 使用 open("$appRoot/pathToMyApp/myApp.jmpapp"); 从加载项脚本运行应用程序文件
- 要分发您的应用程序,请分发包含您的应用程序及其必需文件的加载项
回复:从应用程序制作加载项? 获取应用程序路径?另外,本文来自预言将展示其他人是如何做到这一点的: JMP 最佳实践®插件管理
回复:从应用程序制作加载项? 获取应用程序路径?当我尝试将 JSL 框架分解为多个相互包含的模块时,我遇到了类似的问题。 我通过在主模块中添加以下代码解决了这个问题:
// Find the current location in the source tree for the given file
__getThisPath = Function( {this_f},
{Default Local},
this_p = "";
ifl = Include File List();
For( ifli = 1, ifli <= N Items( ifl ), ifli++,
a_path = ifl[ifli];
idx = Contains( a_path, this_f );
If( idx > 0,
this_p = Left( a_path, idx - 1 );
Break();
);
);
If( this_p == "",
Throw( "Unable to find path for " || this_f )
);
Return( this_p );
);
一旦确定了文件系统中的脚本位置,我就可以使用它来查找并包含其依赖项:
// Use the current location in the source tree for this file
// in order to load its dependencies.
__INCLUDE = __getThisPath( "timeit.jsl" );
Set Path Variable( "TI_HOME", __INCLUDE );
Include( "$TI_HOME/../JSLhelpers/mfr.jsl" );