Rechercher tous les éléments de l'arborescence d'affichage<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Salut,
Je voudrais utiliser JSL pour obtenir une liste de tous les objets dans une arborescence d'affichage à des fins de script.Plus précisément, j'aimerais obtenir une liste de tous les FrameBox dans une fenêtre, puis ajouter un script graphique à chacun.Ou mieux encore, je voudrais renvoyer une liste des FrameBox disponibles à l'utilisateur, puis demander à l'utilisateur de sélectionner le script graphique à ajouter.
Comment puis-je obtenir une liste de toutes les FrameBox dans une fenêtre ?Je souhaite obtenir une liste sous une forme adaptée aux scripts, et pas seulement afficher l'arborescence d'affichage.Est-ce possible?
Merci!
Re : Trouver tous les éléments de l'arborescence d'affichageQuelle version de JMP utilisez-vous ?
Tu tournes sur une box Windows ou sur un Mac ?
Pourriez-vous, s'il vous plaît, effacer le journal, réexécuter le script, puis inclure l'intégralité de la sortie du journal dans votre prochaine réponse ?
Re : Trouver tous les éléments de l'arborescence d'affichageJ'essaie d'exécuter ce script, mais j'obtiens le message d'erreur :
Send Attends Scriptable Object{1} dans l'accès ou l'évaluation de 'Send' , node << /*###*/className/*###*/
Une idée pourquoi ou ce que je devrais faire?
Merci,
Tova
Re : Trouver tous les éléments de l'arborescence d'affichageJ'essaie d'exécuter ce script, mais j'obtiens le message d'erreur :
Send Attends Scriptable Object{1} dans l'accès ou l'évaluation de 'Send' , node << /*###*/className/*###*/
Une idée pourquoi ou ce que je devrais faire?
merci
Re : Trouver tous les éléments de l'arborescence d'affichageSalut MS,
Le problème semble être que "parent << getTitle" ne donne pas de résultat pour Graph Builder dans JMP10.
Mon équipe s'en passera pour JMP10. Merci pour votre aide!
Re : Trouver tous les éléments de l'arborescence d'affichageJe ne peux peut-être pas vous aider car je n'ai pas de licence JMP 10. Qu'est-ce qui ne va pas ? Des messages dans le journal ?
Graph Builder a beaucoup évolué pour chaque nouvelle version de JMP. Je pense que la prise en charge des scripts de Graph Builder s'est également améliorée. Peut-être y a-t-il un type de zone d'affichage spécial dans le rapport v.10 Graph Builder qui n'est pas (encore) "scriptable", provoquant l'arrêt de la boucle while avant la fin de la recherche.
Vous pouvez également essayer d'utiliser Insérer() au lieu de Insérer l'élément().
Re : Trouver tous les éléments de l'arborescence d'affichageSalut MS ,
Merci encore pour votre script ; cela fonctionne à merveille pour JMP12.J'essaie maintenant de rendre le script compatible jusqu'à JMP10, et j'ai du mal à déboguer le script pour GraphBuilder.Savez-vous comment faire fonctionner votre script pour GraphBuilder dans JMP10 ?
dt = Ouvrir ( "$SAMPLE_DATA/Grande classe.jmp" ) ;
// Le script fonctionnera pour graph1.
graphique1 = dt << Ajuster le modèle (
Oui ( : hauteur ) ,
Effets ( : sexe ) ,
Personnalité ( "Moindres carrés standards" ) ,
Accent ( "Effet de levier" ) ,
Courir (
: hauteur << { Manque d'ajustement ( 0 ) , Tracé Réel par Prédit ( 1 ) ,
Boîte Cox Transformation Y ( 1 ) , Résiduel du tracé par prévision ( 1 ) ,
Effet de levier de l'intrigue ( 1 )}
)
) ;
// Le script plantera pour graph2.
/*
graph2 = dt << Générateur de graphes(
Afficher le panneau de configuration ( 0 ),
Variables( X( :hauteur ), Y( :poids ), Enveloppe( :âge ) ),
Éléments( Points( X, Y, Légende( 1 ) ) )
);
*/
Attendez ( 1 ) ;
gagner = Fenêtre actuelle () ;
// Tableau associatif reliant les numéros FrameBox affichés avec les titres
fbTitres = [ => ] ;
je = 1 ;
Alors que ( Est scriptable ( Essayer ( parent = gagner [ Cadre ( je )] << parent ) ) ,
Alors que ( parentType = Carboniser ( parent << nom du cours ) != "Boîte de contour" ,
parent = parent << parent
) ;
fbTitres << insérer un élément ( je , parent << obtenirTitre ) ;
je ++ ;
) ;
Montrer ( fbTitres ) ;
// Sélectionne les fenêtres.
gagner << Amenez la fenêtre à l'avant ;
Pour ( je = 1 , je <= N articles ( fbTitres ) , je ++,
gagner [ FrameBox ( je )] << Sélectionner ;
Nouvelle fenetre ( "Titre FrameBox" , << Modal , Zone de texte ( Éval ( fbTitres [ je ] ) ) ) ;
gagner [ FrameBox ( je )] << Désélectionner ;
) ;
Re : Trouver tous les éléments de l'arborescence d'affichageMerci MS.
Si vous postez votre réponse dans la discussion séparée pour cette question complémentaire, Trouver des FrameBox cachés ou affichés , je le marquerai correctement.
Très impressionnant.
Re : Trouver tous les éléments de l'arborescence d'affichageCela a fonctionné pour moi si vous n'avez pas besoin de tous les autres éléments intégrés à Ian.Je ne sais pas pourquoi il renvoie des listes de listes, mais je sélectionne simplement la première.
dt = ouvrir ( "$SAMPLE_DATA/Grande classe.jmp" ) ;
bivouac = (dt << Bivarié (Y( : hauteur , : poids) , X( : âge))) ;
frame_list = bivouac << xpath ( "//FrameBox" ) ;
attendez ( 2 ) ;
frame_list[ 1 ][ 1 ] <
attendez ( 2 ) ;
frame_list[ 2 ][ 1 ] <
Re : Trouver tous les éléments de l'arborescence d'affichageDébat intéressant. Voici un exemple, empruntant fortement aux exemples ci-dessus, où j'utilise un tableau associatif pour lier le numéros actuels de cadres affichés avec leurs titres.
dt = Ouvrir ( "$SAMPLE_DATA/Grande classe.jmp" ) ;
obj = dt << Ajuster le modèle (
Oui ( : hauteur ) ,
Effets ( : sexe ) ,
Personnalité ( "Moindres carrés standards" ) ,
Accent ( "Effet de levier" ) ,
Courir (
: hauteur << { Manque d'ajustement ( 0 ) , Tracé Réel par Prédit ( 1 ) , Boîte Cox Transformation Y ( 1 ) , Résiduel du tracé par prévision ( 1 ) ,
Effet de levier de l'intrigue ( 1 )}
)
) ;
rapport = Rapport ( obj ) ;
// Tableau associatif reliant les numéros de framebox affichés avec les titres
fbTitres = [ => ] ;
je = 1 ;
Alors que ( Est scriptable ( Essayer ( parent = Rapport [ Cadre ( je )] << parent )) ,
Alors que ( parentType = Carboniser ( parent << nom du cours ) != "Boîte de contour" , parent = parent << parent ) ;
fbTitres << insérer un élément ( je , parent << obtenirTitre ) ;
je ++ ;
) ;
Montrer ( fbTitres ) ;
// Sélectionne les fenêtres.
obj << Amenez la fenêtre à l'avant ;
Pour ( je = 1 , je <= N articles ( fbTitres ) , je ++,
rapport [ FrameBox ( je )] << Sélectionner ;
gagner = Nouvelle fenetre ( "Titre FrameBox" , << Modal , Zone de texte ( Éval ( fbTitres [ je ]))) ;
rapport [ FrameBox ( je )] << Désélectionner ;
) ;
Re : Trouver tous les éléments de l'arborescence d'affichageD'accord.Merci Ian.Un effet secondaire malheureux des FrameBox masquées renvoyées est que le titre de FrameBox peut ne pas correspondre au numéro de FrameBox, comme indiqué ci-dessous.Je peux peut-être faire fonctionner mon script en utilisant d'autres variantes de la fonction Try().
Noms par défaut ici ( 1 ) ;
Effacer le journal () ;
// Cette fonction parcourt récursivement un arbre d'affichage produisant
// une liste de pré-commande des noms des boîtes d'affichage qui constituent
// l'arbre. Il recherche également chaque FrameBox (qu'elle soit affichée ou non),
// et obtient le nom de l'OutlineBox parent
Pré-commander = Fonction ( { nœud } ,
Locale ( { chnode } ,
// Inspecter le nœud courant
nodeType = Carboniser ( nœud << nom du cours ) ;
Imprimer ( "Nœud : " || nodeType ) ;
Si ( nodeType == "FrameBox" ,
// Trouve le titre du nœud de contour parent de ce FrameBox
parent = nœud << parent ;
parentType = Carboniser ( parent << nom du cours ) ;
Alors que ( parentType != "Boîte de contour" ,
parent = parent << parent ;
parentType = Carboniser ( parent << nom du cours ) ;
) ;
Insérer dans ( fbTitres , parent << obtenirTitre ) ;
) ;
// Effectue la récurrence
chnode = nœud << enfant ;
Alors que ( Est scriptable ( chnode ) ,
Recurser ( chnode ) ;
chnode = chnode << frère ;
) ;
)
) ;
// Essayez 'preorder' . . .
dt = Ouvrir ( "$SAMPLE_DATA/Grande classe.jmp" ) ;
obj = dt << Ajuster le modèle (
Oui ( : hauteur ) ,
Effets ( : sexe ) ,
Personnalité ( "Moindres carrés standards" ) ,
Accent ( "Effet de levier" ) ,
Courir (
: hauteur << { Manque d'ajustement ( 0 ) , Tracé Réel par Prédit ( 1 ) , Régression de tracé ( 0 ) , Résiduel du tracé par prévision ( 1 ) , Effet de levier de l'intrigue ( 1 )
}
)
) ;
rapport = Rapport ( obj ) ;
fbTitres = {} ;
Pré-commander ( rapport ) ;
Imprimer ( "\!n" , fbTitres ) ;
// Sélectionne les fenêtres.
Attendez ( 1 ) ;
obj << Amenez la fenêtre à l'avant ;
Pour ( je = 1 , je <= N articles ( fbTitres ) , je ++,
Essayer (
rapport [ FrameBox ( je )] << Sélectionner ;
gagner = Nouvelle fenetre ( "Titre FrameBox" , << Modal , Zone de texte ( Éval ( fbTitres [ je ] ) ) ) ;
rapport [ FrameBox ( je )] << Désélectionner ;
)
) ;
Re : Trouver tous les éléments de l'arborescence d'affichageNe répondant pas vraiment directement à votre question, mais vous pourrez peut-être rendre l'échec que vous mentionnez bénin en utilisant la fonction 'Try ()'.
Re : Trouver tous les éléments de l'arborescence d'affichageSalut Ian@JMP ,
Merci encore pour le fonction de précommande.Existe-t-il un moyen pour la fonction de ne renvoyer que les FrameBox qui sont réellement affichées ?Ou existe-t-il un moyen pour JMP de dire quelles FrameBox sont affichées ou non ?
Je trouve que lorsque mon script essaie d'envoyer une commande à un FrameBox qui n'est pas affiché, cela provoque une erreur.
Re : Trouver tous les éléments de l'arborescence d'affichageMerci Ian.
Re : Trouver tous les éléments de l'arborescence d'affichageC'est parfaitement possible. Le code ci-dessous utilise la traversée de pré-commande pour parcourir l'arborescence d'affichage (et a été écrit à l'origine par Joseph Morgan dans la division JMP, je crois). Vous devriez pouvoir obtenir ce dont vous avez besoin avec quelques ajustements (selon le reste de votre code).
NomsDefaultToHere ( 1 ) ;
ClearLog () ;
// Cette fonction parcourt récursivement un arbre d'affichage produisant
// une liste de pré-commande des noms des boîtes d'affichage qui constituent
// l'arbre. Il recherche également chaque FrameBox (qu'elle soit affichée ou non),
// et obtient le nom de l'OutlineBox parent
Pré-commander = Fonction ({ nœud } ,
Locale ({ chnode } ,
// Inspecter le nœud courant
nodeType = Carboniser ( nœud << nom du cours ) ;
Imprimer ( "Nœud : " || nodeType ) ;
Si ( nodeType == "FrameBox" ,
// Trouve le titre du nœud de contour parent de ce FrameBox
parent = nœud << parent ;
parentType = Carboniser ( parent << nom du cours ) ;
Alors que ( parentType != "Boîte de contour" ,
parent = parent << parent ;
parentType = Carboniser ( parent << nom du cours ) ;
) ;
Insérer dans ( fbTitres , parent << obtenirTitre )
) ;
// Effectue la récurrence
chnode = nœud << enfant ;
Alors que ( Estscriptible ( chnode ) ,
Recurser ( chnode ) ;
chnode = chnode << frère ;
) ;
) ;
) ;
// Essayez 'preorder' . . .
dt = Ouvrir ( "$SAMPLE_DATA/Grande classe.jmp" ) ;
obj = dt << Ajuster le modèle (
Oui ( : hauteur ) ,
Effets ( : sexe ) ,
Personnalité ( "Moindres carrés standards" ) ,
Accent ( "Effet de levier" ) ,
Courir (
: hauteur << { Manque d'ajustement ( 0 ) , Tracé Réel par Prédit ( 1 ) ,
Régression de tracé ( 0 ) , Résiduel du tracé par prévision ( 1 ) ,
Effet de levier de l'intrigue ( 1 )}
)
) ;
rapport = rapport ( obj ) ;
fbTitres = {} ;
Pré-commander ( rapport ) ;
Imprimer ( "\!n" , fbTitres ) ;