첫 번째 열의 단일 입력을 기반으로 두 번째 열이 채워지는 2열 사용자 입력 모달 창을 만드는 방법은 무엇입니까?인접한 두 번째 열 창 항목(하위 부품 ID)이 채워지는 것을 기준으로 사용자 입력이 "상위 부품 ID"에 대한 첫 번째 열(단일 입력 상자)로 이동하는 2열 사용자 입력 모달 창을 만들고 싶습니다.
- 두 번째 열의 항목은 데이터베이스 쿼리에서 가져온 것입니다(이미 스크립트가 있음). "상위 부품 ID"는 하나 이상의 "하위 부품 ID"를 가질 수 있습니다.
- 이 쿼리 스크립트는 입력 후 상위 부품 ID 입력 상자 옆에 있는 확인란이 선택된 경우 실행되어야 합니다.
- 두 번째 열에서 하나 이상의 하위 부품 ID(경우에 따라)를 선택한 후(다시 확인란 사용) 모달 창 하단에 있는 확인 버튼을 누르면 두 번째 열에서 선택한 항목을 사용할 수 있습니다. (목록으로) 사용할 후속 스크립트입니다.
- 두 번째 열의 항목에 대한 모든 옵션을 선택하면 추가적인 이점이 있습니다.
JSL에서 이 작업을 진행하는 방법에 대한 아이디어를 얻을 수 있다면 감사하겠습니다.
자동화 및 스크립팅윈도우Re: 첫 번째 열의 단일 입력을 기반으로 두 번째 열이 채워지는 2열 사용자 입력 모달 창을 만드는 방법은 무엇입니까?일종의 UI 모형을 만들고 몇 가지 예시 데이터를 제공해 주실 수 있나요?
Re: 첫 번째 열의 단일 입력을 기반으로 두 번째 열이 채워지는 두 개의 열 사용자 입력 모달 창을 만드는 방법은 무엇입니까?@jthi 첨부를 참조하십시오. 사용자는 예를 들어 9098을 입력하고 상위 부품 ID 아래의 상자(빨간색 체크 표시, 빨간색일 필요는 없음)를 선택합니다. 이 상자를 선택하면 단일 열 데이터 테이블이나 목록을 생성하는 스크립트가 백그라운드에서 실행됩니다(이 스크립트가 있으므로 필요에 따라 수행할 수 있습니다). 이 단일 열 테이블의 행 값 또는 목록 값은 하위 부품 ID 아래의 사용자 입력 창 오른쪽에 있는 행을 채웁니다. 그런 다음 사용자는 확인란을 사용하여 원하는 대로 차트 부분 ID를 선택합니다("모두 선택" 및 "모두 선택 취소" 옵션이 있으면 좋습니다).
가져오기를 누르면 후속 스크립트에서 사용할 수 있도록 상위 부품 ID와 하위 부품 ID가 두 개의 별도 목록으로 제공됩니다.
충분히 명확하게 설명할 수 있었으면 좋겠습니다.

