如何创建一个两列用户输入模式窗口,其中第二列是根据第一列上的单个输入填充的?我想创建一个两列用户输入模式窗口,其中用户输入进入“父部件 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)
);
)
)
)
);