JMP 插件是 JMP 核心功能的重要補充,有時,您可能會發現自己需要使用 JSL 自動創建插件。 我在構建 JMP 插件時使用了自動插件創建, JMP 到 R 自定義插件生成器。 這是自動創建加載項的一個漂亮的 JSL 技巧。
本教程中的代碼改編自作者編寫的精彩腳本@Justin_Chilton ,誰建造了自定義插件生成器。
JMP 插件 (.jmpaddin) 是一個 Zip 文件 (.zip)。 JMP 插件的三個最小組件是 addin.def 和 addin.jmpcust 文件,以及在使用插件時運行的 JSL 腳本。 您可以根據需要添加其他文件,例如其他 JSL 腳本、JMP 表格、PDF 或 Word 文檔(通常用於文檔)以及圖片(通常用於加載項縮略圖)。
在以下腳本摘錄中,任何可自定義的內容均以大寫字母表示(例如 YOUR_ADDIN_NAME)。
首先,創建 addin.def 文件中使用的字符串。 您將需要您的加載項名稱和 ID。 名稱是將顯示在加載項菜單上的名稱,ID 是加載項的唯一標識符,通常採用 com.companyname.username.addinname 格式。
//create string for addin.def file
addinDefString = "id=com.YOUR_COMPANY.YOUR_ID.YOUR_ADDIN_NAME
name=YOUR ADDIN NAME
supportJmpSE=0";
如果您知道您的加載項僅分別在 Windows 或 Mac 上受支持,那麼您應該在此字符串的末尾添加一行:
"host=Win"
或者
“host=Mac”
接下來,為 addin.jmpcust 文件創建字符串:
addinjmpcustString = "\[<!-- JMP Add-In Builder created --><MENU_AND_TOOLBAR_CUSTOMIZATIONS jm="http://www.jmp.com/ns/menu" version="3">
<INSERT_IN_MAIN_MENU>
<INSERT_IN_MENU>
<NAME>Add-Ins</NAME>
<INSERT_AFTER>
<NAME></NAME>
<COMMAND>
<NAME>YOUR ADDIN NAME</NAME>
Your Addin Name
<ACTION type="path">$ADDIN_HOME(com.YOUR_COMPANY.YOUR_ID.YOUR_ADDIN_NAME)\YOUR_SCRIPT.jsl</ACTION>
<ICON type="none"></ICON>
</COMMAND>
</INSERT_AFTER>
</INSERT_IN_MENU>
</INSERT_IN_MAIN_MENU>
</MENU_AND_TOOLBAR_CUSTOMIZATIONS>]\";
然後,為了將 JSL 腳本打包為文件,首先將其作為文本文件加載:
addinScript = Load Text File("$SOME_PATH\YOUR_ADDIN_NAME.jsl");
然後,將所有文件寫入 zip 存檔:
//create a ZipArchive to write files to
za = Open("$DOCUMENTS\YOUR_ADDIN_NAME.jmpaddin", zip);
//write all necessary files to ZipArchive (which can also be binary blobs)
za << write("addin.def", addinDefString);
za << write("addin.jmpcust", addinjmpcustString);
za << write("YOUR_ADDIN_NAME.jsl", addinScript);
最後,您可以導航到保存文件的文件夾並查看您的加載項,雙擊即可安裝該加載項。
我還創建了一個更加“填空”的腳本版本,以防您想要自動創建外接程序(如果您需要創建多個外接程序名稱、文件並具有變量名稱)目錄等),如下。
腳本中使用的兩個變量名是addinName和dir,定義如下:
插件名稱:作為字符串的加載項名稱,其中包含空格和標題大寫,如您希望它出現在加載項菜單中一樣(例如“JMP to R Add-In Builder”)
目錄:您要保存加載項的目錄
addinDefStr = "id=com.YOUR_COMPANY.YOUR_ID" || addinName || "\!n name=" || addinName || "\!n supportJmpSE=0";
addinjmpcustStr = "\[<!-- JMP Add-In Builder created --><MENU_AND_TOOLBAR_CUSTOMIZATIONS jm="http://www.jmp.com/ns/menu" version="3">
<INSERT_IN_MAIN_MENU>
<INSERT_IN_MENU>
<NAME>Add-Ins</NAME>
<INSERT_AFTER>
<NAME></NAME>
<COMMAND>
<NAME>]\" || uppercase(addinName) || "\[</NAME>
]\" || addinName || "\[
<ACTION type="path">$ADDIN_HOME(com.jmp.]\" || lowercase(regex(addinName, "\s", "", globalreplace)) || "\[)\]\" || addinName || "\[.jsl</ACTION>
<ICON type="none"></ICON>
</COMMAND>
</INSERT_AFTER>
</INSERT_IN_MENU>
</INSERT_IN_MAIN_MENU>
</MENU_AND_TOOLBAR_CUSTOMIZATIONS>]\";
addinScript = Load Text File("$SOME_PATH\YOUR_ADDIN_NAME.jsl");
//create a ZipArchive to write files to
za = Open(dir || "/" || addinName || ".jmpaddin", zip);
//write all necessary files to ZipArchive (which can also be binary blobs)
za << write("addin.def", addinDefStr);
za << write("addin.jmpcust", addinjmpcustStr);
za << write(addinName || ".jsl", addinScript);
希望這些腳本可以幫助您的插件創建項目更加順利!
您可以嘗試對腳本進行編輯->加密。 進行一些測試並準備好返工一些 JSL。 如果您只有一小部分秘密代碼,請考慮將其移動到自己的包含文件中並對其進行加密。 其餘代碼將正常運行。
加密的腳本很難自我審視;如果您使用表達式操作或將表達式轉換為字符串,則需要進行一些重寫。 使用顯示全局變量();腳本運行後了解可能洩漏的內容。
將純文本版本保存在安全的地方!
JMP 插件 (.jmpaddin) 是一個 Zip 文件 (.zip)。 JMP 插件的三個最小組件是 addin.def 和 addin.jmpcust 文件,以及在使用插件時運行的 JSL 腳本。
我們希望向供應商提供一個加載項,但希望與其關聯的代碼保密。 上面的聲明表明代碼是可見的。 有沒有什麼方法可以以二進制形式製作外接程序,這樣就不能(輕鬆)對其進行逆向工程?
@vince_faller中,“supportJmpSE”中的“SE”代表“學生版”,因此如果您需要該插件與 JMP 學生版配合使用,則只需將其設置為 1。
感謝您將這些放在一起,朱莉婭!
我只是想添加一些可以添加到 addin.def 文件中的選項。
- addinVersion - 顯示在“視圖”>“加載項...”對話框中的版本號。
- minJmpVersion - 插件可安裝的 JMP 最低版本。
- maxJmpVersion - JMP 的最大版本可以安裝該插件。
addinVersion=1.3
minJmpVersion=12
maxJmpVersion=13
如果您有興趣在加載項中使用 JMP 的內置圖標之一作為菜單項,請查看我的內置 JMP 圖標加載項的圖標名稱,並在 addin.jmpcust 文件中使用以下格式。
<jm:icon type="builtin">JMPProSmall</jm:icon>