JSLは現在実行中のスクリプトのパスを識別しますスクリプトを実行するとき(スクリプト ウィンドウから、またはアドインからトリガーすることによって)、(1) スクリプト ウィンドウが存在するディレクトリの場所を取得する、または (2)スクリプトを含むアドインの ID。 JMP は、これを実行するにはスクリプトを開く必要があるため、これを認識します。 これを行う方法はありますか?
$ADDIN_HOME(id) を使用すると、アドイン コンテキストでこれを実行できることがわかりました。 ここでの問題は、複数のアドインにパッケージ化している共通のインクルードがあり、異なるアドインごとにファイルを変更する必要がないことです。 誤って共通インクルードのコピーをアドイン #1 からアドイン #2 に作成し、アドイン #2 で正しいパスを使用するようにインクルードの ID を変更するのを忘れていることがわかります。
Re: JSL が現在実行中のスクリプトのパスを識別するPOSIX と Windows のパス区切り文字を変換する組み込み関数もあります。

Re: JSL が現在実行中のスクリプトのパスを識別するありがとうジェフ、これは素晴らしいですね!
ただし、別の解決策を見つけました。スクリプトを現在のデータテーブルと同じディレクトリに保存し、データテーブルのパスを取得します。
dt = Current Data Table();
path = dt<< getpath;
結果の「パス」は、バックスラッシュを含むディレクトリ パスです。
Re: JSL が現在実行中のスクリプトのパスを識別する私はジェフの解決策が好きです。 ただし、この目的のための専用のユーティリティ関数もあります。 以下に例を示します。
Convert File Path( "$HOME", Windows );
形式を POSIX から Windows に変更するだけではありません。 「ヘルプ」>「スクリプト索引」>「関数」>「POSIX」を参照してください。
Re: JSL が現在実行中のスクリプトのパスを識別するJMP と JSL はスラッシュの方向を気にしません。 どちらの方法でも機能します。
JMP の外部でパス文字列を使用する必要がある場合は、次のように使用できます。 () に代入します:
foo="c:/my directory/my directory/my directory";
substitute into(foo, "/", "\");
show(foo);
Re: JSL が現在実行中のスクリプトのパスを識別する解決策は私にとっては機能しません。結果のパスにはスラッシュ / が含まれていますが、バックスラッシュ \ が必要です。 誰か解決策を知っていますか?
Re: JSL が現在実行中のスクリプトのパスを識別するデフォルト ディレクトリの取得と DEF ファイルの検索を組み合わせると、機能するように思えますが、不快なハックのように思えます。おそらく見返りはそれだけの価値があります。すべてのファイルパス定義に標準のインクルードファイルがありますが、アドインごとに個別のリビジョンがあるため(つまり、あなたが説明したのと同じ問題)、親アドインのIDを動的に検出できると非常に便利です特徴。それだけに、このハックは魅力的に思えてきました - DEF ファイルを読み取ることについては考えていませんでした...
Re: JSL が現在実行中のスクリプトのパスを識別する通常、Get Default Directory 関数または空の文字列を指定した Convert File Path 関数を使用して、現在のスクリプトのパスを取得します。
path1 = Get Default Directory();
path2 = Convert File Path( "" );
Show( path1, path2 );
「C:\Public」フォルダー内にあるファイルからこのスクリプトを実行したときのログは次のとおりです。
path1 = "/C:/Public/";
path2 = "/C:/Public/";
Re: JSL が現在実行中のスクリプトのパスを識別するcom.cmpny.dept.addin1 がそれを呼び出したことを取得できず、pmroz が提案している一般的なアドイン アプローチを使用しない場合は、アドインを開くことができるため、そのスクリプトがどのフォルダーにあったかを知るだけで十分です。同じフォルダーから .def を取得し、そこから ID を抽出します。
これにより、実際に 2 番目の潜在的なアプリケーションが得られます。 現在実行中のアドインの addin.def にアクセスできれば (ただし、現時点ではこれができないようです)、addin.def から id と addinVersion を取得して比較することでバージョン チェックを行うことができます。これは、Internet Open を使用して入手できる最新のアドイン バージョンのリストです。 その後、ユーザーのローカル addinVersion が最新かつ最高かどうかを確認できます。
Re: JSL が現在実行中のスクリプトのパスを識別するはい、ただし、General Functions.jsl 内の関数を呼び出す他のアドインを識別する行を General Functions.jsl に含めたいと考えています。
つまり、com.cmpny.dept.addin1 では、スクリプトが General Functions.jsl 内の関数を呼び出す可能性があります。 General Functions.jsl 内の変数を参照して、com.cmpny.dept.addin1 がそれを呼び出したことを明らかにしたいと考えています。
Re: JSL が現在実行中のスクリプトのパスを識別する共通のインクルード ファイルを独自のアドインにしてみてはいかがでしょうか。そうすれば、次のような方法でそれを含めることができます。
// Load functions common to various apps
include("$ADDIN_HOME(com.cmpny.dept.common)\General Functions.jsl");