한 고객이 다른 사용자에게 각 하위 집합 테이블에 대한 LSL과 USL을 정의하도록 촉구하는 JSL 스크립트를 만드는 방법을 문의했습니다.
나중에 같은 요청을 하실 분들께 도움이 될까 싶어 스크립트를 여기에 게시합니다. 피드백, 질문, 개선 사항이 있으시면 언제든지 댓글로 남겨주세요.
// Subset data table
// → Data Table( "Product=B" )
dtList = Open("$SAMPLE_DATA/Abrasion.jmp")
<
<SUBSET></SUBSET>
훌륭한 대본입니다! 좀 더 일반적인 내용으로 작성하려면 몇 가지 추가 질문에 답해야 할 수도 있습니다.
- 열려 있는 모든 테이블에 항상 이것을 사용하시겠습니까? 아니면 사용자가 테이블을 선택할 수 있어야 합니까?
- 사양 제한이 설정될 열은 어떻게 정의되나요? 표의 첫 번째 열인가요? 사용자가 직접 선택할 수 있어야 하나요, 아니면 모든 연속 열에 대해 사용자가 설정하도록 할 수 있나요?
글로벌 네임스페이스로 인해 발생할 수 있는 일부 문제를 방지하기 위해 스크립트를 Names Default To Here(1);로 시작할 수도 있습니다.
고객이 JMP의 제한 관리 기능을 사용하도록 "강요"할 수도 있습니다. 이 경우 "문제"는 사용자가 "열 속성에 저장"을 클릭한 후 "확인"을 클릭해야 한다는 것입니다.
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")
)
)
);
);
);