jmp テーブル内でのユーザー固有のリンクの作成に関する問題問題: 共有 OneDrive フォルダーに jmp ファイルがあります。 他の同僚はこの OneDrive フォルダーを自分のデスクトップに同期しているので、全員が共有 jmp ファイルに簡単にアクセスできます。 jmp ファイル内には、jmp ファイルと同じ共有フォルダー内にある他のファイルへのリンクがあります。 各ユーザーはユーザー固有の OneDrive ファイル パスを持っているため、私のリンクは実際には、ユーザー固有のファイル パスを検出してユーザー固有の適切なリンクを設定する式です。 残念ながら、これらの数式は、誰かが新たに jmp ファイルを開いたときに自動的に再実行されません。 私はこれを解決するために 2 つのオプションを検討しましたが、どちらも好きではありません。
1. リンクを使用する前に実行する必要がある「式の再実行」スクリプトを用意します。残念ながら、人々はこのスクリプトのことを忘れています。 さらに、データのサブセットを作成してから「式の再実行」スクリプトを実行しようとするのが一般的ですが、式の評価がデフォルトで抑制されているため、機能しません。
2. 「式の再実行」スクリプトを「OnOpen」として保存し、誰かが jmp テーブルを開いたときにすぐに実行されるようにします。残念ながら、これによりプロンプトが表示され(添付され)、人々はテーブルが開いたときに「はい」と言うことができなくなります。彼らはそれが何かを台無しにするのではないかと恐れています(それが何のためにあるのかさえ知りません)
質問
1. ハイパーリンクをクリックしたらすぐに更新する方法はありますか?
2. 「OnOpen」ポップアップを抑制したり、ユーザーが何をすべきかを説明するためにポップアップを編集したりできますか?
3. jmp テーブルが開かれるとすぐに数式を更新できるようにする「OnOpen」スクリプト以外の別の方法はありますか?
助けていただければ幸いです。 ありがとう!
マット
Re: jmp テーブル内でのユーザー固有のリンクの作成に関する問題こんにちは@Matt_Converse 。 良い質問。 最良の選択肢は、実行時に構築されるように共有ファイル内のパスを一般化することだと考えています。 このファイルの詳細がわからないため、具体的に説明することは不可能ですが、式の処理が含まれる可能性があります。 他の 3 つのオプションについては、次のとおりです。
- ハイパーリンクは通常、ハードコーディングされています。 どこでどのように使用しているのか、もっと詳しく知る必要があります。
- はい。 問題は、OnOpen を実行する前にユーザーのユーザー設定を変更する必要があることです。
- 私が気づいているわけではありません
Re: jmp テーブル内でのユーザー固有のリンクの作成に関する問題おい@donmcormack !
早速のご返信ありがとうございます。 詳細を追加していただけると幸いです。 リンク (つまり、ファイル/フォルダーへのパス) がどのように変化するかを示す例を次に示します。
- SEM 画像のフォルダーへのファイル パス: C:\Users\変換者\OneDrive - WL Gore & Associates, Inc\サンプル共有データベース\SEM ライブラリ\4391
- 同僚の同じフォルダーへのファイル パス: C:\Users\ミジョンソン\OneDrive - WL Gore & Associates, Inc\サンプル共有データベース\SEM ライブラリ\4391
テーブルの例 (添付の「Table1.jmp」) では、「SEM フォルダー パス」列の式を使用してユーザー固有のフォルダー パスを決定する方法がわかります。 基本的に、メイン テーブル (「Table1.jmp」) のファイル パスを読み取り、ユーザー固有のディレクトリを取得し、「SEM Library...」を追加します。
dt_name = "テーブル 1";
dt = データ テーブル( dt_name );
path_full = dt << Get Path();
名前ファイル = dt_name || ".jmp";
n = Munger( path_full, 1, name_file );
path_folder = Substr( path_full, 1, n - 1 );
パス = パスフォルダー || 「SEM ライブラリ」 || "\" || Char( :データベース番号 );
次に、イベント ハンドラーを使用してハイパーリンク (「SEM フォルダー リンク」列) を設定します。 全体的なファイル構造を把握するのに役立つように、完全な zip フォルダーを添付しました。
どうすればよいか詳しく聞きたいです」実行時に構築されるように、共有ファイル内のパスを一般化します。」 ありがとう!
マット
Re: jmp テーブル内でのユーザー固有のリンクの作成に関する問題%OneDrive% Windows システム変数を使用して、ベース 1 ドライブ フォルダーへのユーザー パスを取得できます。
Get 環境変数 ( "ONEDRIVE" ) を使用します。それを呼び出して URL で使用します。
Re: jmp テーブル内でのユーザー固有のリンクの作成に関する問題添付のようなものはどうでしょうか? すべてのユーザーに共通の部分が含まれるようにフォルダー パスを短縮し、パスの残りの部分 (つまり、一意の部分) を構築するようにイベント ハンドラーを変更しました。
Re: jmp テーブル内でのユーザー固有のリンクの作成に関する問題Get 環境変数 ( "ONEDRIVE" ) を使用することもできます。イベントハンドラー内...必要なときだけ、すべての行に対して実行したくないので:)
また、OneDrive システム変数が設定されていない限り、Mac や Linux マシンではおそらく機能しません...
JMP ファイルがネットワーク上の 1 か所 (たとえば、「サンプル共有データベース」フォルダー内) にのみ存在する場合は、相対パスとしてフォーマットされた URL を使用することもできます。
つまり、パス = "..\SEM Library\" || Char( :データベース番号 );
これは Mac でも動作するはずです。ただし、jmp ファイルは「SEM Library」の直上のフォルダにある必要があります。
Re: jmp テーブル内でのユーザー固有のリンクの作成に関する問題doh... 現在のフォルダーの相対パスは単一のドットになります...
パス = 「.\SEM ライブラリ\」 || Char( :データベース番号 );
Re: jmp テーブル内でのユーザー固有のリンクの作成に関する問題@donmcormack 、それはうまくいきました! (スラッシュを 1 つバックスラッシュに変更する必要がありました)
編集したスクリプトは、私の問題の最初の部分、つまり実行時にリンクが構築される部分に対処していると思います。 ただし、ユーザーがよく遭遇する 2 番目の課題は、このテーブルのサブセットを作成し、リンクをたどろうとすることです。 残念ながら、サブセットは保存されないため、読み取るファイル パスがありません。 ここで何か提案はありますか?
使えるよ@DByssユーザーの onedrive 固有の環境を取得するという の提案ですが、それと「Table1」の間にファイル パス構造があり、一部のユーザーが変更しているのを確認しました (したがって、それさえもユーザー間で一貫性がない可能性があります)。
すべての助けに感謝します!
マット
Re: jmp テーブル内でのユーザー固有のリンクの作成に関する問題ここにアイデアがあります。 ディレクトリ リストにアクセスするために必要な列を保存します。 ID 列 (1 行から N 行までの連続番号が付けられます) を最初の列として追加します。 イベントハンドラースクリプトをこれに置き換えます
Function( {thisTable, thisColumn, iRow},{rowID},
If(!Namespace Exists("myCustomFunctionNamespace"),
New Namespace("myCustomFunctionNamespace");
myCustomFunctionNamespace:thisPath = Substr(thisTable << Get Path,1,Contains(thisTable << Get Path,"/",-1));
myCustomFunctionNamespace:semFolderPath = Column(thisTable,"SEM Folder Path << Get Values");
);
rowID = Column(thisTable,1);
Open(Char(myCustomFunctionNamespace:thisPath || "/" || myCustomFunctionNamespace:semFolderPath[ rowID] ));
);
列の値はリストにロードされ、すべての操作はテーブル内で検索する必要があるものではなく、これらの値に基づいて行われます (元のテーブルの行番号を参照する ID 値を除く)。
Re: jmp テーブル内でのユーザー固有のリンクの作成に関する問題ありがとう、 @donmcormack ! ID 列を追加し、イベント ハンドラーを置き換えました。ただし、行 1 のリンクをクリックすると、「'myCustomFunctionNamespace:semFolderPath[ /*###*/rowID]' のアクセスまたは評価における行 1 の添字の問題」というエラーが表示されます。 「/*###*/」が何を指しているのかわかりますか? スクリプトを関数の外で実行できるので、ほぼ達成できていることがわかります (保存したスクリプトを参照してください)。 サブセットを作成する前にリンクをテストしているだけであることに注意してください (サブセットではまだ試していません)。
本当にありがとうございました。
マット
Re: jmp テーブル内でのユーザー固有のリンクの作成に関する問題ごめんなさい@Matt_Converse 。 コードの最後から 2 行目は次のようになります。
rowID = Column(thisTable,1)[iRow]
選択した行の最初の列 (サブセットから) の値を参照したいとします。 私の解釈では、列全体を参照していました。
Re: jmp テーブル内でのユーザー固有のリンクの作成に関する問題@donmcormack 、それを捕まえるべきだった! ありがとう! これはサブセットでも機能するようになりました。 イベント ハンドラーをもっと頻繁に使用する必要があります。 本当に助かりました。