如何建立一個兩列使用者輸入模式窗口,其中第二列是根據第一列上的單一輸入填充的?我想創建一個兩列用戶輸入模式窗口,其中用戶輸入進入“父部件 ID”的第一列(單個輸入框),並根據該窗口填充相鄰的第二列窗口條目(子部件 ID)。
- 第二列中的條目來自資料庫查詢(我已經有一個腳本)。 一個“父部件 ID”可以有一個或多個“子部件 ID”
- 此查詢腳本需要在輸入後在父部件 ID 輸入框旁選取一個複選框時執行。
- 一旦在第二列中選擇了一個或多個子部件 ID(視情況而定)(再次使用複選框),按下模式視窗底部的“確定”按鈕將使第二列中的選定條目可用(作為清單)供後續使用的腳本使用。
- 第二列中的條目的全選選項將是一個額外的優勢。
如果我能得到一些關於如何在 JSL 中進行此操作的想法,我將不勝感激。
自動化和腳本編寫視窗回覆:如何建立一個兩列使用者輸入模式窗口,其中第二列是根據第一列上的單一輸入填充的?您能否建立某種 UI 模型並提供一些範例資料?
回覆:如何建立一個兩列使用者輸入模式窗口,其中第二列是根據第一列上的單一輸入填充的?@jthi請參照附件。 使用者輸入例如 9098 並選取父零件 ID 下的方塊(紅色勾號,不需要紅色)。 選取此方塊會在背景執行一個腳本,該腳本會產生單列資料表或清單(我有此腳本,因此可以根據需要執行任一操作)。 此單一清單的行值或清單值填入使用者輸入視窗右側「子部件 ID」下的行。 然後,使用者使用複選框根據需要選擇圖表部件 ID(最好有“全選”和“取消選中所有”選項)。
按 Fetch 後,父部件 ID 和子部件 ID 將作為兩個單獨的清單提供,以供後續腳本使用。
希望我能夠解釋得夠清楚。

