我正在嘗試透過 JMP 插件分發自訂地圖。我創建了一個插件,它在啟動 JMP 時(使用啟動腳本)將地圖檔案從插件目錄複製到自訂地圖目錄,然後在關閉 JMP 時(透過退出腳本)刪除它們。但是,當開啟多個 JMP 實例(有時是意外開啟)並且關閉其中一個實例時,這會導致問題。當 JMP 的第二個實例關閉時,退出腳本運行,從自訂地圖資料夾中刪除地圖,並且 JMP 必須完全關閉(所有實例關閉),然後重新開啟以重新新增圖表。
有沒有辦法讓退出腳本僅在卸載插件時運行,而不在關閉 JMP 時運行?或者有沒有更好的方法來分發自訂地圖?
啟動腳本:
Names Default To Here( 1 );
//Create Custom Map Path
homePath = Convert File Path( "$HOME", absolute );//get home path
mapPath = Substr( homePath, 1, Length( homePath ) - Length( Word( -1, homePath, "/\" ) ) - 1 ) || "Maps/";
//Create map path if it doesn't exits
If( !Directory Exists( mapPath ),
Create Directory( mapPath )
);
//copy files from addin map folder to JMP map folder
mapFiles = Files In Directory( "$ADDIN_HOME(com.hp.G5iTools)" || "/Maps" );
For( i = 1, i <= N Items( mapFiles ), i++,
newMapFilePath = "$ADDIN_HOME(com.hp.G5iTools)" || "/Maps/" || mapFiles[i];
If( !File Exists( mapPath || mapFiles[i] ),
Copy File( newMapFilePath, mapPath || mapFiles[i] )
);
);
退出腳本:
Names Default To Here( 1 );
//delete map files
homePath = Convert File Path( "$HOME", absolute );//get home path
mapPath = Substr( homePath, 1, Length( homePath ) - Length( Word( -1, homePath, "/\" ) ) - 1 ) || "Maps/";
mapFiles = Files In Directory( "$ADDIN_HOME(com.hp.G5iTools)" || "/Maps" );
For( i = 1, i <= N Items( mapFiles ), i++,
Delete File( mapPath || mapFiles[i] )
);
你好@RM2241 ,
當您提到開啟多個 JMP 實例時,您是指有多個「主畫面」還是只是開啟了多個平台?如果是後者,那麼這是一個已知的錯誤(有關更多詳細信息,請參見此處)。
為什麼關閉時需要刪除自訂地圖檔案?如果地圖檔案已經存在,那麼腳本是否可以只檢查新實例並使用它們?
謝謝,
本
對於新實例,我的意思是多個主螢幕。
我不需要在關閉時刪除自訂地圖,事實上,我不希望在關閉時刪除它們。但是如果插件卸載了,我希望刪除它們,而退出腳本是我能想到的唯一方法。
你好@RM2241 ,
您能否在插件中添加一個“卸載”按鈕,以便用戶在卸載之前單擊以運行該腳本?如果您有多個實例(主畫面),那麼我也會嘗試透過查看下面發送的連結來解決這個問題。我認為沒有辦法主動追蹤何時透過插件觸發卸載。
謝謝,
本
您可以使用退出腳本來檢查插件是否仍然存在。
例子:
使用 com.mycompany.myaddin 作為 ID 建立插件

以某種方式使插件創建一些文件(我使用了啟動腳本)

在退出腳本中使用 Get Addin + << ID + Try-catch 檢查插件

Names Default To Here(1);
Try(
Get Addin("com.mycompany.myaddin") << id
, // if this fails add-in has been removed
Delete File("$DOCUMENTS/test.txt");
);
現在,當您關閉 JMP 時,該檔案應該仍然在那裡,但是當您從「查看」功能表中刪除該插件時,它將刪除該檔案(至少對我來說是這樣)。