Script pour la mise en page du projetJ'ai un script qui génère 5 fenêtres et je souhaite utiliser le script pour organiser la sortie dans un format de projet et organiser la mise en page.
Je voudrais la liste des fenêtres à droite. A gauche, je voudrais deux lignes :
rangée du haut, je veux deux graphiques côte à côte.
ligne du bas, je veux trois tableaux affichés dans des onglets.
J'ai créé le script ci-dessous, mais il ne fait pas ce que je veux.Actuellement, tous les 5 sont affichés sur une seule ligne sur cinq onglets différents, avec la liste des fenêtres sur la droite.
Quelqu'un peut me diriger dans la bonne direction?
Project = new project();
Move to Project( destination( Project ), windows( {"Table1" ,"Table2" , "Table3", "Graph1", "Graph2"} ));
Project << Set Layout(
H Splitter Box(
<<SET sizes=""></SET>Re : Script pour la mise en page du projetExemple le plus simple possible de création d'un projet, de création d'une table de données et d'enregistrement de cette table dans le contenu du projet :
new Project(
Run Script(
dt = New Table( "My Table",
Add Rows( 3 ),
New Column( "Column 1",
Set Values( [1, 2, 3] )
)
);
dt << Save As("$PROJECT/my table.jmp");
);
);
La variable de chemin $PROJECT correspond au contenu du projet du projet actuel (et en tant que telle n'est utilisable qu'à l'intérieur d'un projet). Ce serait parfaitement bien de créer les tables en dehors du projet, puis de les déplacer, bien que si cela n'est pas nécessaire pour une raison externe, il est généralement plus efficace de tout créer directement dans le projet la première fois.
Re : Script pour la mise en page du projetLe corps principal du script génère 3 fichiers de données et les relie entre eux.La façon dont il est écrit maintenant, les fichiers sont enregistrés dans le dossier Temp du lecteur C, puis déplacés dans le projet.Je voudrais ajouter une section de contenu et y ajouter ces trois fichiers avec le script.Je pense alors que je mettrais à jour l'analyse qui est faite pour ouvrir les fichiers dans le projet et créer des graphiques de capacité de processus.
Re : Script pour la mise en page du projetLe code de mise en page du projet doit être (plus ou moins) le même qu'avant. La différence dans JMP 16 est que lorsque vous enregistrez votre contenu, vous pouvez l'enregistrer dans le fichier de projet si vous le souhaitez. Vous le faites automatiquement à partir d'un script, si vous le souhaitez, même si j'aurais besoin d'en savoir un peu plus sur votre projet pour recommander une méthode spécifique.
Re : Script pour la mise en page du projetJMP 16 apporte une amélioration à la plate-forme de projet en incorporant les fichiers dans le fichier de projet pour l'enregistrement et le transfert. C'est une belle amélioration. Mon script JMP 15 pour déplacer des fichiers d'un rapport vers un fichier de projet fonctionne toujours en 16 mais je voudrais mettre à jour pour utiliser les nouvelles fonctionnalités de JMP16. Je ne sais pas à quoi ressemblerait la nouvelle structure de script pour ce cas. Aucune suggestion? Vous trouverez ci-joint à quoi ressemble mon script maintenant (inexécutable car tous les fichiers basés sur mon PC et les échanges de données effectués par la partie précédente du script.
Re : Script pour la mise en page du projetVous pouvez définir un TabBox particulier pour avoir un certain onglet actuel à l'aide des API TabBox habituelles. (L'index interactif des scripts JMP est une bonne ressource pour les apprendre). Voici une façon de le faire avec l'exemple avec lequel nous avons travaillé :
Project = new project();
Move to Project( destination( Project ), windows( {table1, table2, table3} ));
Project << Set Layout(
H Splitter Box(
<<SET sizes=""></SET>
Nous enregistrons simplement la zone d'onglet dans une variable lorsque nous la créons, puis utilisons cette variable plus tard pour définir l'onglet que nous voulons être courant.
Re : Script pour la mise en page du projetSalut Aaron,
J'ai enfin réussi à le faire fonctionner, merci beaucoup !
J'essayais de définir l'ID de la fenêtre lors de la création des tableaux et du graphique, et je pense que cela ne fonctionnait pas. Il fait donc la mise en page correctement maintenant.
Juste une autre question connexe : comment puis-je l'obtenir pour afficher un onglet spécifique ? Existe-t-il un moyen de les commander ? Il affiche toujours le même tableau par défaut mais ce n'est pas celui que je veux afficher.
Re : Script pour la mise en page du projetDésolé ça ne marche toujours pas.Voici un exemple de la première méthode, utilisant (principalement) votre script et un exemple de tableau de données :
table1 = Open("$SAMPLE_DATA/Big Class.jmp");
table1 << Set Window ID("Table1");
graph1 = table1 << Run Script("Bivariate");
graph1 << Set Window ID("graph1");
table2 = Open("$SAMPLE_DATA/Iris.jmp");
table2 << Set Window ID("Table2");
graph2 = table2 << Run Script("Graph Builder Contour Plot");
graph2 << Set Window ID("graph2");
table3 = Open("$SAMPLE_DATA/Baseball.jmp");
table3 << Set Window ID("Table3");
Project = new project();
Move to Project( destination( Project ), windows( {table1, table2, table3} ));
Project << Set Layout(
H Splitter Box(
<<SET sizes=""></SET>
Et voici une façon de le faire sans définir les identifiants :
table1 = Open("$SAMPLE_DATA/Big Class.jmp");
graph1 = table1 << Run Script("Bivariate");
table2 = Open("$SAMPLE_DATA/Iris.jmp");
graph2 = table2 << Run Script("Graph Builder Contour Plot");
table3 = Open("$SAMPLE_DATA/Baseball.jmp");
Project = new project();
Move to Project( destination( Project ), windows( {table1, table2, table3} ));
Project << Set Layout(
H Splitter Box(
<<SET sizes=""></SET>
Enfin, voici une version qui évite le Move to Project() en ouvrant les fenêtres du projet dès le début :
Project = new project();
Project << Run Script(
table1 = Open("$SAMPLE_DATA/Big Class.jmp");
table1 << Set Window ID("Table1");
graph1 = table1 << Run Script("Bivariate");
graph1 << Set Window ID("graph1");
table2 = Open("$SAMPLE_DATA/Iris.jmp");
table2 << Set Window ID("Table2");
graph2 = table2 << Run Script("Graph Builder Contour Plot");
graph2 << Set Window ID("graph2");
table3 = Open("$SAMPLE_DATA/Baseball.jmp");
table3 << Set Window ID("Table3");
);
Project << Set Layout(
H Splitter Box(
<<SET sizes=""></SET>
Espérons que l'un d'entre eux puisse être modifié pour fonctionner avec votre script.
Re : Script pour la mise en page du projetSalut Aaron,
J'ai essayé ce que vous avez suggéré, mais toujours pas de chance, même message d'erreur.
Ce que je ne comprends pas, c'est que j'ai créé une nouvelle fenêtre, puis utilisé Set Window ID pour lui donner un ID, mais cet ID ne semble pas être reconnu par Tab Box().
Re : Script pour la mise en page du projetMa faute, je pense. Get Window() doit savoir où chercher (puisque les fenêtres du projet peuvent avoir les mêmes titres que les fenêtres à l'extérieur). Alors au lieu de
Get Window("Table1")
(qui recherche une fenêtre appelée "Table1" pas dans un projet), nous devons utiliser
Get Window(Project(Project), "Table1")
où le "Projet" à l'intérieur est le nom que vous avez choisi pour votre variable de projet en haut de votre script :
Project = new project();
Tous ensemble, quelque chose comme ça devrait fonctionner:
Tab Page Box(
Window ID( Get Window(Project(project), "Table1") << Get Window ID())
)
Et oui, c'est certainement quelque chose que nous espérons faciliter dans une future version de JMP. 
Re : Script pour la mise en page du projetMerci pour votre aide. J'ai toujours des difficultés, désolé je suis débutant en JSL...
Lorsque j'utilise la seconde option, j'obtiens un message d'erreur concernant les objets scriptables :
Send attend un objet inscriptible lors de l'accès ou de l'évaluation de 'Send' , Get Window( "Table1" ) << /*###*/
Obtenir l'identifiant de la fenêtre() /*###*/
Je suppose que je dois rendre ces objets scriptables, mais encore une fois, je ne sais pas comment faire cela?
J'ai également essayé la première option qui, je pensais, fonctionnerait. J'ai réussi à créer de nouvelles fenêtres pour chacun des rapports et j'ai utilisé la commande set window ID pour leur donner un ID, mais cela ne fonctionne toujours pas.
Re : Script pour la mise en page du projetVous avez raison - ces GUID seraient différents à chaque fois. Je ne vais pas vous ennuyer avec les détails de la raison pour laquelle nous n'avons pas simplement utilisé les titres de fenêtre, mais il y a une bonne raison (bien que compliquée) pour les identifiants. La meilleure chose à faire lors du scriptage manuel d'un projet comme celui-ci est soit de définir les ID de fenêtre plus tôt dans le script en utilisant
mywindow << Set Window ID("window1");
ou utilisez Get Window ID() directement dans votre mise en page :
Tab Page Box(
Title( "Table1" ),
Window ID( Get Window("Table1") << Get Window ID())
)
Notez que le Title() n'est utilisé que pour imprimer un message amical si la fenêtre avec l'ID donné ne peut pas être trouvée, et pour rendre les choses un peu plus lisibles par l'homme. Il ne fait rien de fonctionnel, vous pouvez donc continuer et le laisser de côté si cela vous facilite la vie.
Re : Script pour la mise en page du projetSalut Aaron,
Merci pour cela. Je ne savais pas comment obtenir la mise en page du script, donc c'est génial!
J'ai donc fait cela, et le problème que j'ai est que dans le journal, chacun des onglets ressemble un peu à ceci :
Tab Page Box(
Title( "Table1" ),
Window ID( "e516a5e8-d5c2-954e-90a6-ba6b719dae98" )
J'ai supprimé tous les bits d'identification de fenêtre, mais cela ne fonctionne toujours pas, donc je suppose qu'il a besoin du bit d'identification de fenêtre. Cependant, ces numéros d'identification de fenêtre ressemblent à des combinaisons de lettres et de chiffres aléatoires qui seront différents à chaque exécution du script, je ne peux donc pas les spécifier à l'avance. Existe-t-il un moyen de trouver les ID de fenêtre des fenêtres ouvertes ? J'ai cherché comment faire cela mais je ne vois pas comment le faire.
Re : Script pour la mise en page du projetL'une des meilleures façons d'écrire des mises en page de projet dans JSL consiste à ouvrir le projet, à utiliser l'interface glisser-déposer pour définir la disposition souhaitée, puis à enregistrer la mise en page à l'aide de JSL. Pour cela, créez un nouveau script JSL (en dehors du projet), puis exécutez
Get Project("Untitled") << Get Layout();
ou
Get Project(1) << Get Layout();
en utilisant le titre ou l'index du projet dont vous souhaitez obtenir la mise en page. Cela videra la mise en page du projet référencé dans le journal, que vous pourrez ensuite adapter pour fonctionner avec votre script de création de projet.
(Vous pouvez faire la même chose depuis l'intérieur d'un projet et même utiliser le raccourci [ce projet()] pour exécuter la commande, mais la mise en page résultante inclura la fenêtre de script que vous avez ouverte pour le faire, donc c'est souvent plus facile le faire de l'extérieur).