回覆:如何建立一個兩列使用者輸入模式窗口,其中第二列是根據第一列上的單一輸入填充的?好的。 我很少建議用按鈕替換複選框。 對於父元件 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")
)
)
)
);回覆:如何建立一個兩列使用者輸入模式窗口,其中第二列是根據第一列上的單一輸入填充的?@jthi謝謝。 這應該可以完成工作。 用按鈕代替複選框就可以了。 我已將您的腳本變更為函數,但當使用者按一下「確定」時,很難正確放置 get selected () 以獲得所選值作為清單(例如,我在函數底部註釋的 Return 語句)。 請問我可以得到一些關於正確放置 get selected () 的位置的指示嗎?
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);回覆:如何建立一個兩列使用者輸入模式窗口,其中第二列是根據第一列上的單一輸入填充的?將其放在「確定」按鈕內,以便當使用者按下該按鈕時執行。
回覆:如何建立一個兩列使用者輸入模式窗口,其中第二列是根據第一列上的單一輸入填充的?@jthi謝謝。 剛剛意識到上面的函數中缺少的一個關鍵部分是,當用戶單擊“獲取子 ID”時,需要運行一個腳本(我有)(在後台),該腳本將根據父 ID 生成子 ID進入。 這些子 ID 顯示在第二個面板中。 然後,使用者選擇一個或多個子 ID。
在這裡討論的範例中,父 ID 和子 ID 已經可用,但實際情況並非如此。
當使用者按一下「取得子 ID」時,如何讓腳本運行,其輸出會填入子 ID?
回覆:如何建立一個兩列使用者輸入模式窗口,其中第二列是根據第一列上的單一輸入填充的?我確實為您提供瞭如何使用 get_childids 處理該問題的想法,將其替換為您自己的函數,該函數獲取數據然後設置值(在本例中 aa_parents 只是“模擬”數據庫)。
回覆:如何建立一個兩列使用者輸入模式窗口,其中第二列是根據第一列上的單一輸入填充的?@jthi對了謝謝。 我需要有關如何運行腳本(實際上是一個以父 ID 作為輸入的函數)的幫助按一下「取得兒童 ID」按鈕。
回覆:如何建立一個兩列使用者輸入模式窗口,其中第二列是根據第一列上的單一輸入填充的?例子已經有了。 有什麼東西是你無法轉換來與你的腳本一起使用的嗎?這也許,即使它只是引用呼叫函數的元素的參數/參數的名稱,這也會令人困惑?
回覆:如何建立一個兩列使用者輸入模式窗口,其中第二列是根據第一列上的單一輸入填充的?@jthi我的 JMP 技能還不是很好(到目前為止我一直是 Matlab 用戶),所以仍然在 JMP 思維方式上掙扎。 我正在嘗試這一面,但到目前為止還沒有成功。 沒用過這前。
我嘗試的是使用 Get Selected Indices ()(我之前使用過的東西)來捕獲用戶點擊取得兒童 ID,在此基礎上呼叫函數來觸發並取得子 ID。 到目前為止仍然沒有成功。
回覆:如何建立一個兩列使用者輸入模式窗口,其中第二列是根據第一列上的單一輸入填充的?@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")
)
)
)
);
回覆:如何建立一個兩列使用者輸入模式窗口,其中第二列是根據第一列上的單一輸入填充的?@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); 回覆:如何建立一個兩列使用者輸入模式窗口,其中第二列是根據第一列上的單一輸入填充的?您需要使用 << Get Text 從文字編輯框中取得值
回覆:如何建立一個兩列使用者輸入模式窗口,其中第二列是根據第一列上的單一輸入填充的?@jthi是的,嘗試過<<取得文字。 我可以在新視窗之外獲取值()
我認為我的問題是獲取文本的正確放置。
當放置「取得子 ID」按鈕時,我無法從使用者輸入中取得父 ID 以正確傳遞。
按下「取得子 ID」應該使用使用者輸入的父 ID 來執行我的取得子 ID 函數。
希望在這裡得到一些幫助。
回覆:如何建立一個兩列使用者輸入模式窗口,其中第二列是根據第一列上的單一輸入填充的?您正在使用硬編碼輸入值“715”而不是使用者的輸入
回覆:如何建立一個兩列使用者輸入模式窗口,其中第二列是根據第一列上的單一輸入填充的?@jthi
>>您正在使用硬編碼輸入值“715”而不是使用者的輸入
這只是為了展示我在做什麼。 我想用用戶輸入替換“715”。
當按下取得子 ID 按鈕時,父 ID 需要傳遞給函數參數。
fetchChildIds ()
硬編碼的情況按預期工作,但我無法將使用者輸入作為上述函數的參數。
回覆:如何建立一個兩列使用者輸入模式窗口,其中第二列是根據第一列上的單一輸入填充的?該腳本沒有指示您使用例如
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);
);
);
等等。 嘗試讓整個腳本一次性運行是非常困難的,因此一次只解決一個更小的問題
回覆:如何建立一個兩列使用者輸入模式窗口,其中第二列是根據第一列上的單一輸入填充的?@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>
回覆:如何建立一個兩列使用者輸入模式窗口,其中第二列是根據第一列上的單一輸入填充的?它應該位於按鈕框內,而不是位於文字編輯框和按鈕框之間。
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>回覆:如何建立一個兩列使用者輸入模式窗口,其中第二列是根據第一列上的單一輸入填充的?@jthi謝謝,我永遠不會明白這一點。
但是,下面更新的腳本沒有將 returnedPid 的值作為參數傳遞給我的函數 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>回覆:如何建立一個兩列使用者輸入模式窗口,其中第二列是根據第一列上的單一輸入填充的?您確實應該通讀腳本指南並查看腳本索引以了解發生了什麼。
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)
);
)
)
)
);