アプリケーションからアドインを作成しますか? アプリのパスを取得しますか?作成したアプリケーションからアドインを作成する方法はありますか? アプリケーションはかなり複雑で、アドインにバンドルするだけです。 さらに、誰かが次の問題を解決するのを手伝ってくれれば、この問題は解決するかもしれません:
私はアプリケーションを作成し、それをフォルダー (myApp/) に置き、ソース ディレクトリ (myApp/src/) から include() したいスクリプトを持っています。 ただし、アプリ内から Get Default Directory() を実行しようとすると、「/」が返されるため、アプリケーションが別のコンピューターで実行されている場合、ソース フォルダーを見つけることができません。 現在実行中のアプリの場所を照会する方法はありますか? または、ファイルをアプリケーションにバンドルして、(おそらくデフォルトのパス変数を介して) ファイルに確実にアクセスできるようにする方法はありますか?
アプリケーションをアドインに入れようとして失敗しました。 アドインからアプリ (.jmpappsource または .jmpapp) を実行できません。 また、アプリケーションはかなり複雑なので、アドイン ビルダーで再構築したくありません。 アプリをアドインに整理する方法はありますか? JMP に「アプリケーションをアドインとしてエクスポート」または「アプリケーションからアドインを作成」機能が追加されるとよいでしょう。
Re: アプリケーションからアドインを作成しますか? アプリのパスを取得しますか?メソッドを共有してくれた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"); を使用して、アドイン スクリプトからアプリケーション ファイルを実行します。
- アプリケーションを配布するには、代わりに、アプリケーションと必要なファイルを含むアドインを配布します。
Re: アプリケーションからアドインを作成しますか? アプリのパスを取得しますか?さらに、この論文は予測他の人がこれをどのように管理しているかを示します: JMPのベストプラクティス®アドイン管理
Re: アプリケーションからアドインを作成しますか? アプリのパスを取得しますか?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" );