Un cliente ha chiesto come creare uno script JSL per richiedere ad altri utenti di definire LSL e USL per ogni tabella di sottoinsieme.
Ho pensato che fosse il caso di pubblicare lo script qui per aiutare altri che potrebbero avere la stessa richiesta in futuro. Chiunque abbia feedback, domande o suggerimenti per migliorare il tutto, non esiti ad aggiungere un commento.
// Subset data table
// → Data Table( "Product=B" )
dtList = Open("$SAMPLE_DATA/Abrasion.jmp")
<
<SUBSET></SUBSET>
Ottima sceneggiatura! Per renderla più generica, forse dovresti rispondere ad alcune domande extra:
- Utilizzeresti sempre questa funzione su tutte le tabelle aperte oppure l'utente dovrebbe poter scegliere le tabelle?
- Come viene definita la colonna su cui verranno impostati i limiti di specifica? La prima colonna nella tabella? L'utente dovrebbe poterli selezionare o forse dovrebbe semplicemente impostarli su tutte le colonne continue?
Inizierei anche lo script con Names Default To Here(1); per evitare alcuni problemi che potrebbero causare gli spazi dei nomi globali.
Potresti anche "costringere" i clienti a utilizzare la funzione "Gestisci limiti" di JMP. Il problema è che l'utente dovrebbe sapere di dover premere "Salva in Proprietà Colonna" e poi premere "OK".
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Abrasion.jmp");
dt <
<SUBSET></SUBSET>
<P>E per la versione "generica" che prenderebbe tutte le tabelle</P> <BR /> <BR /> <CODE class=" language-jsl">Names Default To Here(1);
For Each({dt_ref}, Get Data Table List(),
New Window("Manage Limits for " || (dt_ref << get name) || " - :Abrasion" , << modal, dt_ref << Manage Limits(Process Variables(dt_ref << Get Column Names("Continuous"))));
);
Molto probabilmente fornirei almeno agli utenti la possibilità di scegliere quali tabelle utilizzare, quindi sarebbe qualcosa del genere quando si utilizzano i limiti di gestione
Names Default To Here(1);
dtlist = Get Data Table List();
dtnames = Transform Each({dtref}, dtlist,
dtref << get name
);
// I don't like using modal windows, but maybe it is fine in this case
nw = New Window("Pick tables to set spec limits to", << modal, << return result,
<< On Validate(
If(N Items(lb_tables << get selected) < 1,
New Window("Warning", << modal,
H List Box(align("center"),
Icon box("Warning"),
Text Box("Select at least one table or cancel"), << Set Window Icon("Warning")
)
);
0;
,
1;
);
),
Lineup Box(N Col(2),
Panel Box("Pick Tables",
lb_tables = Listbox(dtnames)
),
Panel Box("Actions",
Button Box("OK",
user_selections = lb_tables << get selected;
),
Button Box("Cancel")
)
)
);
If(nw["Button"] == 1,
For Each({tablename}, nw["lb_tables"],
dt_ref = Datatable(tablename);
New Window("Manage Limits for " || (dt_ref << get name) || " - :Abrasion" , << modal,
H List Box(align("bottom"),
ml = dt_ref << Manage Limits(Process Variables(dt_ref << Get Column Names("Continuous"))),
Lineup Box(N Col(1),
Button Box("OK",
ml << Save to Column Properties; // could be used to "force save"
),
Button Box("Cancel")
)
)
);
);
);