Ich benötige Hilfe bei der Fehlerbehebung des Grafikskripts: „Das Grafikskript meldete Fehler im Protokoll.“Ich benötige Hilfe, um zu verstehen, wie ich innerhalb eines Grafikskripts auf die Achsen eines Framebox zugreifen kann.
Hier ist mein aktueller Stand:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
ob_group = Outline Box( "Testing Handles: " || (dt << Get Name) );
nw = New Window( (dt << get name), ob_group );
GB_wHandle = Function( {dt, X_parameter, Y_Parameter, groupByColumnString},
groupByColumn = Column( dt, groupByColumnString );
cb = Context Box(
box:exx = 60;
box:exy = 60;
box:gb = Graph Builder(
Size( 450, 350 ),
Ignore Platform Preferences( 1 ),
Show Control Panel( 0 ),
Variables( X( Column( X_Parameter ) ), Y( Column( Y_Parameter ) ), Overlay( groupByColumn ) ),
Elements( Points( X, Y ), Smoother( X, Y ) )
);
box:rgb = box:gb << Report;
box:framebox = box:rgb << XPATH( "//FrameBox" );
box:axis = box:rgb << XPATH( "//AxisBox" );
box:axisMax = box:axis << Get Max;
box:axisMin = box:axis << Get Min;
{box:exx, box:exy} = box:axisMin + 10;
box:framebox << Add Graphics Script(
"Front",
Description( "Handle" ),
//Script start
{Handle(
box:exx,
box:exy,
box:exx = x;
box:exy = y;
) ;
box:axisMax = box:axis << Get Max;
box:axisMin = box:axis << Get Min;
Pen Color( "Red" ) ; Line( box:axisMin, {box:exx, box:exy} ) ; }
);
);
Return( cb );
);
ob_group << Append( GB_wHandle( dt, "height", "weight", "sex" ) );
Ich benötige einen Kontext, da ich mehrere GBs im selben Fenster mit unabhängigen Handles habe.
Alles funktioniert, bis ich einen Punkt im Diagramm oder eine Zeile in der Tabelle auswähle und ausschließe.
Dann verschwinden meine Grafiken und ich erhalte die Meldungen „Graphic script reported errors in log“ und „Send Expects Scriptable Object in access or evaluation of 'List' , {/*###*/DisplayBox[], DisplayBox[]}“ im Protokoll.
Der Fehler tritt aufgrund folgender Zeilen auf:
box:axisMax = box:axis << Get Max;
box:axisMin = box:axis << Get Min;
Wenn ich sie auskommentiere, treten keine Fehler auf – aber dann werden die Achsenminima/Maxima nicht aktualisiert, falls der Benutzer die Achsenskala ändert.
Wie kann ich das beheben?
Automatisierung und SkripterstellungBetreff: Hilfe bei der Fehlerbehebung im Grafikskript benötigt: „Grafikskript meldet Fehler im Protokoll“Dies veranschaulicht das Problem auf viel einfachere Weise.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
ob_group = Outline Box("Testing Handles: " || (dt << Get Name));
gb = dt << Graph Builder(
Size(450, 350),
Ignore Platform Preferences(1),
Show Control Panel(0),
Variables(X(Column("height")), Y(Column("weight")), Overlay("sex")),
Elements(Points(X, Y), Smoother(X, Y))
);
fbs = Report(gb) << XPATH("//FrameBox");
abs = Report(gb) << XPATH("//AxisBox");
show(fbs, abs);
dt << Select Rows(1) << Hide and Exclude(1) << Clear Select;
wait(1);
show(fbs, abs);
Wenn Sie Zeilen ausschließen, wird der Graph Builder neu berechnet und Ihre Verweise werden gelöscht.
Betreff: Hilfe bei der Fehlerbehebung im Grafikskript benötigt: „Grafikskript meldet Fehler im Protokoll“Eine Möglichkeit, dieses Problem zu beheben, wäre das Hinzufügen von
box:axis = box:rgb << XPATH("//AxisBox");
zu Ihrem Grafikskript
Betreff: Hilfe bei der Fehlerbehebung im Grafikskript benötigt: „Grafikskript meldet Fehler im Protokoll“Ja, ich dachte mir schon, dass es neu gezeichnet wird, konnte aber nicht genau feststellen, wie ich darauf verweisen sollte.
Betreff: Hilfe bei der Fehlerbehebung im Grafikskript benötigt: „Grafikskript meldet Fehler im Protokoll“Ja, es hat funktioniert. Aus irgendeinem Grund dachte ich, ich könnte nicht innerhalb des Skripts auf den Bericht zugreifen.
Betreff: Hilfe bei der Fehlerbehebung im Grafikskript benötigt: „Grafikskript meldet Fehler im Protokoll“@jthi , noch eine Frage.
Angenommen, ich möchte das Hinzufügen eines Grafikskripts in eine Funktion einbetten, dann würde dieses Skript einem Graph Builder hinzugefügt.
Diese Funktion müsste lediglich eine Referenz auf eine Display Box entgegennehmen, dann die entsprechende Framebox finden und das Skript hinzufügen.
Aktuell muss ich in meiner Funktion den Graph Builder in eine Kontextbox einbetten, damit die Elemente, die ich mit diesem Skript erstelle (genauer gesagt bearbeite), unabhängig von anderen Elementen in anderen Graph Buildern im selben Fenster sind.
Frage – Welche Anzeigebox sollte ich der Funktion zum Speichern des isolierten Kontexts bereitstellen? Im XML sehe ich EvalContextBox – wurde diese von „Context Box“ generiert?
Wie sähe die Syntax innerhalb der Funktion aus? Da die Funktion keine Kontextbox haben wird, muss ich den Namespace „box“ entfernen. Wie kann ich in diesem Fall den Kontext einschränken?
Betreff: Hilfe bei der Fehlerbehebung im Grafikskript benötigt: „Grafikskript meldet Fehler im Protokoll“Ich bin etwas verwirrt darüber, was Sie der Funktion übergeben möchten, nur eine Referenz auf den Graph-Builder? Befände sich der Graph-Builder dann noch innerhalb der Kontextbox?
Betreff: Hilfe bei der Fehlerbehebung im Grafikskript benötigt: „Grafikskript meldet Fehler im Protokoll“Das ist eine meiner Fragen: Was soll ich der Funktion übergeben und brauche ich in diesem Fall überhaupt noch die Kontextbox?
Mein Skript ist derzeit folgendermaßen strukturiert:
//Preparing display boxes structure and window
lub = Lineup Box( N );
ob_group = Outline Box( "Report: " || (dt << Get Name) );
ob_group << Append( lub );
nw = New Window( (dt << get name), Window View("Invisible"), ob_group );
Dann bearbeite ich die Datentabelle, um auszuwählen, was ich darstellen möchte usw., und verwende diese Funktion, um eine Kontextbox mit einem darin enthaltenen Graph Builder zu erstellen, die die Kontextbox zurückgibt:
GB_func = Function( {dt, X_parameter, Y_Parameter...},
cb = Context Box(
gb = Graph Builder(...
//
<GRAPH builder="" code="">
); box:rgb = gb << Report; //Doing some other stuff //Adding Graphics Script box:framebox = box:rgb << XPATH( "//FrameBox" ); box:framebox << Add Graphics Script(...) Return( cb ); );
</GRAPH>
Dann nehme ich die Spalten, die ich darstellen möchte, und erstelle für jede Spalte mit der Graph Builder-Plattform darin Kontextboxen:
For Each( {Y_Parameter, index}, Y_Parameters,
lub << Append( GB_func( dt, X_Parameter, Y_Parameter));
);
Ich wünsche mir eine Funktion, der ich für jeden einzelnen Graph Builder die benötigte Anzeigebox oder Referenz übergeben kann, und die dann dasselbe Grafikskript hinzufügt, das genauso funktioniert wie bisher – unabhängig von anderen Graph Buildern.
Das Ziel ist es, die zusätzlichen Grafiken im Diagramm über das Kontextmenü des Diagramm-Generators ein- und ausschalten zu können – es gibt Anwendungsfälle sowohl mit als auch ohne Grafiken. Das Entfernen des Grafikskripts ist meines Wissens kein Problem; ich versuche herauszufinden, wie man in diesem Fall ein Skript hinzufügt.
Betreff: Hilfe bei der Fehlerbehebung im Grafikskript benötigt: „Grafikskript meldet Fehler im Protokoll“Die Kontextbox lässt sich wahrscheinlich am einfachsten übergeben. Alternativ können Sie die „globalen“ Werte in einem anderen Namespace als der Kontextbox speichern (z. B. window, global, named, anonymous usw.). In diesem Fall können Sie die Kontextbox weglassen und stattdessen die Referenz zum Graph-Builder übergeben.
Betreff: Hilfe bei der Fehlerbehebung im Grafikskript benötigt: „Grafikskript meldet Fehler im Protokoll“Was ist die Anzeigebox, die vom Kontextfeld erzeugt wird? Ist es eine EvalContextBox? Wie kann ich festlegen, dass die Variablen im Grafikskript nur innerhalb dieser EvalContextBox gültig sind? Reicht es, den Box-Namespace zu verwenden? Oder gibt es eine Möglichkeit, die Namespace-Referenz der EvalContextBox zu ermitteln?
Betreff: Hilfe bei der Fehlerbehebung im Grafikskript benötigt: „Grafikskript meldet Fehler im Protokoll“Sie können Namespace() verwenden.
Names Default To Here(1);
nw = New Window("",
Context Box(
box:var = "",
box:tb = Text Edit Box("AA", <
<SET function=""></SET>
<P>Ändern Sie den Wert im Textbearbeitungsfeld und führen Sie die letzte Zeile erneut aus.</P>