最初の列の 1 つの入力に基づいて 2 番目の列にデータが入力される 2 列のユーザー入力モーダル ウィンドウを作成するにはどうすればよいですか?2 列のユーザー入力モーダル ウィンドウを作成したいと考えています。ユーザー入力は「親パーツ ID」の最初の列 (単一の入力ボックス) に入力され、それに基づいて隣接する 2 列目のウィンドウ エントリ (子パーツ ID) が設定されます。
- 2 番目の列のエントリは、データベース クエリからのものです (このクエリ用のスクリプトはすでにあります)。 「親パーツ ID」には 1 つまたは複数の「子パーツ ID」を含めることができます。
- このクエリ スクリプトは、入力後に親パーツ ID 入力ボックスの隣にあるチェックボックスがオンになったときに実行する必要があります。
- 2 番目の列で 1 つまたは複数の子パーツ ID (場合に応じて) を選択したら (やはりチェックボックスを使用)、モーダル ウィンドウの下部にある [OK] ボタンを押すと、2 番目の列で選択したエントリが使用可能になります。 (リストとして) 使用する後続のスクリプトを示します。
- 2 番目の列のエントリのすべてを選択するオプションを使用すると、さらに利点が得られます。
JSL でこれをどのように進めるかについていくつかのアイデアを得ることができれば幸いです。
自動化とスクリプト作成ウィンドウズRe: 最初の列の 1 つの入力に基づいて 2 番目の列にデータが入力される 2 列のユーザー入力モーダル ウィンドウを作成するにはどうすればよいですか?UI のモックアップのようなものを作成し、サンプル データを提供していただけますか?
Re: 最初の列の 1 つの入力に基づいて 2 番目の列にデータが入力される 2 列のユーザー入力モーダル ウィンドウを作成するにはどうすればよいですか?@jthi添付をご参照ください。 ユーザーは、たとえば 9098 と入力し、親部品 ID の下のボックス (赤いチェックマーク、ちなみに赤色にする必要はありません) をチェックします。 このボックスをチェックすると、単一列のデータ テーブルまたはリストを生成するスクリプトがバックグラウンドで実行されます (私はこのスクリプトを持っているので、必要に応じてどちらかを実行できます)。 この単一列テーブルの行値またはリスト値は、ユーザー入力ウィンドウの右側の「子パーツ ID」の下の行に入力されます。 次に、ユーザーはチェック ボックスを使用して必要に応じてチャート パーツ ID を選択します (「すべて選択」および「すべてのチェックを外す」オプションがあると便利です)。
[フェッチ] を押すと、親パーツ ID と子パーツ ID が、後続のスクリプトで使用する 2 つの別個のリストとして利用可能になります。
十分に明確に説明できたことを願っています。

