Ri: ThisDataTable() ?Sembra un po' contorto, ma
- Credo che uno script in una tabella dati invii implicitamente messaggi alla tabella dati che racchiude lo script. Pertanto non è necessario fare riferimento esplicitamente alla tabella dati utilizzando la "tabella dati corrente".
- Se si esegue uno script all'interno di una tabella dati dall'esterno della tabella dati, è necessario prima ottenere l'handle della tabella dati, in modo da poter inviare Esegui script("nome script") alla tabella dati. La tabella dati può essere quella corrente o meno, il che non ha importanza.
Quindi, suppongo che la risposta sia che non è necessario utilizzare nulla, in uno script, per fare riferimento alla tabella dati che racchiude lo script. Rimuovi "dt = current data table()" dal tuo script e guarda come va. Immagino che ci siano altri motivi per cui hai bisogno di quella linea, ma forse c'è una soluzione diversa per risolvere questo problema.
Ri: ThisDataTable() ?
@peng_liu ha scritto:- Credo che uno script in una tabella dati invii implicitamente messaggi alla tabella dati che racchiude lo script.
Grazie. interessante, per ora va bene.
Ad essere onesti, è una sensazione un po' strana rimuoverli tutti
dt <<
Mi hanno dato la tranquillità che la sceneggiatura stesse facendo esattamente quello che avrebbe dovuto fare. Credo che funzioni senza...
Anche
Nrows(<STRIKE>dt</STRIKE>);
sembra funzionare.
Ri: ThisDataTable() ?
dt = tabella dei dati correnti() nello script della tabella:
Funziona bene se eseguo lo script dalla tabella stessa. Per avere la possibilità di fare clic sul pulsante di riproduzione, è necessario selezionare la tabella dati. Sarà quindi quello attuale. Bene.
Ma quando attivo lo script della tabella tramite JSL, un'altra tabella di dati potrebbe essere quella corrente.
Hai verificato che questo sia il caso se lo esegui tramite JSL? Se ricordo bene, ho eseguito alcuni dei miei script di tabella più complicati correttamente tramite JSL, senza dovermi preoccupare di correggere la tabella dei dati corrente (potrei però ricordare male).
Visualizza altro... Ri: ThisDataTable() ?Sembra convincente 
Pertanto, quando si esegue uno script di tabella, la tabella di dati corrente viene automaticamente mappata alla tabella con lo script.
Quindi, questo è il motivo per cui uno script in una tabella di dati [...] invia messaggi alla tabella di dati che racchiude lo script.
automaticamente: sì
subito: no
vedi sotto:
Questa tabella dati()?Per colonne e oggetti come report esiste un comando
obj << Get Data Table();
per ottenere un riferimento alla rispettiva tabella dati.
Esiste una funzione simile per gli script di tabella? qualcosa di simile a
This Data Table()
alcune implementazioni pigre che potrebbero portare a problemi:
- fare riferimento alla tabella dati con il suo nome.
Tabella dati ("la mia tabella") << nuova colonna ("test")
funziona finché non si verifica un conflitto con un'altra tabella dati con lo stesso nome e "2" viene aggiunto automaticamente al nome della tabella. - utilizzare mydt = current data table() per generare un riferimento alla tabella dati
Funziona bene se eseguo lo script dalla tabella stessa. Per avere la possibilità di fare clic sul pulsante di riproduzione, è necessario selezionare la tabella dati. Sarà quindi quello attuale. Bene.
Ma quando attivo lo script della tabella tramite dt << run sricpt ("myscript") , un'altra tabella di dati potrebbe essere quella corrente.
modifica n. 1: l'esempio di @jthi riportato di seguito suggerisce che questa affermazione non è corretta:
Quando attivi uno script di tabella, la tabella con lo script di tabella ottiene la tabella dati corrente .
quindi: nessun problema.
modifica n. 2: ... ma sembra che " ottiene la tabella dati corrente " non avvenga immediatamente .
quindi: in alcune circostanze potrebbero esserci dei problemi (vedi sotto)
Automazione e scriptingRi: ThisDataTable() ?CIAO,
Potrei replicare il mio errore dal 2023 e avere nuovi risultati:
Il problema:
- uno script jsl attiva dt << esegui script(myScript)
- myscript inizia con
mydt = tabella dati corrente(); - la mia ipotesi iniziale: quando attivo lo script della tabella tramite JSL, un'altra tabella di dati potrebbe essere quella corrente.
sembra valere per alcuni casi: oggi potrei generare un caso del genere in cui
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)
COSÌ:
Se prevedi di eseguire uno script di tabella tramite dt << esegui script(myScript)
e hai bisogno di un riferimento a ThisDataTable, aggiungi wait(0) per essere sicuro:
wait(0); // !!!!
thisDataTable = current data table();<BR />
risultati simili, ma con contesto leggermente diverso: esegui lo script della tabella