プロジェクト内でアドインを実行できません多くのスクリプトを会社用のアドインにまとめました。アドインは応答しますが、「プロジェクト」内で呼び出された場合、スクリプトは実行されません。これはアドイン スクリプトによって修正できるものですか、それともスクリプト自体をプロジェクト内に別に含める必要がありますか?
スクリプティングRe: プロジェクト内でアドインを実行できませんJMP の各プロジェクトには、独自のグローバルと名前空間のリストがあります。 これは、JMP の非プロジェクト部分にも当てはまります。 そのため、global:a をプロジェクト外で作成すると、どのプロジェクトでも表示されなくなります。 また、Project01 内に global:b を作成すると、そのプロジェクトの外部や他のプロジェクトでは表示されません。 さらに、名前空間 "A" をプロジェクトの外部に作成すると、プロジェクト内では (A:symbol のように名前で) 表示されません。 プロジェクトで名前空間を作成する場合も同様です。 これは、プロジェクトを互いに分離したり、プロジェクト以外から分離したりするために行われます。 また、複数のプロジェクトで同じスクリプトの複数のコピーを実行しても、グローバルを使用している場合でも、互いに衝突することはありません。
プロジェクト間、または非プロジェクトとプロジェクト間で通信する必要がある場合、最善の方法はルート名前空間 (::: または As Root 構文) を使用することです。 この名前空間のシンボルは、実行中の JMP インスタンス全体で一意です。
したがって、Craig が提案したように、名前空間をルート名前空間のシンボルに割り当てることができます。 次に、その名前空間を、名前ではなく As Root(myNsSym):x のようにシンボルで使用します。
メニュー項目とボタンへの応答のみが必要な場合は、これらのそれぞれが表示されるまでアドインの初期化を遅らせる上記の提案が適切なオプションです。 次に、アドインが最初に使用されるときに、各プロジェクトでアドインが初期化されます。 また、グローバルを使用して、以前の初期化を確認できます。 過去にいくつかのアドインでこれを行いました。 ただし、JMP の開始/終了時に多くのことを行っていないため、開始スクリプトと終了スクリプトはかなりむき出しにする必要があることを意味します。 メニューへの応答以外の何かが必要な場合や、プロジェクト間で通信する必要がある場合にも、これは機能しません。 このような場合、ルート名前空間がおそらく最適です。
最後に、Project OnOpen スクリプトまたは Workspace Startup スクリプトを使用して初期化することもできます。 見るhttps://www.jmp.com/support/help/en/16.0/index.shtml#page/jmp/write-a-project-on-open-script-2.shtmlとhttps://www.jmp.com/support/help/en/16.0/index.shtml#page/jmp/run-startup-scripts-to-control-workspaces.shtml#ww632187それらの詳細については。 アドインの起動/終了スクリプトでまだ多くのことを行っていない場合は、それらのいずれかでアドインを使用して Try(Get Addin("...")<<
Re: プロジェクト内でアドインを実行できませんわからない; @アーロン_アンダーセン正解がわかります。 私の簡単なテストでは、グローバルが必要になることが示唆されています変数名前空間を保持します。さまざまな名前空間関数 (およびクラス関数) は、プロジェクトの外部の名前空間には見えません。 私がやったことはうまくいくように見えます: プロジェクトの外部から、グローバルを割り当てます。 ::: を使用しましたが、それはプロジェクトでのみ特別なことだと思います。
:::myNameSpace = namespace("myNameSpace"); // "globalize" a namespaceプロジェクト内から、:::myNameSpace が機能しているように見えます。
プロジェクトの OnOpen スクリプトがいつ実行され、どのコンテキストで実行されるかはわかりませんが、ソリューションの一部である可能性があります。 アドインを実行して、プロジェクトのスコープ内で関数を再作成する可能性があります。 (以前遊んでみたところ、プロジェクトを開いたときのウィンドウの配置に使えそうでした。 私はそれを必要としませんでした。)
グローバル変数を作成せずに、名前空間で JSL 関数を分離しておく理由を理解しています。 それを機能させ続ける方法があることを願っています。 (もちろん、名前空間名は別のグローバル空間です...そして、それがプロジェクトが戦っているものだと思います。)
Re: プロジェクト内でアドインを実行できませんこんにちはクレイグ、
Lynn が質問で使用しているアドインを作成しました。変数の競合を避けるために、アドインごとに名前空間を作成しました。これらの名前空間は、プロジェクト以外のグローバル スコープ内にのみ存在しますか?「:::」グローバル スコープ内に名前空間を作成する方法はありますか?
どうもありがとう、
ジョン
Re: プロジェクト内でアドインを実行できませんCraige のアイデアは、私が最初に検討するものでもあります。 (それがうまくいかない場合は、追加の提案をするために、adin-in を見るか、少なくともそれが何をするかについてもっと知る必要があります)。
ああ
Re: プロジェクト内でアドインを実行できません私はこれを見つけました:
https://www.jmp.com/support/help/en/16.0/?os=win&source=application&utm_source=helpmenu&utm_medium=application#page/jmp/running-scripts-in-a-project.shtml
「JMP は複数の計画同時に開いているアイテムと、開いていないアイテム計画。各計画独自のを持っていますグローバルスコープ。これにより、別の場所で同じ名前の変数によって引き起こされる競合が防止されます。計画秒。 まれに、開いているすべての変数で特定の変数を共有したい場合があります計画を使用します。 :::ルートオペレーター。」
プロジェクトから使用したいスクリプトをアドインが読み込む場合、 ::: が必要になるかもしれません。 私はそれを試していません。
@アーロン_アンダーセン
Re: プロジェクト内でアドインを実行できませんあなたのアドインは、アドインの読み込み時に定義され、後でアドイン機能が呼び出されたときに参照されるグローバル変数に依存していると思います。プロジェクトでは、グローバル コンテキストが他のプロジェクトや JMP の残りの部分とは異なり、アドインによって定義されたものにはプロジェクト内からアクセスできません。これに対処するには、すべてのメニュー オプションを設定して、ファイルを開くか、アドインが既に読み込まれているかどうかの確認 (例: 適切なグローバルが存在するかどうかを確認する) を含むスクリプトを実行し、読み込まれていない場合はアドインを再読み込みします。 このようにして、アドインの名前空間と変数は、ユーザーがプロジェクト内で初めてアドインを呼び出したときに読み込まれます。
アドインでグローバル変数に依存していない場合、動作していない機能について詳しく教えてください。
Re: プロジェクト内でアドインを実行できません名前空間とプロジェクト - 残念ながら、ここで説明したよりも複雑です...
リコール関数ライブラリの関数をカスタム関数として作成し、JMP の起動時にアドイン経由で読み込むのは良いアイデアだと思いました。この方法では、スクリプト インデックス経由で機能がわかりやすく文書化されるため、ユーザーはアドインやプロジェクトにライブラリを含める手間がかかりません。ライブラリはすでに存在します。
その後、元の名前空間はJMPのグローバル名前空間にのみ作成されていたことに気付きました。そして、名前空間をグローバル化するには、
:::myNameSpace = namespace("myNameSpace"); // "globalize" a namespaceプロジェクトからアクセスできるようにします。
残念ながら、追加の問題が発生しました。ここで説明します。
名前空間とプロジェクト
Re: プロジェクト内でアドインを実行できませんクールなトリックですね、 @Jaseanありがとう:
プロジェクトで使用するためにルート名前空間をローカライズする
myVar = :::myNs
myVar:x // success
なぜ私の問題は 2021 年に議論されなかったのでしょうか?
JMP16 以下で動作するライセンスをお持ちで、2021 年に問題があったかどうかを確認できる方はいらっしゃいますか?
それとも、 @Jaseanのトリックを「デフォルトで」使用しましたか...