Send attend un objet scriptable lors de l'accès ou de l'évaluation de « Envoyer »J'ai la fonction suivante qui est appelée par un autre fichier jsl :
ConfirmFiltering = Function({},
show(dtImp);
dtImp << Select Where(!Contains(parameterChoice, :Parameter));
);et même si le résultat de la commande show est :
dtImp = DataTable("Details 2");à la ligne suivante j'obtiens l'erreur suivante :
Send Attend un objet scriptable lors de l'accès ou de l'évaluation de 'Send' , dtImp << /*###*/Select Where( !Contains( ParameterChoice, :Parameter ) ) /*###*/
Cela me semble étrange que même si elle reconnaît la commande dtImp comme un DataTable, à la ligne suivante, elle la caractérise comme un "objet non scriptable".
Modélisation statistique avancéeAutomatisation et scriptsAnalyse et modélisation des données de baseAccès aux donnéesMélange et nettoyage des donnéesExploration et visualisation des donnéesRe : Envoyer attend un objet scriptable lors de l'accès ou de l'évaluation de "Envoyer"Il s'agit peut-être d'un problème de portée. Je suggère de changer votre référence à la colonne :Parameter en
dtImp::Parameter
Quelle est la valeur de la variable ParameterChoice ?
Re : Envoyer attend un objet scriptable lors de l'accès ou de l'évaluation de "Envoyer"La valeur de paramètreChoice est choisie par l'utilisateur final du complément que j'essaie de créer.
Cela ne résout pas le problème et je pense que la racine n'est pas dans la commande Sélectionner où. Même si j'utilise :
dtImp << show window(1);
cela donne la même erreur. Il semble que cela ne permette pas d'utiliser l'opérateur << pour le DatatTble.
Mais pour être plus analytique. J'ai 2 scripts :
Main.jsl : crée une fenêtre qui donne à l'utilisateur final la possibilité de choisir l'ensemble de données à l'aide d'un bouton
bboxImp = button box( "Select data to import", importData())
where the importData() function reads the data:
importData = Function({},
// Function that is used to select which data to import for the analysis
// Prompt the user to select input file
importFile = Pick File( "Select Excel data to import" );
if(importFile == "",
// No file was selected - we skip the rest
New window("Message", modal,
Text Box("No file has been selected for import")
),
// A file was selected - we continue
// Import data
dtImp = Open( importFile,
Worksheets( "Details" ),
Use for all sheets( 1 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 1 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 31 ),
Data Starts on Row( 32 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Replicated Spanned Headers( 0 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 ),
Multiple Series Stack( 0 ),
Import Cell Colors( 0 ),
Limit Column Detect( 0 ),
Column Separator String( "-" )
)
);
// Select rows where "Component" column is empty
dtImp << Select Where( Is Missing( :Name( "Component" ) ) );
// Delete the selected rows
dtImp << Delete Rows;
// Grey out import botton and make Reimport and analysis botton available
wait(1);
dtImp << show window(0);
bboxImp << enable(0);
bboxRe << enable(1);
bboxAn << enable(1);
);
);
ImportRedo = Function({},
// Function that is used to remove imported datasets and allow for another import
// Close imported datafile and ungrey import and analysis botton
Close(dtImp, NoSave);
bboxImp << enable(1);
bboxRe << enable(0);
bboxAn << enable(0);
);Ensuite, si vous appuyez sur le bouton Exécuter l'analyse, il appelle le script Analysis.jsl qui crée une fenêtre dans laquelle l'utilisateur final fait des choix pour filtrer les données en choisissant diverses valeurs uniques. Dans ce script, une fois que l'utilisateur final a fait ses choix, j'essaie d'utiliser :
ConfirmFiltering = Function({},
show(dtImp);
dtImp << Select Where(!Contains(parameterChoice, :Parameter));
);pour filtrer le DataTable dtImp.
Re : Envoyer attend un objet scriptable lors de l'accès ou de l'évaluation de "Envoyer"ParameterChoice est-il une valeur de mise à l'échelle telle que « xxx » ou s'agit-il d'une valeur de liste JMP {"xxx"} ?
Dans les deux cas, s’il s’agit d’une valeur unique, vous souhaiterez peut-être modifier l’ordre de Contient en
</CODE></PRE>
<PRE><CODE class=" language-jsl">!Contains( :Parameter, parameterChoice )
Re : Envoyer attend un objet scriptable lors de l'accès ou de l'évaluation de "Envoyer"Quelle version de JMP utilisez-vous ? Utilisez-vous le générateur d'applications ? Comment gérez-vous les portées et les espaces de noms (nous ne voyons pas les scripts complets, nous sommes donc laissés à des suppositions) ? Rencontrez-vous ces problèmes lorsque vous l’exécutez à partir de fichiers .jsl ou après l’avoir intégré à un complément ? Si vous fermez votre session JMP et exécutez votre script, rencontrez-vous les mêmes problèmes lors de la première exécution ?
Re : Envoyer attend un objet scriptable lors de l'accès ou de l'évaluation de "Envoyer"Il était difficile de fournir le code complet, j'ai donc essayé de le décrire et d'en donner une partie. Cependant, je comprends qu'il est difficile pour quelqu'un de fournir de l'aide s'il n'est pas en mesure de voir le code complet.
J'ai trouvé la solution. Le problème résidait dans le script Main.jsl que j'ai fourni ci-dessus. Dans ce script, j'avais la fonction suivante qui était appelée une fois que l'utilisateur final cliquait sur le bouton "Exécuter l'analyse" :
compatStudyEval = Function({},
// Function that is used to run the analysis script and handle landing page window
// Run the analysis script related to this add-in
Include( pathAddin || "\Analysis.jsl");
// Close landing page
win << close window;
);The problem is generated by the win << close window; command which I included to close the main window.
J'ai trouvé la solution inspirée du post suivant :
Résolu : Nom Non résolu : Bouton d'accès ou d'évaluation Message d'alerte JMP - Communauté d'utilisateurs JMP