Besoin d'aide pour le dépannage d'un script graphique : « Le script graphique a signalé des erreurs dans le journal »J'ai besoin d'aide pour comprendre comment référencer l'axe de la framebox depuis un script graphique.
Voici ce que j'ai maintenant :
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" ) );
J'ai besoin d'une boîte de contexte car j'ai plusieurs Go dans la même fenêtre avec des descripteurs indépendants.
Tout fonctionne correctement jusqu'à ce que je sélectionne un point sur le graphique ou une ligne dans le tableau et que je l'exclue.
Ensuite, mes graphismes disparaissent et j'obtiens les messages « Le script graphique a signalé des erreurs dans le journal » et « L'envoi de l'objet scriptable attendu lors de l'accès ou de l'évaluation de 'List', {/*###*/DisplayBox[], DisplayBox[]} » dans le journal.
L'erreur se produit à cause des lignes suivantes :
box:axisMax = box:axis << Get Max;
box:axisMin = box:axis << Get Min;
Si je les commente, il n'y a plus d'erreurs, mais dans ce cas, les valeurs minimales et maximales des axes ne sont plus mises à jour si l'utilisateur modifie l'échelle des axes.
Comment puis-je y remédier ?
Automatisation et scriptageRe: Besoin d'aide pour le dépannage d'un script graphique : « Le script graphique a signalé des erreurs dans le journal »Cela démontre le problème de manière beaucoup plus simple.
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);
Lorsque vous excluez des lignes, le générateur de graphiques est recalculé et vos références sont supprimées.
Re: Besoin d'aide pour le dépannage d'un script graphique : « Le script graphique a signalé des erreurs dans le journal »Une solution possible serait d'ajouter
box:axis = box:rgb << XPATH("//AxisBox");
à votre script graphique
Re: Besoin d'aide pour le dépannage d'un script graphique : « Le script graphique a signalé des erreurs dans le journal »Oui, je me doutais bien qu'il s'agissait d'un redessin, mais je n'arrivais pas à trouver comment le référencer.
Re: Besoin d'aide pour le dépannage d'un script graphique : « Le script graphique a signalé des erreurs dans le journal »Oui, ça a fonctionné. Pour une raison ou une autre, je pensais qu'il serait impossible de faire référence au rapport depuis le script.
Re: Besoin d'aide pour le dépannage d'un script graphique : « Le script graphique a signalé des erreurs dans le journal »@jthi , une dernière question.
Supposons que je veuille encapsuler l'ajout d'un script graphique dans une fonction, qui ajouterait ce script à un générateur de graphiques.
Cette fonction aurait simplement besoin de prendre en entrée une référence à une DisplayBox, puis de trouver la FrameBox correspondante et d'y ajouter le script.
Actuellement, dans ma fonction, je dois encapsuler Graph Builder dans une boîte de contexte, afin que les éléments que je crée (que je traite spécifiquement) à l'aide de ce script soient indépendants des autres éléments des autres Graph Builders dans la même fenêtre.
Question : Quelle boîte d’affichage dois-je fournir à la fonction pour enregistrer le contexte isolé ? Dans le XML, je vois EvalContextBox ; est-ce celle générée par « Context Box » ?
Quelle serait la syntaxe à l'intérieur de la fonction ? Puisque la fonction n'aura pas de contexte Box, je dois supprimer l'espace de noms « box ». Comment limiter le contexte dans ce cas ?
Re: Besoin d'aide pour le dépannage d'un script graphique : « Le script graphique a signalé des erreurs dans le journal »Je suis un peu confus quant à ce que vous souhaitez passer à la fonction : une simple référence au générateur de graphes ? Le générateur de graphes serait-il toujours dans la boîte de contexte ?
Re: Besoin d'aide pour le dépannage d'un script graphique : « Le script graphique a signalé des erreurs dans le journal »C'est une des questions que je me pose : que dois-je passer à la fonction et ai-je encore besoin de la boîte de contexte dans ce cas ?
Actuellement, mon script est structuré de la manière suivante :
//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 );
Ensuite, je travaille avec le tableau de données pour sélectionner ce que je veux représenter graphiquement, etc., et j'utilise cette fonction pour créer une boîte de contexte avec un générateur de graphiques à l'intérieur, renvoyant une boîte de contexte :
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>
Ensuite, je sélectionne les colonnes que je dois représenter graphiquement, et pour chacune d'elles, je crée des boîtes de contexte avec la plateforme Graph Builder à l'intérieur :
For Each( {Y_Parameter, index}, Y_Parameters,
lub << Append( GB_func( dt, X_Parameter, Y_Parameter));
);
Ce que je souhaite, c'est une fonction qui me permette de passer la boîte d'affichage ou la référence nécessaire à chaque Graph Builder distinct, et qui ajoute le même script graphique fonctionnant de la même manière qu'actuellement, indépendamment des autres Graph Builders.
L'objectif final est de pouvoir activer/désactiver les éléments graphiques supplémentaires du graphique via le menu contextuel de Graph Builder ; il existe des cas d'utilisation avec et sans graphiques. Supprimer le script graphique ne pose pas de problème à ma connaissance ; je cherche à savoir comment en ajouter un dans ce cas précis.
Re: Besoin d'aide pour le dépannage d'un script graphique : « Le script graphique a signalé des erreurs dans le journal »La boîte de contexte est probablement la méthode la plus simple à utiliser. Vous pouvez également stocker les valeurs « globales » dans un espace de noms autre que la boîte (ici, window, global, named, anonymous, etc.). Dans ce cas, vous pouvez supprimer la boîte de contexte et passer la référence du générateur de graphes.
Re: Besoin d'aide pour le dépannage d'un script graphique : « Le script graphique a signalé des erreurs dans le journal »Quel est le conteneur d'affichage créé par Context Box ? S'agit-il d'EvalContextBox ? Comment puis-je limiter la portée des variables contenues dans le script graphique à cet EvalContextBox ? Dois-je simplement utiliser l'espace de noms de la boîte ? Ou existe-t-il un moyen d'obtenir la référence de l'espace de noms associé à EvalContextBox ?
Re: Besoin d'aide pour le dépannage d'un script graphique : « Le script graphique a signalé des erreurs dans le journal »Vous pouvez utiliser Namespace()
Names Default To Here(1);
nw = New Window("",
Context Box(
box:var = "",
box:tb = Text Edit Box("AA", <
<SET function=""></SET>
<P>Modifiez la valeur du champ de texte et exécutez à nouveau la dernière ligne.</P>