從應用程序製作加載項? 獲取應用程序路徑?有沒有辦法從我構建的應用程序創建加載項? 該應用程序相當複雜,我想做的就是將其捆綁到一個加載項中。 此外,如果有人可以幫助我解決以下問題,這個問題可能會得到解決:
我構建了一個應用程序並將其放在文件夾 (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" );