公開日: 11/25/2021

データテーブルに登録(Subscribe)する

データテーブルに変化があったときにメッセージを受け取るようにするようには、Subscribeメッセージを使います。たとえば、列が追加または削除されたときにログにメッセージを送りたいとしましょう。

基本的な構文は次のようになります。

dt << Subscribe( keyname(<client>), On Delete Columns|On Add Columns|On Add Rows|On Delete Rows|On Rename Column|On Close|On Save|On Rename(function) );

第1引数は、登録(または"クライアント")の名前です。これにより、後で設定を解除することが可能になります。

メモ: 登録はデータテーブルに対して行われます。これはデータテーブルからの送信を登録するもので、プログラムやスクリプトに対して登録するものではありません。

アプリケーションは、データテーブルのクライアント(「一変量の分布」など、ほとんどのビルトインプラットフォーム)としても登録できます。閉じようとしているデータテーブルにクライアントがある場合、データテーブルを必要とする可能性のあるアプリケーションが開いていることが警告されます。

それぞれの登録は、解除するまで有効です。

dt << Unsubscribe("keyname", On Delete Columns | On Add Columns | On Add Rows | On Delete Rows | On Close | On Col Rename | All);

次の例は、行が追加または削除された場合に、ログにメッセージを送ります。

dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
delRowsFn = Function( {a, b, rows},
	dtname = ( a << Get Name());
	Print( dtname );
	Print( b );
	Print Matrix( rows );
);
addRowsFn = Function( {a, b, insert},
	dtname = ( a << Get Name() );
	Print( dtname );
	Print( b );
	Print( insert );
);
dt << Subscribe( "Test Delete", onDeleteRows( delRowsFn, 3 ) );
dt << Subscribe( "Test Add", onAddRows( addRowsFn, 3 ) );

Subscribe to Data Table List()は、新しいデータテーブルを追加したとき、閉じたとき、または名前を変更したときに、通知が出されるようにするデータテーブルのリストへの登録を行います。次の例は、登録および登録解除の方法を示しています。

f2 = Function( {x}, Show( x ) );
Show( Subscribe to Data Table List( "My Data", OnClose( f2 ) ) );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Wait( 2 );
Close( dt );
Show( Unsubscribe to Data Table List( "My Data" ) );

Subscribe to Data Table List( "My Data", OnClose( f2 ) ) = "My Data";

x = Data Table( "Big Class" );

Unsubscribe to Data Table List( "My Data" ) = Empty();

空のアプリケーション名

空のアプリケーション名とともにSubscribeが呼び出された場合、JMPは一意の名前を生成して呼び出し元に戻します。次の例では、appname2がクライアントとしてデータテーブルに登録されます。

dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
appname1 = dt << Subscribe( "", On Close( Print( "データテーブルを閉じる" ) ) );
appname2 = dt << Subscribe(
	""( "client" ),
	On Close(
		Function( {dtab},
			dtname = ( dtab << Get Name() );
			Print( dtname );
		)
	)
);
dt << Unsubscribe( appname1, On Close );
dt << Run Script( "一変量の分布" )
より詳細な情報が必要な場合や、質問があるときは、JMPユーザーコミュニティで答えを見つけましょう (community.jmp.com).