Ein Kunde fragte, wie man ein JSL-Skript erstellt, um andere Benutzer aufzufordern, die LSL und USL für jede Teilmengentabelle zu definieren.
Ich dachte mir, ich könnte das Skript auch hier veröffentlichen, um anderen zu helfen, die in Zukunft möglicherweise dasselbe Anliegen haben. Wer Feedback, Fragen oder Verbesserungsvorschläge hat, kann gerne einen Kommentar hinterlassen.
// Subset data table
// → Data Table( "Product=B" )
dtList = Open("$SAMPLE_DATA/Abrasion.jmp")
<
<SUBSET></SUBSET>
Tolles Skript! Um es allgemeiner zu gestalten, müssten Sie möglicherweise einige zusätzliche Fragen beantworten:
- Würden Sie dies immer für alle geöffneten Tabellen verwenden oder sollte der Benutzer die Tabellen auswählen können?
- Wie ist die Spalte definiert, auf die die Spezifikationsgrenzen gesetzt werden? Erste Spalte in der Tabelle? Soll der Benutzer sie auswählen können oder soll er sie einfach auf alle fortlaufenden Spalten setzen können?
Ich würde das Skript auch mit „Names Default To Here(1)“ starten, um einige Probleme zu vermeiden, die der globale Namespace verursachen könnte.
Sie könnten die Kunden auch dazu bringen, die JMP-Limitverwaltung zu nutzen. Das Problem dabei ist, dass der Benutzer wissen muss, dass er auf „In Spalteneigenschaften speichern“ und dann auf „OK“ klicken muss.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Abrasion.jmp");
dt <
<SUBSET></SUBSET>
<P>Und für die "generische" Version, die einfach alle Tabellen übernehmen würde</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"))));
);
Ich würde den Benutzern höchstwahrscheinlich zumindest die Möglichkeit geben, auszuwählen, welche Tabellen verwendet werden sollen. Bei der Verwendung von Verwaltungslimits wäre dies in etwa so:
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")
)
)
);
);
);