Registrazioni e file: Scripters Club su Data Access, JMP Roasting e Suggerimenti e trucchiVideo 1 Accesso ai dati da @Georg
Commenti:
- Anche se la documentazione è ancora carente e può essere un po' complicato da usare... ti suggerirei comunque di usarlo perché è il metodo preferito e supporterà (e supporta) i connettori
- Esiste anche il "simbolo" queryResult a cui puoi accedere al termine dell'esecuzione, che dovrebbe essere il riferimento alla tabella risultante
- Utilizzare sempre < << run foreground and do not rely on which is determined by user preferences< pan>

Video 2: JMP Roasting da @jthi
Commenti:
- Consiglierei di dare un'occhiata all'indice degli script per scoprire come funziona il comando nuova finestra in diverse modalità: ci sono esempi per la maggior parte delle varianti (modale, report, ...)
- Concordo, ci sono esempi. Non sempre così utili come preferirei. Praticamente ogni volta che uso NewWindow(), voglio fare qualcosa per cui non esiste un esempio simile. Ho trovato esempi davvero utili per NewWindow() mentre cercavo nella community.
- Si prega di aggiungere anche la possibilità di aggiungere esempi. Ci sono esempi molto utili nella comunità. Penso che non abbia senso inondare lo Scripting Index con tutti gli esempi. Ma ci aiuterà molto se avremo la possibilità di aggiungere esempi utili al NOSTRO scripting index.
- Ecco l'inizio della voce della lista dei desideri:
Video 3: Suggerimenti e trucchi di @jthi
Post per suggerimenti:
Oggetto: Registrazioni e file: Scripters Club su accesso ai dati, JMP Roasting e suggerimenti e trucchiIl mio materiale è allegato
Oggetto: Registrazioni e file: Scripters Club su accesso ai dati, JMP Roasting e suggerimenti e trucchiBravo! È incredibile come queste sessioni continuino a essere fonti di conoscenza immediatamente utile sin dal loro inizio nel 2023.
Mi chiedo se ci sia un'opinione su SQL all'interno della funzione JSL Open Database()? Stiamo utilizzando un'implementazione di BigQuery di Google per il data warehousing. All'interno di BigQuery, è possibile sviluppare e debuggare query SQL che possono essere copiate e incollate direttamente in Open Database() come mostrato di seguito. Anche la possibilità di concatenare parole chiave SQL o timestamp in SQL sembra molto utile.
Names Default to Here(1);
start = "'2025-02-18 00:00:00'";
stop = "'2025-02-18 01:00:00'";
dt = Open Database( "DSN_name", "
SELECT
time,
tagname,
value
FROM
`bq_project.dataset.table`
WHERE
time BETWEEN TIMESTAMP("|| start ||") AND TIMESTAMP("|| stop ||")
AND tagname IN(
'tag_1',
'tag_2'
)"
);
Oggetto: Registrazioni e file: Scripters Club su accesso ai dati, JMP Roasting e suggerimenti e trucchiUsa New SQL Query (so che è piuttosto orribile... ma è il metodo preferito) e usa il modello sql e poi valutalo usando Eval Insert, questo è il mio suggerimento. Esempio qui sotto:
Names Default to Here(1);
MY_CONNECTOR = "ODBC:...";
start = "'2025-02-18 00:00:00'";
stop = "'2025-02-18 01:00:00'";
sql_template = "\[
SELECT
time,
tagname,
value
FROM
`bq_project.dataset.table`
WHERE
time BETWEEN TIMESTAMP(¤start¤) AND TIMESTAMP(¤stop¤)
AND tagname IN(
'tag_1',
'tag_2'
)
]\";
sql_str = Eval Insert(sql_template, "¤");
// Write("\!N", sql_str);
obj = New SQL Query(
Connection(MY_CONNECTOR),
Custom SQL(sql_str),
Query Name("mytable")
);
dt = obj << Run Foreground();
Write();
È possibile utilizzare un modello simile per metodi diversi da Nuova query SQL (come Apri database()).
Utilizzo il carattere speciale "¤" nel mio Eval Insert() perché il carattere predefinito "^" si trova comunemente, ad esempio, nelle espressioni regolari e può causare problemi durante la valutazione.
Modifica: corretti alcuni errori di battitura, migliorato il linguaggio e aggiunto un commento su "¤"
Oggetto: Registrazioni e file: Scripters Club su accesso ai dati, JMP Roasting e suggerimenti e trucchiGrazie @jthi per la presentazione molto utile! Mi ha ispirato a riscrivere una finestra modale creata dinamicamente per evitare di usare stringhe e usare il tuo metodo XPath per estrarre i risultati.
Ho scoperto una cosa per cui non potevo evitare di analizzare le stringhe: volevo includere i comandi XPath all'interno della finestra modale, ma questa deve essere creata dinamicamente.
Voglio creare una casella di controllo che controlli se una casella di modifica del testo è abilitata o meno, tuttavia, non so quante coppie casella di modifica del testo/casella di controllo ci saranno:
rc_list = Lineup Box( N Col( 3 ) );
rc_list << append( Text Box( "Current", <<SET font=""></SET>
Is there a way of doing this so I don't need to parse JSL strings? Or is there a better way to do this modal recode?
<BR /><P>Il mio codice completo è qui:</P><DIV class="lia-spoiler-container"><A class="lia-spoiler-link" href="#" rel="nofollow noopener noreferrer" target="_blank">Vedi altro...</A><NOSCRIPT>(Evidenziare per leggere)</NOSCRIPT><DIV class="lia-spoiler-border"><DIV class="lia-spoiler-content"><PRE><CODE class=" language-jsl">Names Default To Here( 1 );
// Function to do a simple in-place column recode.
// Uses a modal dialog so can be used as part of a larger script or workflow.
modal_recode = Function( {dt, col},
{default local},
Summarize( dt, orig_vals = By( col ) );
rc_list = Lineup Box( N Col( 3 ) );
rc_list << append( Text Box( "Current", <<SET font=""></SET></CODE><NOSCRIPT><CODE class=" language-jsl"><DIV class="lia-spoiler-noscript-container"><DIV class="lia-spoiler-noscript-content">Names Default To Here( 1 ); // Funzione per eseguire una semplice ricodifica di colonna in loco. // Utilizza una finestra di dialogo modale, quindi può essere utilizzata come parte di uno script o flusso di lavoro più ampio. modal_recode = Function( {dt, col}, {default local}, Summarize( dt, orig_vals = By( col ) ); rc_list = Lineup Box( N Col( 3 ) ); rc_list << append( Text Box( "Current", < <SET font=""></SET></DIV></DIV>Oggetto: Registrazioni e file: Scripters Club su accesso ai dati, JMP Roasting e suggerimenti e trucchiIn questo caso non userei << XPath ma piuttosto questo << prev sib. Immagino che questo faccia quello che stai cercando:
Quindi invece di
Eval(
Parse(
"\[rc_list << append( check box( "", <<SET function=""></SET>
<P>potresti fare qualcosa del genere</P>
<CODE class=" language-jsl">rc_list << Append(Check Box("", << Set Function(function({this},
(this << prev sib) << Enabled(this << get);
))));
Codice completo
Vedi altro...
Names Default To Here(1);
// Function to do a simple in-place column recode.
// Uses a modal dialog so can be used as part of a larger script or workflow.
modal_recode = Function({dt, col},
{default local},
Summarize(dt, orig_vals = By(col));
rc_list = Lineup Box(N Col(3));
rc_list << append(Text Box("Current", <<SET font=""></SET>
</CODE><NOSCRIPT><CODE class=" language-jsl"><DIV class="lia-spoiler-noscript-container"><DIV class="lia-spoiler-noscript-content">I nomi predefiniti sono qui(1); // Funzione per eseguire una semplice ricodifica di colonna in loco. // Utilizza una finestra di dialogo modale, quindi può essere utilizzata come parte di uno script o flusso di lavoro più ampio. modal_recode = Function({dt, col}, {default local}, Summarize(dt, orig_vals = By(col)); rc_list = Lineup Box(N Col(3)); rc_list << append(Text Box("Current", < <SET font=""></SET></DIV></DIV>
<P>Se vuoi davvero usare XPath per questo, puoi calcolare dinamicamente l'indice. Puoi ad esempio ottenere tutti i CheckBoxBox e poi usare Contains con <EM>questo</EM> per ottenere l'indice e poi usare quell'indice</P>
<CODE class=" language-jsl">idx = Contains(rc_list << XPath("//CheckBoxBox"), this); Oggetto: Registrazioni e file: Scripters Club su accesso ai dati, JMP Roasting e suggerimenti e trucchiGrazie @jthi ! L'approccio prev sib funziona per me. Devo cambiare il modo in cui penso naturalmente a come sono costruite le finestre JMP e a come possono essere manipolate.
Oggetto: Registrazioni e file: Scripters Club su accesso ai dati, JMP Roasting e suggerimenti e trucchiHo cambiato il mio modo di pensare molte volte e lo faccio ancora di tanto in tanto. Penso di usare generalmente quattro metodi diversi (e combinazioni di questi) a seconda della situazione:
- Percorso XP
- Se voglio raccogliere i risultati di più cose premendo un pulsante
- Raccogli i riferimenti all'elenco/array associativo
- A volte è semplicemente facile raccogliere il riferimento a un oggetto
- << Imposta Funzione(funzione(questo()))
- Di solito per controllare alcune azioni, come nel tuo caso enable(0/1). Di solito non aggiorno alcun valore di variabile con questo
- Valutazione di riferimento
- Nessun esempio specifico, forse quando per qualche motivo la creazione del "percorso" con XPath o l'utilizzo di questo diventa fastidioso e ho ancora bisogno del riferimento (a volte in classi o funzioni che restituiscono una nuova finestra)
Esempio di valutazione di riferimento
rc_list << append(teb = Text Edit Box(Char(orig_vals[i]), <<ENABLED></ENABLED>
<BR />
<BR />Oggetto: Registrazioni e file: Scripters Club su accesso ai dati, JMP Roasting e suggerimenti e trucchiCi sono solo così tanti complimenti che posso dare per una singola risposta. Grazie, @jthi , davvero.