Un cliente preguntó cómo crear un script JSL para solicitar a otros usuarios que definan LSL y USL para cada tabla de subconjunto.
Pensé que sería bueno publicar el guion aquí para ayudar a quienes tengan la misma solicitud en el futuro. Si tienen comentarios, preguntas o mejoras, no duden en dejar un comentario.
// Subset data table
// → Data Table( "Product=B" )
dtList = Open("$SAMPLE_DATA/Abrasion.jmp")
<
<SUBSET></SUBSET>
¡Excelente guion! Para hacerlo más genérico, posiblemente tendrías que responder algunas preguntas adicionales:
- ¿Usarías esto siempre en todas las mesas que están abiertas o el usuario debería poder elegir las mesas?
- ¿Cómo se define la columna en la que se establecerán los límites de especificación? ¿Primera columna de la tabla? ¿Debería el usuario poder seleccionarlos o quizás simplemente permitir que se establezcan en todas las columnas consecutivas?
También iniciaría el script con Nombres predeterminados aquí (1); para evitar algunos problemas que podría causar el espacio de nombres global.
También podría obligar a los clientes a usar los límites de administración de JMP. El problema es que el usuario tendría que saber cómo guardar en propiedades de columna y luego pulsar Aceptar.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Abrasion.jmp");
dt <
<SUBSET></SUBSET>
<P>Y para la versión "genérica" que simplemente tomaría todas las tablas</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"))));
);
Lo más probable es que al menos proporcione a los usuarios la opción de elegir qué tablas usar, de modo que sería algo como esto cuando se usan los límites de administración.
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")
)
)
);
);
);