Sto costruendo uno strumento per alcuni grafici personalizzati. Voglio che lo strumento sia facilmente modificato dagli utenti con cui lo condivido. Per ridurre la barriera all'ingresso vorrei utilizzare delle sottofunzioni che chiamo all'interno di una funzione master. Ciascuna sottofunzione rappresenterebbe una parte più piccola della funzione principale complessiva.
La mia domanda: è possibile sostituire gli argomenti di "Dispatch" all'interno del generatore di grafici come funzione? Oppure esiste un altro approccio standard per la creazione di sottofunzioni più piccole di cui non sono a conoscenza.
Grazie Jim per l'esauriente risposta. Ho pensato che avrei dovuto passarlo come testo e analizzarlo in qualche modo, ma di certo non mi aspettavo che fosse così brutto! Oh beh, immagino che questo sia il prezzo che pago per avere un requisito di nicchia del genere. Questo è perfetto per me però. Finché posso nascondere la maggior parte del brutto codice nella funzione master, sono felice perché il mio obiettivo è che venga lasciato in pace dall'utente finale. Al momento sono un vero sostenitore della comunità, ma spero di poter ripagare l'aiuto contribuendo in questo modo man mano che avrò più esperienza con lo scripting in JMP.
Ecco del codice che realizza ciò che desideri, ma non è molto carino.Quello che vuoi è essere in grado di eseguire la generazione di codice con la sostituzione, e questo non è gestito molto bene in JMP.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\semiconductor capability.jmp" );
myfunc = Function( {},
return =
"\[Dispatch(
{},
"2",
ScaleBox,
{Min( 92.9916666666667 ), Max( 127 ), Inc( 5 ), Minor Ticks( 1 ),
Add Ref Line( 118.356215277778, "Solid", "Black", "", 1 )}
)]\"
);
Eval(
Substitute(
Expr(
Bivariate( Y( :NPN1 ), X( :PNP1 ), SendToReport( __dispatch__ ) )
),
Expr( __dispatch__ ), Parse( myfunc )
)
);
JMP può gestire la sostituzione dei componenti all'interno della struttura della piattaforma, ad esempio il passaggio di un valore minimo.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\semiconductor capability.jmp" );
mymin = 80;
Bivariate(
Y( :NPN1 ),
X( :PNP1 ),
SendToReport(
Dispatch(
{},
"2",
ScaleBox,
{Min( Eval( mymin ) ), Max( 127 ), Inc( 5 ), Minor Ticks( 1 ),
Add Ref Line( 118.356215277778, "Solid", "Black", "", 1 )}
)
)
);
O quello che credo sia il metodo preferito, che consiste nel generare il grafico predefinito, e quindi impostare i parametri dopo la generazione, in cui una chiamata a una funzione potrebbe essere utilizzata per impostare condizionalmente gli elementi desiderati;
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\semiconductor capability.jmp" );
myfunc = function({},
Report( biv )[Axis Box( 1 )] << Min( 80 );
);
biv = Bivariate(
Y( :NPN1 ),
X( :PNP1 ),
SendToReport(
Dispatch(
{},
"2",
ScaleBox,
{Min( 92.9916666666667 ), Max( 127 ), Inc( 5 ), Minor Ticks( 1 ),
Add Ref Line( 118.356215277778, "Solid", "Black", "", 1 )}
)
)
);
myfunc;Ciao Jim,
Grazie per la risposta. Comunque cercherò di chiarire un po' il mio problema.
Diciamo che all'interno di Graph Builder nel mio script JSL, ho alcuni blocchi di codice come:
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(... etcIn questo forse ad esempio sto personalizzando il colore delle linee.
È possibile per me creare una funzione in un altro script JSL come:
myDispatch=Function(
{},
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(.... etce quindi all'interno dello script JSL, al posto della funzione di spedizione, avrei myDispatch().
L'ho provato e, sebbene non registri alcun errore, non applica la mia funzione (ovvero il grafico utilizza solo i colori delle linee predefinite ecc. E ignora la mia funzione). Non riesco a farlo funzionare senza digitare esplicitamente gli argomenti all'interno del Generatore di grafici stesso.
Grazie molto
Se guardi:
Aiuto==>Indice script==>Generatore di grafici
vedrai tutti i vari componenti che possono essere manipolati in Graph Builder, passando le richieste alla piattaforma.Tutti questi possono essere inseriti nelle funzioni di build dell'utente.
