すべてのプラットフォーム オブジェクトのリスト?By 変数を使用して JSL 経由でプラットフォームを生成すると、戻り値は生成されたすべてのスクリプト可能オブジェクトのリストになります。
ダイアログを開くためだけにプラットフォーム コマンドを使用し、その後ユーザーが [OK] をクリックした後、生成されたすべてのスクリプト可能オブジェクトのリストを取得するための高速かつ堅牢な方法は何でしょうか?
何かのようなもの
(current report() << xpath("//OutlineBox")) << get scriptable object()... 意味のある OutlneBox の賢い事前選択、つまり個別のケースに合わせて調整する必要のない普遍的な事前選択を使用します。
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
New Window("test",V List Box(
dist1=Distribution (by( :age ))), // return value: list of the scriptable objects
dist2 = Distribution(
Continuous Distribution(Column( :height )),
By( :age )
));自動化とスクリプト作成Re: すべてのプラットフォーム オブジェクトのリスト?さまざまなプラットフォームをテストして、堅牢な XPath を決定することが 1 つの選択肢になると思います。
Re: すべてのプラットフォーム オブジェクトのリスト?取り組んでいます:)
誰かがすでに5年前にこれをやっていて、解決策を直接提供できることを願っていました...
Re: すべてのプラットフォーム オブジェクトのリスト?表示ボックスのリストに「重複のドロップ」はありますか?
標準的なアプローチは次のとおりです。
associative array () << get keys
機能しないようです。
Re: すべてのプラットフォーム オブジェクトのリスト?すべてのアウトライン ボックスを取得すると、それらは異なるオブジェクトを参照するため、実際には重複することはありません。
By 変数を使用して作成されたいくつかの異なるプラットフォームを見てみると、おそらく共通点が見つかるでしょう。
分布:

一方通行:

グラフ ビルダー (By 変数を使用して作成されることは少しまれです):

HeadBox、ListBox、およびOutlineBox(グラフビルダーでは、正しい表示ボックスはOwnerBoxだと思います)があり、それらには特定の順序があります。 また、OutlineBox/OwnerBoxにもhelpKey属性があります。
Re: すべてのプラットフォーム オブジェクトのリスト?それで:
(current report() << xpath("//OutlineBox[@helpKey]"))Re: すべてのプラットフォーム オブジェクトのリスト?その XPath を使用すると、少なくとも場合によっては参照が多すぎることがあると思います。 私が試したいのは、ListBox 内にある helpKey 属性を持つアウトラインボックスの最初のレベルにアクセスすることです。 これが各 JMP プラットフォームで機能するかどうかはわかりませんが、これが出発点になることを願っています
obs = (current report() << xpath("//ListBox//OutlineBox[@helpKey and not(ancestor::OutlineBox[@helpKey])]")) << get scriptable object();
Re: すべてのプラットフォーム オブジェクトのリスト?ありがとう、うまくいきます:)
しかし残念ながら、かなり遅いです。
したがって、すべての項目を取得してから、親と helpKey を要求する方がよいかもしれません *)。
*) まだ動作していません...
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
New Window( "test",
Outline Box( "main", Life Distribution( Perspective( Compare Groups ), Y( :weight ), Grouping( :sex ), By( :age ) ) )
);
t0 = HP Time();
list1 = Current Report() << xpath( "//OutlineBox[@helpKey]" );
Show( (HP Time() - t0) / 1000000 );
t0 = HP Time();
list2 = Current Report() << xpath( "//ListBox//OutlineBox[@helpKey and not(ancestor::OutlineBox[@helpKey])]" );
Show( (HP Time() - t0) / 1000000 );
t0 = HP Time();
firstResults = Current Report() << xpath( "//OutlineBox[@helpKey]" );
list3 = {};
For Each( {item, idx}, firstResults[{1, 2}],
found = Regex( (item << parent) << get xml(), "\A.*helpKey" ); //unfortunately not restricted to first line like should be !??!?!
If( Is Empty( item << parent ) | Is Missing( found ),
Insert Into( list3, item )
);
);
Show( (HP Time() - t0) / 1000000 );
(HP 時間() - t0) / 1000000 = 0.048218; // 制限なし
(HP Time() - t0) / 1000000 = 7.204071; // XPath オールインワン
(HP 時間() - t0) / 1000000 = 0.152291; // 手動による事後選択
Re: すべてのプラットフォーム オブジェクトのリスト?ほとんどの場合、2 番目の XPath を最適化できます。 いくつかの提案
//ListBox/*/OutlineBox[@helpKey and not(ancestor::OutlineBox[@helpKey])]
または
//OutlineBox[@helpKey and not(ancestor::OutlineBox[@helpKey])]
Re: すべてのプラットフォーム オブジェクトのリスト?ローカル データ フィルターを削除します (クラス名:データフィルター[] -そしてそうではありません「アウトラインボックス」 
collectedOutlineBoxObjects = (Current Report() << xpath( "//OutlineBox[@helpKey and not(ancestor::OutlineBox[@helpKey])]" )) << get scriptable object() ;
ListOfPlatFormObjects={};
For Each({item},collectedOutlineBoxObjects, If(item << class name =="OutlineBox", Insert Into(ListOfPlatFormObjects, item)));
Re: すべてのプラットフォーム オブジェクトのリスト?データフィルターにはhelpKeyとして特定の値があるため、純粋なXPathを使用できる可能性が最も高くなります(少なくとも私の簡単なチェックに基づくと)。
//OutlineBox[@helpKey and not(@helpKey = 'Data Filter') and not(ancestor::OutlineBox[@helpKey])]
1つだけ持っていてもいいかもしれません
//OutlineBox[@helpKey and not(ancestor::OutlineBox[@helpKey] or @helpKey = 'Data Filter')]