ritardare l'esecuzione dello script finché non viene fornito l'input dell'utente?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />la prima parte del mio script richiede all'utente di selezionare le variabili "Y" e "By".Quindi genera un datatable (chiamiamolo "dt2").
la seconda metà del codice si basa su quel datatable (dt2) che è stato generato dopo che l'utente ha effettuato le selezioni e ha fatto clic su OK.
Il problema che ho è che il codice continua a essere eseguito una volta visualizzata la finestra e attende l'input dell'utente.... quindi la seconda metà del codice non ha datatable (dt2) da utilizzare, quindi non restituisce nulla.. .
ho visto che posso usare wait(), ma si basa su un valore temporale (in secondi) e vorrei scriverlo in modo che non continui finché non viene fornito l'input dell'utente nella prima metà del codice (generando così il necessario datatable per l'esecuzione della seconda metà del codice).
grazie in anticipo per qualsiasi aiuto/consiglio!!
Ri: ritardare l'esecuzione dello script finché non viene fornito l'input dell'utente?Esistono un paio di modi per controllare il comportamento delle finestre non modali:
1. Inserisci le attività che desideri che il pulsante OK esegua in un'espressione precedentemente nel codice.Quindi, quando l'utente fa clic su OK, è sufficiente fornire l'espressione.
ok_espr = espressione (
utente_input = utente_teb << ottenere il testo () ;
stampa ( "Utente inserito" || utente_input ) ;
mywin << chiudi la finestra ;
) ;
utente_input = "" ;
mywin = nuova finestra ( "Ottieni input utente" ,
hlistbox (
casella di testo ( "Inserisci del testo: " ) ,
utente_teb = casella di modifica del testo () ,
) ,
casella dei pulsanti ( "OK" , ok_espr ) ,
casella dei pulsanti ( "Annulla" , mywin << chiudi la finestra ; ) ,
) ;
2. Inserisci le attività OK in un file JSL separato e utilizza l'istruzione include() per eseguire i comandi desiderati:
// ok_commands.jsl
utente_input = utente_teb << ottenere il testo () ;
stampa ( "Utente inserito" || utente_input ) ;
mywin << chiudi la finestra ;
// Ecco i comandi della finestra di dialogo, i un file separato
utente_input = "" ;
mywin = nuova finestra ( "Ottieni input utente" ,
hlistbox (
casella di testo ( "Inserisci del testo: " ) ,
utente_teb = casella di modifica del testo () ,
) ,
casella dei pulsanti ( "OK" , includere ( "ok_comandi.jsl" );) ,
casella dei pulsanti ( "Annulla" , mywin << chiudi la finestra ; ) ,
) ;
Ri: ritardare l'esecuzione dello script finché non viene fornito l'input dell'utente?Se i dati da incollare provengono da JMP o possono essere aperti come tabella da JMP, anche l'inserimento nella tabella dati potrebbe essere eseguito tramite script.
Ma per il tuo scenario, se l'interazione manuale è inevitabile a causa di una decisione soggettiva da prendere, utilizzerei una finestra non modale con un pulsante "inizio" e "fine" (o simile) che competono con le azioni in 1 e 2, rispettivamente.
Ri: ritardare l'esecuzione dello script finché non viene fornito l'input dell'utente?Grazie per la tua risposta.
In effetti questo è stato molto utile per un altro problema che sto avendo, e ho intenzione di farlo
prova la tua soluzione per ottenere dati dall'utente per risolverlo.
In questo caso particolare l'utente molto probabilmente dovrà inserirne MOLTI
data e l'idea è che dovrebbe incollarlo nel DT.
Attualmente la mia soluzione esegue gli script in 2 parti:
1. Tutte le azioni necessarie prima che all'utente venga richiesto di inserire i dati
(i dati vengono incollati nel DT)
2. Tutte le azioni necessarie dopo l'inserimento dei dati.
Ma capiamo entrambi che questo non è il modo di funzionare, né posso chiedere all'utente di farlo
inserire tutti i dati manualmente è troppo dispendioso in termini di tempo e inefficiente.
Hai qualche altra idea?
Grazie,
Misha
Ri: ritardare l'esecuzione dello script finché non viene fornito l'input dell'utente?Non penso che tu possa ignorare una finestra di dialogo modale. Ma puoi consentire all'utente di inserire i limiti nella finestra modale che vengono trasferiti al datatable quando si fa clic su OK.
Ecco un esempio:
dt = Nuova tabella ( "test" , Nuova colonna ( "dati" , numerico ) ) ;
Nuova finestra ( "Fissare i limiti" ,
<< modale ,
Scatola da tavolo ( String Col Box ( "" , { "Media" , "LCL" , "UCL" } ) , BCN = Casella di modifica numero colonna ( "Limiti" , [ . , . , . ] ) ) ,
Casella dei pulsanti ( "OK" ,
l = BCN << Ottenere ;
Val (
Espr.Val (
Colonna ( dt , "dati" ) << impostare la proprietà ( "Limiti di controllo" , { Xbar ( Media ( Espr ( l [ 1 ] ) ) , LCL ( Espr ( l [ 2 ] ) ) , UCL ( Espr ( l [ 3 ] )) )})))
)
) ;
// Controlla se ha funzionato
Spettacolo ( l ) ;
dt : dati << Ottieni proprietà ( "Limiti di controllo" ) ;
Ri: ritardare l'esecuzione dello script finché non viene fornito l'input dell'utente?Sto facendo qualcosa di simile e soffro dello stesso problema.
Anche la finestra modale è stata la mia soluzione iniziale. Sfortunatamente non funziona.
Quando si apre la nuova finestra impedisce l'accesso alle tabelle dati (rimane in primo piano):

C'è un modo per aggirare l'impostazione predefinita in alto della finestra modale?
O un'idea migliore per l'implementazione?
Grazie in anticipo.
Ri: ritardare l'esecuzione dello script finché non viene fornito l'input dell'utente?Se stai utilizzando una nuova finestra per raccogliere l'input dell'utente, rendila una finestra di dialogo modale con << modale
mywin = nuova finestra ( "Finestra di dialogo modale di esempio" , << modale ,
casella di testo ( "Questa è una finestra di dialogo modale" ) ,
casella dei pulsanti ( "OK" , quale_pulsante = "OK" ) ,
casella dei pulsanti ( "Annulla" , quale_pulsante = "Annulla" ) ,
) ;
stampa ( "L'utente ha fatto clic" || quale_pulsante ) ;