Re: 最初の列の 1 つの入力に基づいて 2 番目の列にデータが入力される 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: 最初の列の 1 つの入力に基づいて 2 番目の列にデータが入力される 2 列のユーザー入力モーダル ウィンドウを作成するにはどうすればよいですか?@jthiありがとう。 これでうまくいくはずです。 チェックボックスの代わりにボタンを使用しても問題ありません。 スクリプトを関数に変更しましたが、ユーザーが「OK」をクリックしたときに、選択された値をリストとして取得するために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);Re: 最初の列の 1 つの入力に基づいて 2 番目の列にデータが入力される 2 列のユーザー入力モーダル ウィンドウを作成するにはどうすればよいですか?ユーザーがそのボタンを押したときに実行されるように、OK ボタンの内側に配置します。
Re: 最初の列の 1 つの入力に基づいて 2 番目の列にデータが入力される 2 列のユーザー入力モーダル ウィンドウを作成するにはどうすればよいですか?@jthiありがとう。 上記の関数に欠けている重要な部分は、ユーザーが「子 ID を取得」をクリックしたときに、親 ID に基づいて子 ID を生成するスクリプト (私が持っている) を (バックグラウンドで) 実行する必要があることに気づきました。入りました。 これらの子 ID は 2 番目のパネルに表示されます。 次に、ユーザーは 1 つ以上の子 ID を選択します。
ここで説明する例では、親 ID と子 ID はすでに利用可能ですが、実際の場合はそうではありません。
ユーザーが「子 ID の取得」をクリックしたときに実行されるスクリプトを取得して、その出力に子 ID が入力されるようにするにはどうすればよいですか?
Re: 最初の列の 1 つの入力に基づいて 2 番目の列にデータが入力される 2 列のユーザー入力モーダル ウィンドウを作成するにはどうすればよいですか?get_childids でそれを処理し、データを取得して値を設定する独自の関数に置き換える方法についてのアイデアを提供しました (この場合、aa_parents はデータベースを「シミュレート」しているだけです)。
Re: 最初の列の 1 つの入力に基づいて 2 番目の列にデータが入力される 2 列のユーザー入力モーダル ウィンドウを作成するにはどうすればよいですか?@jthiはい、ありがとう。 スクリプト (実際には入力として親 ID を持つ関数) を実行する方法についてヘルプが必要です。 「子IDの取得」ボタンをクリックします。
Re: 最初の列の 1 つの入力に基づいて 2 番目の列にデータが入力される 2 列のユーザー入力モーダル ウィンドウを作成するにはどうすればよいですか?例はすでに存在します。 スクリプトで動作するように変換できないものはありますか?これおそらく、それは関数を呼び出す要素を参照する引数/パラメータの単なる名前であるにもかかわらず、混乱を招く可能性がありますか?
Re: 最初の列の 1 つの入力に基づいて 2 番目の列にデータが入力される 2 列のユーザー入力モーダル ウィンドウを作成するにはどうすればよいですか?@jthi私の JMP スキルはまだ十分ではないため (これまでは Matlab ユーザーでしたが)、JMP の考え方にまだ苦労しています。 こちら側を試していますが、今のところ成功していません。 使われたことがないこれ前に。
私がしようとしていたのは、以前に使用したことのある Get Selected Indices () を使用して、ユーザーのクリックをキャプチャすることでしたお子様IDを取得し、これに基づいて関数呼び出しを実行し、子 ID を取得します。 繰り返しますが、これまでのところ成功はありません。
Re: 最初の列の 1 つの入力に基づいて 2 番目の列にデータが入力される 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: 最初の列の 1 つの入力に基づいて 2 番目の列にデータが入力される 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: 最初の列の 1 つの入力に基づいて 2 番目の列にデータが入力される 2 列のユーザー入力モーダル ウィンドウを作成するにはどうすればよいですか?テキスト編集ボックスから値を取得するには、<< Get Text を使用する必要があります。
Re: 最初の列の 1 つの入力に基づいて 2 番目の列にデータが入力される 2 列のユーザー入力モーダル ウィンドウを作成するにはどうすればよいですか?@jthiはい、<< Get Text を試しました。 new window() の外で値を取得できます
私の問題は、Get Text の正しい配置だと思います。
「子 ID を取得」ボタンが配置されているときに、ユーザー入力から親 ID を取得して正しく渡すことができません。
「Get Child ID」を押すと、ユーザー入力からの親 ID を使用して子 ID の取得関数が実行されます。
ここで助けていただければ幸いです。
Re: 最初の列の 1 つの入力に基づいて 2 番目の列にデータが入力される 2 列のユーザー入力モーダル ウィンドウを作成するにはどうすればよいですか?ユーザーの入力ではなく、ハードコードされた入力値「715」を使用しています。
Re: 最初の列の 1 つの入力に基づいて 2 番目の列にデータが入力される 2 列のユーザー入力モーダル ウィンドウを作成するにはどうすればよいですか?@jthi
>>ユーザーの入力ではなく、ハードコードされた入力値「715」を使用しています。
これは、私が何をしているかを示すためだけでした。 「715」をユーザー入力に置き換えたいと考えています。
[子 ID の取得] ボタンが押されたときに、親 ID を関数の引数に渡す必要があります。
fetchChildIds ()
ハードコードされたケースは期待どおりに機能しますが、上記の関数の引数としてユーザー入力を取得できません。
Re: 最初の列の 1 つの入力に基づいて 2 番目の列にデータが入力される 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);
);
);
等々。 スクリプト全体を一度に動作させるのは非常に難しいため、一度に 1 つずつ小さな問題に取り組んでください。
Re: 最初の列の 1 つの入力に基づいて 2 番目の列にデータが入力される 2 列のユーザー入力モーダル ウィンドウを作成するにはどうすればよいですか?@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: 最初の列の 1 つの入力に基づいて 2 番目の列にデータが入力される 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: 最初の列の 1 つの入力に基づいて 2 番目の列にデータが入力される 2 列のユーザー入力モーダル ウィンドウを作成するにはどうすればよいですか?@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>Re: 最初の列の 1 つの入力に基づいて 2 番目の列にデータが入力される 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)
);
)
)
)
);