Re: 첫 번째 열의 단일 입력을 기반으로 두 번째 열이 채워지는 2열 사용자 입력 모달 창을 만드는 방법은 무엇입니까?좋아요. 확인란을 버튼으로 대체하겠다는 제안은 거의 없습니다. 상위 부품 ID의 경우 "하위 부품 ID 가져오기"와 같은 것일 수 있고 하위 부품 ID의 경우 "모두 선택" 및 "모두 선택 취소"와 같은 것일 수 있습니다. 사용자는 목록 상자에서 선택을 수행할 수 있습니다.
이것은 당신이 무엇을 할 수 있는지에 대한 몇 가지 아이디어를 줄 수 있습니다
Names Default To Here(1);
aa_parents = ["123" => {"111", "222", "333"}, "345" => {"555", "777", "999"}];
aa_parents << Set Default Value({});
get_childids = function({this}, {Default Local},
new_childids = aa_parents[(this << prev sib) << get text];
lb_child << Set items(new_childids);
);
nw = New Window("", /*<< modal*/
H List Box(
Panel Box("Parent ID",
Lineup Box(N Col(2),
Text Edit Box("", << Set Width(150)),
Button Box("Get Child Ids", << set function(function({this},
get_childids(this);
)))
)
),
Panel Box("Child ID",
H List Box(
lb_child = List Box({}),
Lineup Box(N Col(1),
Button Box("Select All",
For Each({item, idx}, lb_child << get items,
lb_child << Set Selected(idx);
);
wait(0);
),
Button Box("Unselect All",
lb_child << Clear selection;
),
)
)
),
Panel Box("Actions",
Lineup Box(N Col(1),
Button Box("OK"),
Button Box("Cancel")
)
)
)
);Re: 첫 번째 열의 단일 입력을 기반으로 두 번째 열이 채워지는 2열 사용자 입력 모달 창을 만드는 방법은 무엇입니까?@jthi 감사해요. 이 작업을 수행해야 합니다. 체크박스 대신 버튼을 사용하는 것은 괜찮습니다. 스크립트를 함수로 변경했지만 사용자가 확인을 클릭할 때 선택한 값을 목록으로 가져오기 위해 get selected()를 올바르게 배치하는 데 어려움을 겪고 있습니다(예: 함수 하단에 주석 처리된 Return 문). 선택()을 올바르게 배치할 위치에 대한 지침을 얻을 수 있습니까?
Names Default To Here (1);
getUserInput = Function ({aa_parent}, {return_selectionAslist},
aa_parents << Set Default Value({});
get_childids = function({this}, {Default Local},
new_childids = aa_parents[(this << prev sib) << get text];
lb_child << Set items(new_childids);
);
nw = New Window("",
H List Box(
Panel Box("[1] Enter Parent ID",
Lineup Box(N Col(2),
Text Edit Box("", << Set Width(150)),
Button Box("Get Child Ids", << set function(function({this},
get_childids(this);
)))
)
),
Panel Box("[2] Select Child ID",
H List Box(
lb_child = List Box({}),
Lineup Box(N Col(1),
Button Box("Select All",
For Each({item, idx}, lb_child << get items,
lb_child << Set Selected(idx);
);
wait(0);
),
Button Box("Unselect All",
lb_child << Clear selection;
),
)
)
),
Panel Box("[3] Fetch Test Data",
Lineup Box(N Col(1),
Button Box("OK"),
Button Box("Cancel")
)
)
)
);
// return_selectionAslist = As List [Parent ID, selected_Child_ID(s) ];
Return (return_selectionAslist);
);
//Test
clear log ();
aa_parent_1 = ["123" => {"111", "222", "333"}]; aa_parent_2 = ["345" => {"555", "777", "999"}];
myList= getUserInput (aa_parent_1);Re: 첫 번째 열의 단일 입력을 기반으로 두 번째 열이 채워지는 2열 사용자 입력 모달 창을 만드는 방법은 무엇입니까?OK 버튼 안에 넣으면 사용자가 해당 버튼을 눌렀을 때 실행됩니다.
Re: 첫 번째 열의 단일 입력을 기반으로 두 번째 열이 채워지는 두 개의 열 사용자 입력 모달 창을 만드는 방법은 무엇입니까?@jthi 감사해요. 위 함수에서 누락된 핵심 부분은 사용자가 부모 ID를 기반으로 자식 ID를 생성하는 "자식 ID 가져오기"를 클릭할 때 (내가 가지고 있는) 스크립트를 (백그라운드에서) 실행해야 한다는 것입니다. 입력했습니다. 이러한 하위 ID는 두 번째 패널에 표시됩니다. 그런 다음 사용자는 하나 이상의 자녀 ID를 선택합니다.
여기에 설명된 예에서는 상위 ID와 하위 ID가 이미 사용 가능하지만 실제 사례에서는 그렇지 않습니다.
사용자가 "자녀 ID 가져오기"를 클릭하면 출력에 하위 ID가 채워지는 스크립트를 실행하는 방법은 무엇입니까?
Re: 첫 번째 열의 단일 입력을 기반으로 두 번째 열이 채워지는 2열 사용자 입력 모달 창을 만드는 방법은 무엇입니까?get_childids를 사용하여 이를 처리하는 방법에 대한 아이디어를 제공했으며, 이를 데이터를 가져온 다음 값을 설정하는 자체 함수로 대체합니다(이 경우 aa_parents는 데이터베이스를 "시뮬레이션"하는 것입니다).
Re: 첫 번째 열의 단일 입력을 기반으로 두 번째 열이 채워지는 두 개의 열 사용자 입력 모달 창을 만드는 방법은 무엇입니까?@jthi 네, 감사합니다. 스크립트(실제로는 상위 ID를 입력으로 사용하는 함수)를 실행하는 방법에 대한 도움이 필요합니다. 자녀 ID 가져오기 버튼을 클릭합니다.
Re: 첫 번째 열의 단일 입력을 기반으로 두 번째 열이 채워지는 2열 사용자 입력 모달 창을 만드는 방법은 무엇입니까?예가 이미 있습니다. 스크립트로 작업하기 위해 변환할 수 없는 것이 있습니까? 이것 아마도 함수를 호출하는 요소를 참조하는 인수/매개변수의 이름일 뿐인데도 혼란스러울 수 있습니까?
Re: 첫 번째 열의 단일 입력을 기반으로 두 번째 열이 채워지는 2열 사용자 입력 모달 창을 만드는 방법은 무엇입니까?@jthi 내 JMP 기술은 아직 좋지 않아서(지금까지 Matlab 사용자였습니다) 여전히 JMP 사고 방식에 어려움을 겪고 있습니다. 나는 이쪽을 시도하고 있지만 지금까지는 성공하지 못했습니다. 한번도 사용하지 않음 이것 전에.
내가 시도한 것은 사용자 클릭을 캡처하기 위해 이전에 사용한 Get Selected Indices()를 사용하는 것이었습니다. 자녀 ID 받기, 이를 기반으로 함수 호출을 실행하고 하위 ID를 가져옵니다. 이번에도 성공하지 못했습니다.
Re: 첫 번째 열의 단일 입력을 기반으로 두 번째 열이 채워지는 2열 사용자 입력 모달 창을 만드는 방법은 무엇입니까?@jthi . 어느 정도 진전을 이룬 것 같지만 여전히 도움이 필요합니다.
나는 (이 스레드의 5번 포스트에 있는 함수 대신) 스크립트로 다시 이동했습니다.
아래는 부분적으로 작동하는 스크립트입니다. 내 fetchChildIds 함수에 입력된 사용자 상위 ID에서 상위 ID(예: 아래 "715")를 입력하는 데 어려움을 겪고 있습니다. 여기에 도움이 필요합니다.
기본적으로 "715"를 대체하려면 텍스트 편집 상자에 대한 입력을 함수 인수로 가져와야 합니다.
Names Default To Here (1);
clear log ();
include ("_fetchChildIds.jsl");
//aa_parents << Set Default Value({});
get_childids = function({this}, {Default Local},
//new_childids = aa_parents[(this << prev sib) << get text];
new_childids = fetchChildIds ("715");
lb_child << Set items(new_childids);
);
nw = New Window("",
H List Box(
Panel Box("[1] Enter Parent ID", //sets outside panel
Lineup Box(N Col(2),
pid = Text Edit Box("", << Set Width(150)),
Button Box("Get Child ID(s)", << set function(function({this},
get_childids(this);
)))
)
),
Panel Box("[2] Select Child ID",
H List Box(
lb_child = List Box({}),
Lineup Box(N Col(1),
Button Box("Select All",
For Each({item, idx}, lb_child << get items,
lb_child << Set Selected(idx);
);
wait(0);
),
Button Box("Unselect All",
lb_child << Clear selection;
),
)
)
),
Panel Box("[3] Fetch Test Data",
Lineup Box(N Col(1),
Button Box("OK"),
Button Box("Cancel")
)
)
)
);
Re: 첫 번째 열의 단일 입력을 기반으로 두 번째 열이 채워지는 2열 사용자 입력 모달 창을 만드는 방법은 무엇입니까?@jthi
사용자가 입력한 상위 ID가 표시되지 않는 이유는 무엇입니까? 715로 진행됩니다. 업데이트된 값은 가져오거나 사용되지 않습니다. 텍스트 편집 상자 아래 등 잘못된 위치에 배치하고 있습니까?
pid = Text Edit Box("715", << Set Width(150)),
ParentID = nw["pid" ]; show (ParentID);사용자가 업데이트한 ParentID는 새 창() 외부에서 사용할 수 있지만 버튼 상자를 누를 때 필요하다고 생각합니다.
Button Box("Get Child ID(s)", << set function(function({this},
get_childids(this); Re: 첫 번째 열의 단일 입력을 기반으로 두 번째 열이 채워지는 2열 사용자 입력 모달 창을 만드는 방법은 무엇입니까?텍스트 편집 상자에서 값을 얻으려면 << 텍스트 가져오기를 사용해야 합니다.
Re: 첫 번째 열의 단일 입력을 기반으로 두 번째 열이 채워지는 2열 사용자 입력 모달 창을 만드는 방법은 무엇입니까?@jthi 예, << 텍스트 가져오기를 시도했습니다. 새 창 외부에서 값을 얻을 수 있습니다()
내 문제는 Get Text의 올바른 배치라고 생각합니다.
"자녀 ID 가져오기" 버튼을 눌렀을 때 사용자 입력에서 부모 ID를 가져올 수 없습니다.
"자녀 ID 가져오기"를 누르면 사용자 입력의 상위 ID를 사용하여 아동 ID 가져오기 기능이 실행됩니다.
여기에 도움을 주시면 감사하겠습니다.
Re: 첫 번째 열의 단일 입력을 기반으로 두 번째 열이 채워지는 2열 사용자 입력 모달 창을 만드는 방법은 무엇입니까?사용자 입력이 아닌 하드코딩된 입력값 "715"를 사용하고 있습니다.
Re: 첫 번째 열의 단일 입력을 기반으로 두 번째 열이 채워지는 2열 사용자 입력 모달 창을 만드는 방법은 무엇입니까?@jthi
>> 사용자 입력이 아닌 하드코딩된 입력값 "715"를 사용하고 있습니다.
이것은 단지 내가 무엇을 하고 있는지 보여주기 위한 것이었습니다. "715"를 사용자 입력으로 바꾸고 싶습니다.
하위 ID 가져오기 버튼을 누르면 상위 ID가 함수 인수에 전달되어야 합니다.
fetchChildIds ()
하드 코딩된 케이스는 예상대로 작동하지만 위에서 언급한 함수에 대한 인수로 사용자 입력을 가져올 수 없습니다.
Re: 첫 번째 열의 단일 입력을 기반으로 두 번째 열이 채워지는 2열 사용자 입력 모달 창을 만드는 방법은 무엇입니까?스크립트에는 예를 들어 사용 중이라는 표시가 없습니다.
pid << get text
이것을 사용하여 디스플레이 상자를 이동하는 방법은 더 복잡하지만(때때로 더 강력할 수도 있음) 참조만 사용하면 충분합니다.
또한 매우 간단한 스크립트로 시작하여 먼저 작동하게 하세요. 스크립팅 인덱스 예제로 시작하세요:
Names Default To Here(1);
win = New Window("Example", fontobj = text = Text Edit Box("Example Text"));
Print(text << Get Text());
버튼 상자를 갖도록 수정하십시오.
Names Default To Here(1);
win = New Window("Example",
teb = Text Edit Box("Example Text"),
Button Box("Get Text")
);
버튼에 기능/표현 추가
Names Default To Here(1);
win = New Window("Example",
teb = Text Edit Box("Example Text"),
Button Box("Get Text",
show(teb << get text)
);
);
함수/표현식을 버튼 상자 밖으로 이동
Names Default To Here(1);
get_my_text = function({}, {Default Local},
show(teb << get text)
);
win = New Window("Example",
teb = Text Edit Box("Example Text"),
Button Box("Get Text",
get_my_text();
);
);
함수가 뭔가를 반환하게 하세요
Names Default To Here(1);
get_my_text = function({}, {Default Local},
teb_txt = teb << get text;
return(teb_txt);
);
win = New Window("Example",
teb = Text Edit Box("Example Text"),
Button Box("Get Text",
user_txt = get_my_text();
show(user_txt);
);
);
등등. 전체 스크립트를 한 번에 작동시키려는 것은 매우 어렵습니다. 따라서 훨씬 작은 문제를 한 번에 하나씩 작업하십시오.
Re: 첫 번째 열의 단일 입력을 기반으로 두 번째 열이 채워지는 두 개의 열 사용자 입력 모달 창을 만드는 방법은 무엇입니까?@jthi 귀하의 의견에 감사드립니다. 이제 내가 겪고 있는 문제를 강조하는 데 도움이 될 수 있도록 스크립트를 훨씬 더 작게 만들었습니다.
아래 대문자로 된 내 의견(returnedPid = pid << get text; show (returnedPid)에 인접)에 도움이 필요합니다.
상위 ID에 대한 사용자 입력이 get_childids 함수 호출로 전달되지 않습니다.내 <
Names Default To Here (1);
// function inclusion to fetch child IDs from data base for a given Parent ID.
include ("_fetchChildIds.jsl"); // function called below.
get_childids = function({this}, {Default Local},
new_childids = fetchChildIds (returnedPid);
//lb_child << Set items(new_childids);
);
nw = New Window("FetchData ", //<< Modal, <<RETURN result=""></RETURN>
Re: 첫 번째 열의 단일 입력을 기반으로 두 번째 열이 채워지는 2열 사용자 입력 모달 창을 만드는 방법은 무엇입니까?텍스트 편집 상자와 버튼 상자 사이가 아닌 버튼 상자 내부에 있어야 합니다.
Names Default To Here(1);
nw = New Window("FetchData ",
H List Box(
Panel Box("[1] Enter Parent ID",
Lineup Box(N Col(2),
pid = Text Edit Box("", <<SET width=""></SET>Re: 첫 번째 열의 단일 입력을 기반으로 두 번째 열이 채워지는 2열 사용자 입력 모달 창을 만드는 방법은 무엇입니까?@jthi 고마워요, 나는 그것을 결코 이해하지 못했을 것입니다.
그러나 아래의 업데이트된 스크립트는 returnPid 값을 내 함수 fetchChildIds(:
Names Default To Here (1);
clear log ();
include ("_fetchChildIds.jsl");
//aa_parents << Set Default Value({});
get_childids = function({this}, {Default Local},
//new_childids = aa_parents[(this << prev sib) << get text];
new_childids = fetchChildIds (returnedPid);
lb_child << Set items(new_childids);
);
nw = New Window("Fetch Summary Data ", << Modal, <<RETURN result=""></RETURN>Re: 첫 번째 열의 단일 입력을 기반으로 두 번째 열이 채워지는 2열 사용자 입력 모달 창을 만드는 방법은 무엇입니까?실제로 무슨 일이 일어나고 있는지 이해하려면 스크립팅 가이드를 읽고 스크립팅 인덱스를 확인해야 합니다.
Names Default To Here (1);
get_childids = function({user_input}, {Default Local},
show(user_input);
// do something
// get return value...
retval = user_input; // for demo purposes
return(retval);
);
nw = New Window("Fetch Summary Data ",
H List Box(
Panel Box("[1] Enter Parent ID", //sets outside panel
Lineup Box(N Col(2),
pid = Text Edit Box("", << Set Width(150)),
Button Box("Get Child ID(s)",
user_input = pid << get text;
childids = get_childids(user_input);
// do something with childids (or do it outside within the function but change the function name)
);
)
)
)
);