Zone de liste affichant toutes les tables ouvertesJ'essaie de créer une zone de liste qui répertorie toutes les tables de données ouvertes et est automatiquement mise à jour avec les tables nouvellement ouvertes/fermées. J'ai commencé avec le script ci-dessous mais pour une raison quelconque, la fonction onClose ne fonctionne pas.
J'apprécie l'aide 
names default to here(1);
f1 = function ({Temp_list},
T_list = Temp_list << get name();
lb << remove all;
lb << append (T_list)
);
f2 = function ({Temp_list},
T_list = Temp_list << get name();
lb << remove all;
lb << append (T_list)
);
asub = Subscribe to data table list( , onopen(f1));
Subscribe to data table list(asub , onclose(f2));
nw = new window("Trial",show menu(0),
vlistbox(
T_list = get data table list ();
lb = listbox(T_list);
)
);
Modélisation statistique avancéeAutomatisation et scriptsÉtudes de consommation et de marchéAccès aux donnéesMélange et nettoyage des donnéesConception d'expériencesPersonnalisation de masseRe : Zone de liste affichant toutes les tables ouvertesAprès avoir testé un peu plus S'abonner à la liste des tableaux de données, je l'éviterais si possible. Cela ne semble pas bien fonctionner du tout, les événements ne se déclenchent pas, la documentation est assez mauvaise sur la façon dont il doit être utilisé, etc. J'utilise JMP16.1.0 Pro sous Windows 10.
J'ai une application dans laquelle j'aimerais avoir quelque chose comme ça, mais je pense que je vais simplement ajouter Actualiser la liste datatable ou quelque chose de similaire.
Re : Zone de liste affichant toutes les tables ouvertesMerci @jthi ! Ça marche!
Si cela ne vous dérange pas, pourriez-vous également montrer comment vous configureriez également la clause "OnRename" ?
Re : Zone de liste affichant toutes les tables ouvertesVous devriez simplement pouvoir ajouter de nouvelles valeurs à lb et supprimer uniquement celle fermée avec index (en utilisant Contains() pour obtenir l'index), ainsi que des variables locales ajoutées aux fonctions.
Names Default To Here(1);
f1 = function ({Temp_list}, {tableList},
tableList = Temp_list << get name();
lb << append (tableList)
);
f2 = function ({Temp_list}, {tableList},
tableList = Temp_list << get name();
lb << Remove Item(Contains(lb << get items, tableList));
);
asub = Subscribe to data table list( , onopen(f1));
Subscribe to data table list(asub , OnClose(f2));
nw = new window("Trial",show menu(0),
vlistbox(
lb = listbox(get data table list ());
)
);Re : Zone de liste affichant toutes les tables ouvertesMerci @txnelson !! C'est exactement le bug que j'ai rencontré. Je suppose qu'en attendant, je devrai trouver une solution de contournement à ce problème.
Re : Zone de liste affichant toutes les tables ouvertesEn utilisant le JSL ci-dessous, voici ce que j'ai découvert.
Names Default To Here( 1 );
f2 = Function( {Temp_list},
T_list = Get Data Table List();
lb << remove all;
lb << append( T_list );
show("Close");
);
f1 = Function( {Temp_list},
T_list = Get Data Table List();
lb << remove all;
lb << append( T_list );
show("add");
);
asub = Subscribe to Data Table List( , onopen( f1 ) );
Subscribe to Data Table List(asub , onclose( f2 ) );
nw = New Window( "Trial",
Show Menu( 0 ),
V List Box(
T_list = Get Data Table List();
lb = List Box( T_list );
)
);
- La zone de liste créée ajoutera de nouvelles tables de données sans erreur.
- La fonction f1 est exécutée une fois pour chaque ajout
- Si vous fermez une table de données, elle ne sera pas supprimée de la zone de liste.
- Si vous fermez une deuxième table de données, la table de données fermée précédente sera supprimée de la zone de liste.
- Si vous fermez la zone de liste, exécutez le JSL une deuxième fois et fermez une table de données, une fonction f2 sera exécutée deux fois.La fonction f2 de la première exécution du JSL sera exécutée, suivie de l'exécution de la deuxième instance de la fonction f2.Cela peut être affiché en modifiant l'instruction Show().Si l'instruction Show a été modifiée de
Show( "Close" );
àShow( "Close 2" );
à la fermeture d'une table de données, les deux versions de l'instruction Show() seront affichées,
- Les exécutions ultérieures du JSL ajoutent des copies supplémentaires de la fonction f2, chaque copie étant exécutée pour chaque fermeture de table de données.
- Clear Globals et Clear Symbols n’éliminent pas les versions précédentes de la fonction f2.
Il s'agit clairement d'un bug JMP qui doit être envoyé au personnel d'assistance JMP.
Je leur ai soumis le bug.
Ré: Liste déroulante affichant toutes les tables ouvertesJe relance ce sujet avec quelques nouvelles découvertes, peut-être que cela aidera quelqu'un. J'essayais de faire quelque chose de similaire à @Djtjhin et j'ai rencontré tous les mêmes problèmes décrits ici, que j'ai en grande partie résolus grâce à la discussion ici.
Ce que je peux ajouter, c'est l'explication du comportement étrange décrit par @txnelson . Le problème est que si vous vous abonnez sans indiquer explicitement le nom de l'abonnement comme ci-dessous :
asub = Subscribe to data table list( , OnOpen( Show("opening...") ) )un nouvel abonnement sous un nouveau nom générique ("_DTListSubscriber123") est créé à chaque fois que vous exécutez le script, augmentant le compteur à la fin.
L'astuce consiste soit à nommer explicitement l'abonné afin d'écraser le même à chaque fois que vous exécutez le script, par exemple :
asub = Subscribe to data table list( "MyDTLSub1", OnOpen( Show("opening...") ) )ou de se désinscrire à la fin, par exemple dans le < <>
Unsubscribe to data table list( asub, "ALL" )
Dans d'autres nouvelles, @Djtjhin , pour renommer cela fonctionne assez simplement, il semble que l'événement soit déclenché APRÈS le renommage, donc Get Data Table List() vous donne le(s) nouveau(x) nom(s). Mais je m'arrachais les cheveux pour une autre raison, avant de le faire fonctionner, en raison du manque de documentation . Contrairement à OnOpen et OnClose, la fonction OnRename a besoin de 2 arguments (nouveau et ancien nom/table), sinon vous obtiendrez des erreurs. Et bien que dans cet exemple particulier de listbox vous n'en ayez pas réellement besoin, si vous en avez besoin, vous devez également garder à l'esprit qu'ils sont de types de variables différents, l'un est une table, l'autre une chaîne (voir ci-dessous).
Names Default To Here(1);
f = Function ( { new_name_as_table, old_name_as_string },
print(asub||" renaming: "|| old_name_as_string || " to " || (new_name_as_table << get name) );
lb << set items( Get Data table List() );
);
asub = Subscribe to data table list( "MySub", OnRename( f ) );
nw = new window("Trial",show menu(0),
<< On Close(Unsubscribe to data table list( asub, "ALL")),
vlistbox(
lb = listbox(get data table list ());
)
);
dt = Open( "$SAMPLE_DATA/Tiretread.jmp" );
dt << set name( (dt<<GET name=""></GET>Otherwise I agree with general sentiment that the subscriber it's very hard to work with, you have to be really careful to tie up all the loose ends. Better documentation would be much appreciated.