Re : ThisDataTable() ?Cela semble un peu compliqué, mais
- Je crois qu'un script dans une table de données envoie implicitement des messages à la table de données qui contient le script. Il n'est donc pas nécessaire de faire explicitement référence à la table de données en utilisant la « table de données actuelle ».
- Si vous exécutez un script à l'intérieur d'une table de données depuis l'extérieur de la table de données, vous devez d'abord obtenir le handle de la table de données, afin de pouvoir envoyer Run Script("nom du script") à la table de données. Le tableau de données peut être actuel ou non, ce qui n'a pas d'importance.
Donc, je suppose que la réponse est qu'il n'est pas nécessaire d'utiliser quoi que ce soit, dans un script, pour faire référence à la table de données qui entoure le script. Supprimez "dt = current data table()" de votre script et voyez comment cela se passe. Je suppose qu'il y a d'autres raisons pour lesquelles vous avez besoin de cette ligne, mais il existe peut-être une solution différente pour résoudre ce problème.
Re : ThisDataTable() ?
@peng_liu a écrit:- Je crois qu'un script dans une table de données envoie implicitement des messages à la table de données qui contient le script.
Merci. intéressant, bon pour maintenant.
Pour être honnête, c'est un peu bizarre de supprimer tous ces
dt <<
Ils m'ont donné une certaine tranquillité d'esprit en sachant que le script faisait exactement ce qu'il était censé faire. Je crois que ça marche sans...
Même
Nrows(<STRIKE>dt</STRIKE>);
semble fonctionner.
Re : ThisDataTable() ?
dt = table de données actuelle() dans le script de table :
Cela fonctionne bien si j'exécute le script à partir de la table elle-même. Pour avoir la possibilité de cliquer sur le bouton play, il faut sélectionner le tableau de données. Ce sera donc l’actuel. bien.
Mais lorsque je déclenche le script de table via JSL, une autre table de données pourrait être la table actuelle.
Avez-vous vérifié que c'est le cas si vous l'exécutez via JSL ? Si je me souviens bien, j'ai très bien exécuté certains de mes scripts de table les plus compliqués via JSL, sans avoir à me soucier de la correction de la table de données actuelle (je me souviens peut-être mal cependant).
Voir plus... Re : ThisDataTable() ?Ça a l'air convaincant:)
Ainsi, lors de l'exécution d'un script de table, la table de données actuelle est automatiquement mappée à la table contenant le script.
C'est donc la raison pour laquelle un script dans une table de données [...] envoie des messages à la table de données qui contient le script.
automatiquement : oui
immédiatement : non
voir ci-dessous:
ThisDataTable() ?Pour les colonnes et les objets comme les rapports, il existe une commande
obj << Get Data Table();
pour obtenir une référence à la table de données respective.
Existe-t-il une fonction similaire pour les scripts de table ? quelque chose comme
This Data Table()
quelques implémentations paresseuses qui pourraient entraîner des problèmes :
- référencez la table de données par son nom.
Table de données ("ma table") << nouvelle colonne ("test")
cela fonctionne jusqu'à ce qu'il y ait un conflit avec une autre table de données portant le même nom et que « 2 » soit automatiquement ajouté au nom de la table. - utilisez mydt = current data table() pour générer une référence à la table de données
Cela fonctionne bien si j'exécute le script à partir de la table elle-même. Pour avoir la possibilité de cliquer sur le bouton play, il faut sélectionner le tableau de données. Ce sera donc l’actuel. bien.
Mais lorsque je déclenche le script de table via dt << run sricpt ("myscript") , une autre table de données pourrait être la table actuelle.
edit #1 : l'exemple de @jthi ci-dessous suggère que cette affirmation n'est pas correcte :
Lorsque vous déclenchez un script de table, la table avec le script de table obtient la table de données actuelle .
donc : pas de problème.
edit #2 : ... mais il semble que « obtient la table de données actuelle » ne se produise pas immédiatement .
donc : dans certaines circonstances, il pourrait y avoir des problèmes (voir ci-dessous)
Automatisation et scriptRe : ThisDataTable() ?Salut,
Je pourrais reproduire mon erreur de 2023 et avoir de nouvelles découvertes :
Le problème:
- un script jsl déclenche dt << run script(myScript)
- mon script commence par
mydt = table de données actuelle (); - mon hypothèse initiale : lorsque je déclenche le script de table via JSL, une autre table de données pourrait être la table actuelle.
semble être valable dans certains cas - aujourd'hui, je pourrais générer un tel cas où
mydt = current data table();
mydt << new column ("test1"); // was sent to the wrong data table
new column("test2"); // was sent to THIS DATA TABLE (fits to Peng Liu's post)
Donc:
Si vous prévoyez d'exécuter un script Table via dt << run script(myScript)
et avez besoin d'une référence à ThisDataTable, ajoutez wait(0) pour être prudent :
wait(0); // !!!!
thisDataTable = current data table();<BR />
résultats similaires, mais avec un contexte légèrement différent : exécuter le script de table