親愛なるみんな、
(JMP Pro 16.1.0、Win10)
私の以前の投稿に関連する問題がありますここ、「バックストーリー」に興味がある場合。
私が今抱えている主な問題は、Throw() コマンドが期待どおりに機能しないことです。 私のコード (完全なコードについては末尾を参照) では、いくつかの場所で、現在開いているグラフ ビルダー レポートがあるかどうかを確認するテストがあり、次のようになり、and Expr() ステートメントでラップされます。
If( Is Empty( Current Report() ) == 1,
Throw( "No Graph Builder Window is Open" )
);
問題は、コードを実行するたびに (ツールバーのホットボタンから実行するかのように)、これらの行をスキップするように見え、開いているレポートがない場合は無視されることです。 しかし、コードを「1行ずつ」実行すると、開いているレポートがないことが正しくキャッチされ、ユーザーに通知されます。
組織全体のユーザーに配布するコードを作成しようとしています。たとえば、ユーザーが 1 つ以上のデータ テーブルを開いている場合や 1 つ以上のプロジェクトを開いている場合 (これは、複数のデータ テーブルを含めることができます)。
コードの概念は次のとおりです (項目 6 で問題が発生します): ユーザーが Graph Builder でグラフィックを作成し、次にグラフィックの定期的な変更を行いたい (詳細については上記のリンクを参照)、ユーザーがツールバーをクリックします。上記のアクションを実行するためのホットボタン。
- このコードは、Graphic_Expr 式を実行して、グラフィックの場所を特定します。つまり、それが「スタンドアロン」データ テーブル内にあるか、プロジェクト内にあるか (選択できるオプションは 1 つだけです)。 -> (に行く)
- どのチェックボックスが選択されているかに応じて、コードは dt_win_Expr または prj_win_Expr コードを実行します (現在、コードをテストする際にデータ テーブル オプションに対してのみ設定していますが、理想的には最終的にほぼ同じように機能するはずです)。 . -> (に行く)
- スタンドアロン データ テーブルの場合、dt_win_Expr が実行され、ユーザーが編集するグラフィックが存在するデータ テーブルを選択するためのウィンドウが作成されます。 ユーザーは複数のデータ テーブルを開いている可能性があり、複数のグラフ ビルダーが開いている可能性があることを思い出してください。 | | (また)
- 同様に、ユーザーがプロジェクトを選択すると、prj_win_Expr (まだ完了していません) が実行され、ユーザーはどのプロジェクト (複数開いている場合) とそのプロジェクト内の後続のデータ テーブルを選択するようになります。 -> (に行く)
- スタンドアロンまたはプロジェクト内のデータ テーブルが選択されると、コードは SquarifyWin_Expr 式を実行します。 ここで最初に行うことは、実際に現在のレポートが存在するかどうかをテストすることです。つまり、上記の If() コードです (現在のレポートがグラフ ビルダーであるかどうかを変更してテストする必要があるかもしれません)。 **これは、コードが期待どおりに機能しない場所です。 グラフ ビルダーが開かれていない場合でも、警告をスローする必要があるときに残りのコードを続行します。** すべてが機能する場合....-> (に移動)
- ピクセルの寸法と四角化するかどうかに基づいて、コードは RprtUpdate_Expr 式を実行し、必要な更新をグラフ ビルダー レポートに送信します。
この説明が理にかなっていて、私が望むプログラミング パス/機能が何であるかを理解するのに役立つことを願っています。
解決策を見つけるための助けを前もって感謝します。 最後に完全なJSLコード。
ありがとう!、
DS
Names Default To Here( 1 );
Clear Symbols();
RprtUpdate_Expr = Expr(
gb = Current Report()[Outline Box( 1 )] << Get Scriptable Object;
Report( gb )[framebox( 1 )] << FrameSize( widthN, heightN );
theMax = Max( Report( gb )[axisbox( 1 )] << get max, Report( gb )[axisbox( 2 )] << get max );
theMin = Min( Report( gb )[axisbox( 1 )] << get min, Report( gb )[axisbox( 2 )] << get min );
Report( gb )[framebox( 1 )] << Xaxis( Min( theMin ), Max( theMax ) );
Report( gb )[framebox( 1 )] << Yaxis( Min( theMin ), Max( theMax ) );
Report( gb )[framebox( 1 )] << AddGraphicsScript(
xmin = X Origin();
xmax = X Origin() + X Range();
ymin = Y Origin();
ymax = Y Origin() + Y Range();
Pen Color( "blue" );
Pen Size( 1 );
Line Style( "solid" );
Line( {xmin, ymin}, {xmax, ymax} );
);
);
SquarifyWin_Expr = Expr(
If( Is Empty( Current Report() ) == 1,
Throw( "No Graph Builder Window is Open" )
);
nwin = New Window( "Enter Size of Desired Graph",
<<RETURN result=""></RETURN>