JMPアドインスクリプトキャッシング<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />私はJMPアドイン用のスクリプトをいくつか開発中です。
現時点では、同じアドインの2つのパッケージバージョンがあります。DEV用とプロダクション用の1つ
ほとんどのユーザーはPROバージョンしかインストールされていないでしょう...
しかし私達の開発者、そして私達のテスターにはPROバージョンとDEVアドインの両方がインストールされているかもしれません...
明らかに、アドインに含まれるスクリプトは同じ名前を持っています... しかし、変数はAddinNameやDSN Name、あるいはその両方のように異なります。そして明らかに、スクリプト名が異なっていても、DEVバージョンはPROバージョンより新しいコードを持っているでしょう。
今日私が最後に気付いたのは、JMP(9と12の両方)がスクリプトをキャッシュしているようだということです。
最近インストールされたADDINファイルのスクリプトを実行しているようです... だから私はDEVアドイン、その後PROアドインをインストールすると... それは今までDEVスクリプトを実行していないようです.. それは常にPRO Addinディレクトリからスクリプトをロードするように見えます。私が最初にPROをインストールし、次にDEVをインストールすると、逆のことが起こります。:S
1)アドインIDと名前は異なり、一意です
2)追加されたディレクトリが異なります...... 異なるディレクトリのスクリプト名が同じであっても、それぞれのアドインはそれ自身のディレクトリのスクリプトの異なるINSTANCEを持ちます。
2a)これは、PROメニューからPROスクリプトを起動するとさらに明白になります。LOGファイルを見て、それがproスクリプトではなくDEVスクリプトを実行しているのを見てください、そしてそれはインクルードのためにDEVフォルダーを使用しています!
2b)jmpcustメニュー定義は$ ADDIN_HOME( "ADDIN-NAME")と$ ADDIN_HOME( "ADDIN-NAMEDev")を使用していますが、それでも最新のインストールされたアドインバージョン(PROとDEV)からスクリプトを実行するようです。
例:私はこのスクリプトをPRO MENU項目から実行したところです。それでも私はそれがDEVコードを実行しているのを見ることができます.. そしてDEV NameSpaceを持っているようです..?
strDefaultDir =デフォルトディレクトリの取得();
print( "を含む:" || strDefaultDir || "MFG360-Common.jsl");
含める(strDefaultDir || "MFG360-Common.jsl"、解析のみ);
ログ出力...
/ *:
アドインが正常にロードされました:MFG360
アドインが正常にロードされました:MFG360 _Dev
"含む:/C:/Users/klockk.AUTH/AppData/Local/SAS/JMP/Addins/MFG360 開発者 /MFG360-Common.jsl "
私はDEVコードを呼ばなかった!MFG360メニューからメニュー項目を選択しました。MFG360_Devメニューではありません...
JMPはスクリプト名をキャッシュしていますが、登録されている各アドインの.jmpcustファイルの内容に正しく従っていません。
再:JMPアドインスクリプトキャッシング?
私はJMP9とJMP12の両方でこの問題を抱えています。
トップレベルのメニュー名は異なりますが、その下の構造は同じです…
Addin.defファイルは異なるIDと名前を指定します
id = MFG360Dev
name = "MFG360_Dev"
supportJmpSE = 0
addinVersion = 1
installAfterSave = 0
minJMPVersion = 9
maxJMPVersion = 12
autoLoad = 1
loadsAtStartup = 1
--vs--
id = MFG360
名前= "MFG360"
supportJmpSE = 0
addinVersion = 1
installAfterSave = 0
minJMPVersion = 9
maxJMPVersion = 12
autoLoad = 1
jmpcustファイルでは別の最上位Menu…も指定されていて、$ ADDIN_HOME()変数を使用してスクリプトの正しいパスを指定しています。
MENUの名前はDEVとPROの名前の由来が同じなのでJMPが混乱しているかもしれないので、私はそれらをスペースではなくアンダースコアを持つように変更しましたが、それでも運はありません…。
http://www.jmp.com/ns/menu "version =" 3 ">
ヘルプ
MFG360 DEV
MFG360開発
FAB
Fab
LOT HISTORY
ロット履歴
インハウスヒストリー
社内の歴史
$ ADDIN_HOME( MFG360Dev ) \ Lot_History.jsl
外部機器の歴史
EQU履歴をアウトソーシングする
$ ADDIN_HOME( MFG360Dev ) \ Outsource_Equipment_History.jsl
--vs.—
http://www.jmp.com/ns/menu "version =" 3 ">
ヘルプ
MFG360
MFG360
FAB
Fab
LOT HISTORY
ロット履歴
インハウスヒストリー
社内の歴史
$ ADDIN_HOME( MFG360 )\ Lot_History.jsl
外部機器の歴史
EQU履歴をアウトソーシングする
$ ADDIN_HOME( MFG360 )\ Outsource_Equipment_History.jsl
私はこれでかなり遊びました、そして、私がView-> ADD-Insに入って、時間としてどちらか一方だけを有効にしているならば、正しいパスとスクリプトは利用されます、しかし、両方を有効にするなら.. JMPは$ ADDIN_HOMEを使用しているようです
最後に有効にしたもの(またはJMP起動時に両方が有効になっている場合はaddinRegistry.xmlファイルを介して読み込まれる)
再:JMPアドインスクリプトキャッシング?こんにちは、klockk、
これは調査のための技術サポートトラックを開くための良い候補のようにも思えます(電子メール support@sas.com )
これはどのバージョンのJMPですか?
JMPはスクリプトをキャッシュしませんが、アドインがメニューに追加するメニュー項目のキャプションとIDについては疑問に思います。 同じIDとキャプションを持つ2つの異なるサブメニューに項目を追加すると、PRODアドインのメニュー項目を選択していても、JMPがDEVアドインのスクリプトを実行する可能性があります。 このあいまいさを解決するためにJMP 12で変更を加えたので、JMP 12でそれを見ていることに驚きましたが、おそらくあなたのケースは少し異なります。 あなたのカスタムメニューをスクリーンキャプチャしてあなたのアイテムがどのように構成されているかを見ることができるならば、それは私たちがあなたの回避策を見つけるのを助けて、これが明るくなる私達のコードの追加の欠点を解決するかもしれません。 あるいは、スクリーンキャプチャーが不可能な場合は、メニュー項目の階層、および項目のIDとキャプションを教えてください。
ありがとう、
エリック
再:JMPアドインスクリプトキャッシング?これをさらにテストしてみると、起動時に最後に読み込まれたアドインからスクリプトを読み込んで実行するようです。
これは、アドインがロードされる順序と直接相関しているように見えます。これは、REGISTEREDアドインのaddinRegistry.xml順序と直接相関しています。
ログファイルに次のように表示される場合:
アドインが正常にロードされました:MFG360
アドインが正常にロードされました:MFG360Dev
その後、どちらかのアドインがDEVアドインからコードを実行します。
addinRegistryファイルで順序を入れ替えると、JMPはどちらのアドイン/メニューを使用してもPRO ADDIN_HOMEからスクリプトを実行します。
私はまた、View-> Add-Insに行き、一方または他方のアドインを無効にすることによって、使用するスクリプトの正しいセットを強制できることを発見しました。そして物事はうまくいく... しかし、問題なくこれらを同時に有効にすることはできません。