Carissimi,
(JMP Pro 16.1.0, Win10)
Ho un problema relativo a un mio post precedente qui , se sei interessato a qualche "storia passata".
Il problema principale che sto riscontrando ora è che il comando Throw() non funziona come previsto. Nel mio codice (vedi alla fine per il codice completo), ho in alcuni punti un test per vedere se c'è attualmente un report del generatore di grafici aperto, ha questo aspetto ed è racchiuso in un'istruzione Expr():
If( Is Empty( Current Report() ) == 1,
Throw( "No Graph Builder Window is Open" )
);
Il problema è che ogni volta che eseguo il codice (come se lo eseguissi da un pulsante di scelta rapida della barra degli strumenti), sembra saltare queste righe e ignora se non ci sono report aperti. Ma, quando eseguo il codice "riga per riga", rileverà correttamente che non vi è alcun rapporto aperto e avviserà l'utente.
Sto cercando di scrivere codice da distribuire agli utenti della mia organizzazione e di renderlo sufficientemente robusto da gestire diversi tipi di situazioni, ad esempio se un utente ha una o più tabelle di dati aperte e/o uno o più progetti aperti (che può contenere più tabelle di dati).
Ecco il concetto del codice (il problema si verifica all'elemento 6): un utente sta creando un elemento grafico in Graph Builder, quindi desidera eseguire una modifica di routine dell'elemento grafico (vedere il collegamento sopra per i dettagli), l'utente quindi fa clic sulla barra degli strumenti pulsante di scelta rapida per eseguire tale azione.
- Il codice esegue l'espressione Graphic_Expr per determinare la posizione dell'elemento grafico, è in una tabella di dati "autonoma" o all'interno di un progetto (è possibile selezionare solo un'opzione). -> (vai a)
- A seconda della casella di controllo selezionata, il codice esegue quindi il codice dt_win_Expr o prj_win_Expr (in questo momento, l'ho impostato solo per l'opzione tabella dati mentre test il codice, ma idealmente dovrebbe funzionare più o meno allo stesso modo alla fine) . -> (vai a)
- Se è una tabella di dati autonoma, esegue dt_win_Expr e crea una finestra in cui l'utente può selezionare la tabella di dati in cui risiede l'elemento grafico che desidera modificare. Ricorda che l'utente potrebbe avere più di una tabella di dati aperta con potenzialmente più di un Generatore di grafici aperto. | (o)
- Allo stesso modo, se l'utente seleziona un progetto, eseguirà prj_win_Expr (non ancora completato) per fare in modo che l'utente selezioni quale progetto (se più di uno aperto) e le successive tabelle di dati all'interno di quel progetto. -> (vai a)
- Dopo aver selezionato una tabella di dati, standalone o all'interno di un progetto, il codice esegue l'espressione SquarifyWin_Expr. La prima cosa che fa qui è verificare se esiste effettivamente un rapporto corrente - il codice If() dall'alto (potrebbe essere necessario modificare e verificare se il rapporto corrente è un generatore di grafici o meno). **Qui è dove il codice NON funziona come previsto. Anche se Graph Builder non è aperto, continuerà con il resto del codice quando dovrebbe generare l'avviso.** Se tutto funziona....-> (vai a)
- In base alle dimensioni dei pixel e all'eventuale quadratizzazione, il codice esegue quindi l'espressione RprtUpdate_Expr, dove invia gli aggiornamenti desiderati al report del Generatore di grafici.
Spero che questa descrizione abbia senso e aiuti a contestualizzare quale sia il mio percorso/funzionalità di programmazione desiderato.
Molte grazie in anticipo per qualsiasi aiuto nel trovare una soluzione. Codice JSL completo alla fine.
Grazie!,
ds
Names Default To Here( 1 );
Clear Symbols();
RprtUpdate_Expr = Expr(
gb = Current Report()[Outline Box( 1 )] << Get Scriptable Object;
Report( gb )[framebox( 1 )] << FrameSize( widthN, heightN );
theMax = Max( Report( gb )[axisbox( 1 )] << get max, Report( gb )[axisbox( 2 )] << get max );
theMin = Min( Report( gb )[axisbox( 1 )] << get min, Report( gb )[axisbox( 2 )] << get min );
Report( gb )[framebox( 1 )] << Xaxis( Min( theMin ), Max( theMax ) );
Report( gb )[framebox( 1 )] << Yaxis( Min( theMin ), Max( theMax ) );
Report( gb )[framebox( 1 )] << AddGraphicsScript(
xmin = X Origin();
xmax = X Origin() + X Range();
ymin = Y Origin();
ymax = Y Origin() + Y Range();
Pen Color( "blue" );
Pen Size( 1 );
Line Style( "solid" );
Line( {xmin, ymin}, {xmax, ymax} );
);
);
SquarifyWin_Expr = Expr(
If( Is Empty( Current Report() ) == 1,
Throw( "No Graph Builder Window is Open" )
);
nwin = New Window( "Enter Size of Desired Graph",
<<RETURN result=""></RETURN>