JSL:分析が一時データに依存している場合、分析が閉じられたときにデータを閉じます...こんにちは、みんな、
背景:私は現在、グラフビルダーに供給されるいくつかのデータポイントを保持するための一時的なデータテーブルを作成する必要があるアドインを作成しています。 ユーザーがグラフビルダーを閉じるときに、一時データを削除したいと思います。 簡単に言えば、Graph Builder呼び出しを変数に保存すると、<< On Close()を追加して、一時データも閉じることができます。
ただし、ユーザーが2つの異なる入力に対してアドインを2回実行して、2つの一時データテーブルと2つのグラフビルダーを作成したい場合は、奇妙なことが起こります。 この場合、グラフビルダーの1つを閉じると、間違った一時テーブルが閉じられる可能性があります(他のグラフビルダーも一緒に停止します)。
これには簡単な解決策があるに違いないと思います。 解決策は名前空間を使用する必要があると思いますが、すべてをリンクしておく方法がわかりません。 新しい名前空間を作成するたびに、「ns」が上書きされるようです。 私が抱えている難問は、アドインの個別のインスタンスをそれぞれ独自の「ns」値を使用して保持する方法と、いくつかの「OnClose」のそれぞれに正しい「ns」値をフィードできるようにする方法を理解することです。 「最終的に作成されるコード。
これが私がやろうとしていることの簡略版です。 これを実行し、[もう1つ作成]ボタンを1回以上クリックしてから、グラフビルダーの1つを閉じると、他の1つはそのまま残り、どのグラフを気にする必要がないという考えになります。ビルダー私は最初に却下することを選択します。
Names Default to Here(1);
MyFunction = Function({},
ns = New Namespace();
ns:dt = New Table("Test Table",
<< New Column("Random X", << Formula(Random Normal())),
<< New Column("Random Y", << Formula(Random Normal())),
<< Add Rows(10),
invisible
);
ns:gb = New Window("Test Output",
Button Box("Make Another One",MyFunction()),
Graph Builder(
Show Control Panel( 0 ),
Show Legend( 0 ),
Variables( X( :Random X ), Y( :Random Y ) ),
Elements( Points( X, Y, Legend( 4 ) ) )
);
);
ns:gb << On Close(Try(Close(ns:dt, No Save)); ns << Delete);
);
MyFunction();
知恵を求めて:次に何を試してみるべきですか?
スクリプティングRe:JSL:分析が一時データに依存している場合、分析が閉じられたときにデータを閉じます...問題は、変数「ns」が関数の2回目以降の実行で置き換えられることです。したがって、データテーブルへの一意の参照を使用する必要があります。以下は、データテーブルの名前を使用してコードを閉じるバージョンのコードです。
Names Default To Here( 1 );
MyFunction = Function( {},
ns = New Namespace();
ns:dt = New Table( "Test Table",
<<NEW column=""></NEW>
Re:JSL:分析が一時データに依存している場合、分析が閉じられたときにデータを閉じます...ありがとう。 これは、このような単純なソリューションに役立ちます。
私は大規模なコードの書き直しをしているかもしれませんが、それでも自分がやりたいことを実行できるかどうかはわかりません。 私の実際のアドインは、一連のDisplayBox参照もnsに格納し、DisplayBoxは、プラットフォームとデータテーブルの両方でさまざまな追加アクションをトリガーします。 アドインが再起動すると、すべてのDisplayBox参照が共食いされます。 運が良ければ、ほとんどのDisplayBoxをトリガー関数に変換して、この<< Parentを押し、他のボックスにドリルダウンして出力などを更新できると思います。 自分がしていることを真剣に考え直さなければならないように思えます。
Names Default to Hereが、コードが再実行されるたびに個別のHere名前空間を作成することを期待していましたが、そうではないようです...
この別の道を始める前に、他に良い選択肢はありますか?
Re:JSL:分析が一時データに依存している場合、分析が閉じられたときにデータを閉じます...「NamesDefaultto Here()」には、コードを呼び出すたびに個別の名前空間がないことに不満を感じることがあります。しかし、コードをデバッグするときにもその事実を利用します。したがって、両方の利点があります。しかし、これは、個別の「ここ」の名前空間を作成する、壁から外れたアイデアです。
元のJSLを取得し、//を追加する場合!最初の行として、そのコードはハードドライブから開くと自動的に実行されます。そのスクリプトを開くと、固有の「ここ」の名前スペースがあります。ファイルをもう一度開くと、独自の「Here」名前空間があります。
過去に数回、私はこれを使用しましたか????機能????。私のメインプログラムは、Save Text File()を使用して、問題のJSLを$ TEMPの場所に保存します。その後、後続のコードで保存されたJSLのコードを実行する必要がある場合は、Open()を使用してファイルを実行します。保存されたJSLとの間の値の受け渡しは、メインプログラムと保存されたJSLプログラムの両方で定義された名前空間を介して行われます。
これがこの方法での元のサンプルコードセットアップであり、実行すると、各インスタンスは実行時に独立しています
names default to here(1);
graphJSL = "//!
Names Default to Here(1);
MyFunction = Function({},
ns = New Namespace();
ns:dt = New Table(\!"Test Table\!",
<< New Column(\!"Random X\!", << Formula(Random Normal())),
<< New Column(\!"Random Y\!", << Formula(Random Normal())),
<< Add Rows(10),
invisible
);
ns:gb = New Window(\!"Test Output\!",
Button Box(\!"Make Another One\!",MyFunction()),
Graph Builder(
Show Control Panel( 0 ),
Show Legend( 0 ),
Variables( X( :Random X ), Y( :Random Y ) ),
Elements( Points( X, Y, Legend( 4 ) ) )
);
);
ns:gb << On Close(Try(Close(ns:dt, No Save)); ns << Delete);
);
MyFunction();";
Save Text File( "$TEMP/Graph1.jsl", graphJSL );
open("$TEMP/Graph1.jsl");
open("$TEMP/Graph1.jsl");