開いているすべてのテーブルを表示するリスト ボックス開いているすべてのデータテーブルをリストし、新しく開いた/新しく閉じたテーブルで自動的に更新されるリストボックスを構築しようとしています。 以下のスクリプトから開始しましたが、何らかの理由で onClose 関数が機能しません。
助けてくれてありがとう:)
names default to here(1);
f1 = function ({Temp_list},
T_list = Temp_list << get name();
lb << remove all;
lb << append (T_list)
);
f2 = function ({Temp_list},
T_list = Temp_list << get name();
lb << remove all;
lb << append (T_list)
);
asub = Subscribe to data table list( , onopen(f1));
Subscribe to data table list(asub , onclose(f2));
nw = new window("Trial",show menu(0),
vlistbox(
T_list = get data table list ();
lb = listbox(T_list);
)
);
高度な統計モデリング自動化とスクリプト作成消費者および市場調査データアクセスデータのブレンディングとクリーンアップ実験計画法マスカスタマイゼーションRe: 開いているすべてのテーブルを表示するリスト ボックスデータテーブルリストへの購読をもう少しテストした後、可能であればそれを避けたいと思います。 まったくうまく機能していないようで、イベントがトリガーされず、使用方法に関するドキュメントがかなり不十分です。 Windows 10でJMP16.1.0 Proを使用しています。
このようなものを追加したいアプリケーションが 1 つありますが、データテーブル リストの更新または同様のものを追加するだけだと思います。
Re: 開いているすべてのテーブルを表示するリスト ボックスありがとう@jthi ! それはうまくいきます!
差し支えなければ、「OnRename」句の設定方法も教えていただけますか。
Re: 開いているすべてのテーブルを表示するリスト ボックス新しい値を lb に追加するだけで、インデックス付きの閉じた値だけが削除されます (Contains() を使用してインデックスを取得します)。また、ローカル変数も関数に追加されます。
Names Default To Here(1);
f1 = function ({Temp_list}, {tableList},
tableList = Temp_list << get name();
lb << append (tableList)
);
f2 = function ({Temp_list}, {tableList},
tableList = Temp_list << get name();
lb << Remove Item(Contains(lb << get items, tableList));
);
asub = Subscribe to data table list( , onopen(f1));
Subscribe to data table list(asub , OnClose(f2));
nw = new window("Trial",show menu(0),
vlistbox(
lb = listbox(get data table list ());
)
);Re: 開いているすべてのテーブルを表示するリスト ボックスありがとう@txnelson !! それはまさに私が遭遇したバグです。 それまでの間、これに対する回避策を見つける必要があると思います。
Re: 開いているすべてのテーブルを表示するリスト ボックス以下の JSL を使用して、私が発見したことを次に示します。
Names Default To Here( 1 );
f2 = Function( {Temp_list},
T_list = Get Data Table List();
lb << remove all;
lb << append( T_list );
show("Close");
);
f1 = Function( {Temp_list},
T_list = Get Data Table List();
lb << remove all;
lb << append( T_list );
show("add");
);
asub = Subscribe to Data Table List( , onopen( f1 ) );
Subscribe to Data Table List(asub , onclose( f2 ) );
nw = New Window( "Trial",
Show Menu( 0 ),
V List Box(
T_list = Get Data Table List();
lb = List Box( T_list );
)
);
- 作成されたリスト ボックスには、エラーなしで新しいデータ テーブルが追加されます。
- f1 関数は加算ごとに 1 回実行されます。
- データ テーブルを閉じても、リスト ボックスから削除されません。
- 2 番目のデータ テーブルを閉じると、以前に閉じたデータ テーブルがリスト ボックスから削除されます。
- リスト ボックスを閉じて JSL を再度実行し、データ テーブルを閉じると、f2 関数が 2 回実行されます。JSL の最初の実行時の f2 関数が実行され、続いて f2 関数の 2 番目のインスタンスが実行されます。これは、Show() ステートメントを変更することで表示できます。Show ステートメントが次から変更された場合
Show( "Close" );
にShow( "Close 2" );
データテーブルを閉じると、両方のバージョンの Show() ステートメントが表示されます。
- 後続の JSL の実行では、f2 関数のコピーが追加され、各データ テーブルが閉じるたびに各コピーが実行されます。
- Clear Globals および Clear Symbols では、f2 関数の以前のバージョンが削除されるわけではありません。
これは明らかに JMP のバグであり、JMP サポート スタッフに報告する必要があります。
私は彼らにバグを提出しました。
Re: 開いているすべてのテーブルを表示するリスト ボックス私はいくつかの新しい発見をこのトピックに盛り込んでいます。誰かの役に立つかもしれません。私は翻訳者と似たようなことをしようとしていましたが、ここで説明されているのと同じ問題に遭遇しました。ここでの議論のおかげで、ほとんど解決できました。
私が追加できるのは、 翻訳者によって説明された奇妙な動作の説明です。問題は、以下のようにサブスクリプション名を明示的に指定せずにサブスクライブした場合です。
asub = Subscribe to data table list( , OnOpen( Show("opening...") ) )スクリプトを実行するたびに、新しい汎用名 ("_DTListSubscriber123") で新しいサブスクリプションが作成され、最後にカウンターが増加します。
コツは、スクリプトを実行するたびに同じサブスクライバーを上書きするように、サブスクライバーに明示的に名前を付けることです。例:
asub = Subscribe to data table list( "MyDTLSub1", OnOpen( Show("opening...") ) )または最後に登録を解除することもできます。例: < <>
Unsubscribe to data table list( asub, "ALL" )
その他のニュースとして、名前の変更については、非常に簡単に機能します。イベントは名前の変更後にトリガーされるようで、Get Data Table List() で新しい名前を取得できます。しかし、ドキュメントが不足しているため、これを機能させる前に別の理由で頭を悩ませていました。OnOpen および OnClose とは対照的に、OnRename 関数には 2 つの引数 (新しい名前/テーブルと古い名前/テーブル) が必要です。そうしないと、エラーが発生します。この特定のリストボックスの例では実際には必要ありませんが、必要な場合は、変数の型が異なることにも留意する必要があります。1 つはテーブルで、もう 1 つは文字列です (以下を参照)。
Names Default To Here(1);
f = Function ( { new_name_as_table, old_name_as_string },
print(asub||" renaming: "|| old_name_as_string || " to " || (new_name_as_table << get name) );
lb << set items( Get Data table List() );
);
asub = Subscribe to data table list( "MySub", OnRename( f ) );
nw = new window("Trial",show menu(0),
<< On Close(Unsubscribe to data table list( asub, "ALL")),
vlistbox(
lb = listbox(get data table list ());
)
);
dt = Open( "$SAMPLE_DATA/Tiretread.jmp" );
dt << set name( (dt<<GET name=""></GET>Otherwise I agree with general sentiment that the subscriber it's very hard to work with, you have to be really careful to tie up all the loose ends. Better documentation would be much appreciated.