顧客から、他のユーザーに各サブセット テーブルの LSL と USL を定義するように指示する JSL スクリプトを作成する方法について質問がありました。
将来同じ要望を持つかもしれない他の方のために、このスクリプトをここに投稿することにしました。フィードバック、ご質問、改善点などございましたら、お気軽にコメントをお寄せください。
// Subset data table
// → Data Table( "Product=B" )
dtList = Open("$SAMPLE_DATA/Abrasion.jmp")
<
<SUBSET></SUBSET>
素晴らしいスクリプトですね!より汎用的にするには、いくつか追加の質問に答える必要があるかもしれません。
- 開いているすべてのテーブルで常にこれを使用しますか、それともユーザーがテーブルを選択できるようにする必要がありますか?
- 仕様限界が設定される列はどのように定義されますか?テーブルの最初の列ですか?ユーザーがそれらを選択できるようにする必要がありますか?それとも、ユーザーが連続するすべての列に設定できるようにする必要がありますか?
また、グローバル名前空間が原因となる可能性のある問題を回避するために、スクリプトを Names Default To Here(1); で開始します。
顧客にJMPの「制限の管理」を「強制」することも可能です。ただし、この場合の問題は、ユーザーが「列プロパティに保存」を押してから「OK」を押す必要があることです。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Abrasion.jmp");
dt <
<SUBSET></SUBSET>
<P>そして、すべてのテーブルを取得する「汎用」バージョンの場合</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"))));
);
おそらく、少なくともユーザーにどのテーブルを使用するかを選択するオプションを提供するでしょう。つまり、制限の管理を使用する場合は次のようになります。
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")
)
)
);
);
);