Verehrte Gäste,
(JMP Pro 16.1.0, Win10)
Ich habe ein Problem im Zusammenhang mit einem früheren Beitrag von mir hier , wenn Sie an einer "Hintergrundgeschichte" interessiert sind.
Das Hauptproblem, das ich jetzt habe, ist, dass der Befehl Throw() nicht wie erwartet funktioniert. In meinem Code (siehe am Ende für den vollständigen Code) habe ich an einigen Stellen einen Test, um zu sehen, ob es derzeit einen offenen Graph-Builder-Bericht gibt, der so aussieht und in eine Expr()-Anweisung eingeschlossen ist:
If( Is Empty( Current Report() ) == 1,
Throw( "No Graph Builder Window is Open" )
);
Das Problem ist, wann immer ich den Code ausführe (als würde ich ihn von einem Symbolleisten-Hotbutton aus ausführen), scheint er diese Zeilen zu überspringen und ignoriert, wenn kein Bericht geöffnet ist. Aber wenn ich den Code "Zeile für Zeile" ausführe, wird er richtig feststellen, dass kein Bericht geöffnet ist, und den Benutzer benachrichtigen.
Ich versuche, Code zu schreiben, der an Benutzer in meiner Organisation verteilt werden soll, und versuche, ihn robust genug zu machen, um verschiedene Arten von Situationen zu bewältigen, z kann mehrere Datentabellen enthalten).
Hier ist das Konzept des Codes (das Problem tritt bei Punkt 6 auf): Ein Benutzer erstellt eine Grafik in Graph Builder, möchte dann eine routinemäßige Änderung der Grafik vornehmen (siehe Link oben für Details dazu), der Benutzer klickt dann auf die Symbolleiste Hotbutton, um diese Aktion auszuführen.
- Der Code führt den Graphic_Expr-Ausdruck aus, um die Position der Grafik zu bestimmen – befindet sie sich in einer „eigenständigen“ Datentabelle oder innerhalb eines Projekts (es kann nur eine Option ausgewählt werden). -> (gehe zu)
- Je nachdem, welches Kontrollkästchen ausgewählt ist, führt der Code dann entweder den dt_win_Expr- oder den prj_win_Expr-Code aus (im Moment habe ich ihn nur für die Datentabellenoption eingerichtet, während ich den Code teste, aber im Idealfall sollte er am Ende mehr oder weniger gleich funktionieren) . -> (gehe zu)
- Wenn es sich um eine eigenständige Datentabelle handelt, wird dt_win_Expr ausgeführt und ein Fenster erstellt, in dem der Benutzer die Datentabelle auswählen kann, in der sich die zu bearbeitende Grafik befindet. Denken Sie daran, dass der Benutzer mehr als eine Datentabelle geöffnet haben könnte, wobei möglicherweise mehr als ein Graph Builder geöffnet ist. | (oder)
- Wenn der Benutzer ein Projekt auswählt, wird es in ähnlicher Weise den prj_win_Expr (noch nicht abgeschlossen) ausführen, damit der Benutzer auswählt, welches Projekt (falls mehr als eines geöffnet ist) und nachfolgende Datentabellen innerhalb dieses Projekts. -> (gehe zu)
- Sobald eine Datentabelle ausgewählt ist, ob eigenständig oder innerhalb eines Projekts, führt der Code den SquarifyWin_Expr-Ausdruck aus. Das erste, was es hier tut, ist zu testen, ob tatsächlich ein aktueller Bericht existiert – der If()-Code von oben (ich muss möglicherweise ändern und testen, ob der aktuelle Bericht ein Graph Builder ist oder nicht). **Hier funktioniert der Code NICHT wie erwartet. Auch wenn kein Graph Builder geöffnet ist, wird mit dem Rest des Codes fortgefahren, wenn die Warnung ausgegeben werden sollte.** Wenn alles funktioniert....-> (gehe zu)
- Basierend auf den Pixelabmessungen und ob quadriert werden soll, führt der Code dann den RprtUpdate_Expr-Ausdruck aus, wo er die gewünschten Aktualisierungen an den Graph Builder-Bericht sendet.
Ich hoffe, diese Beschreibung ist sinnvoll und hilft, den gewünschten Programmierpfad / die gewünschte Funktionalität in einen Kontext zu stellen.
Vielen Dank im Voraus für jede Hilfe bei der Suche nach einer Lösung. Vollständiger JSL-Code am Ende.
Vielen Dank!,
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>