Wie erstelle ich ein zweispaltiges modales Benutzereingabefenster, in dem die zweite Spalte basierend auf einer einzelnen Eingabe in der ersten Spalte ausgefüllt wird?Ich möchte ein zweispaltiges modales Benutzereingabefenster erstellen, in dem die Benutzereingabe in die erste Spalte (einzelnes Eingabefeld) für eine „ID des übergeordneten Teils“ geht, auf deren Grundlage benachbarte Fenstereinträge der zweiten Spalte (IDs des untergeordneten Teils) ausgefüllt werden.
- Die Einträge in der zweiten Spalte stammen aus einer Datenbankabfrage (für die ich bereits ein Skript habe). Eine „übergeordnete Teile-ID“ kann eine oder mehrere „untergeordnete Teile-IDs“ haben.
- Dieses Abfrageskript muss ausgeführt werden, wenn nach der Eingabe ein Kontrollkästchen neben dem Eingabefeld für die übergeordnete Teile-ID aktiviert wird.
- Sobald eine oder mehrere untergeordnete Teile-IDs (je nach Fall) in der zweiten Spalte ausgewählt sind (wiederum mithilfe des Kontrollkästchens), klicken Sie auf die Schaltfläche „OK“ am unteren Rand des modalen Fensters, um die ausgewählten Einträge in der zweiten Spalte verfügbar zu machen (als Liste) für ein Folgeskript zur Verwendung.
- Ein zusätzlicher Vorteil wäre die Option „Alles auswählen“ für die Einträge in der zweiten Spalte.
Ich würde mich freuen, wenn ich ein paar Ideen dazu bekommen könnte, wie ich damit in JSL vorgehen kann.
Automatisierung und SkripterstellungWindowsBetreff: Wie erstelle ich ein zweispaltiges modales Benutzereingabefenster, in dem die zweite Spalte basierend auf einer einzelnen Eingabe in der ersten Spalte ausgefüllt wird?Könnten Sie eine Art Modell der Benutzeroberfläche erstellen und einige Beispieldaten bereitstellen?
Betreff: Wie erstelle ich ein zweispaltiges modales Benutzereingabefenster, in dem die zweite Spalte basierend auf einer einzelnen Eingabe in der ersten Spalte ausgefüllt wird?@jthi Siehe Anhang. Der Benutzer gibt beispielsweise 9098 ein und aktiviert das Kontrollkästchen (rotes Häkchen, muss übrigens nicht rot sein) unter der übergeordneten Teile-ID. Wenn Sie dieses Kontrollkästchen aktivieren, wird im Hintergrund ein Skript ausgeführt, das eine einspaltige Datentabelle oder eine Liste generiert (ich habe dieses Skript und kann daher bei Bedarf beides tun). Die Zeilenwerte dieser einspaltigen Tabelle oder Listenwerte füllen die Zeilen auf der rechten Seite des Benutzereingabefensters unter „ID des untergeordneten Teils“ auf. Der Benutzer wählt dann die gewünschten Diagrammteil-IDs mithilfe des Kontrollkästchens aus (die Optionen „Alle auswählen“ und „Alle deaktivieren“ wären toll).
Beim Drücken von „Abrufen“ werden die IDs des übergeordneten Teils und des untergeordneten Teils als zwei separate Listen zur Verfügung gestellt, damit ein Folgeskript verwendet werden kann.
Ich hoffe, ich konnte es klar genug erklären.

Betreff: Wie erstelle ich ein zweispaltiges modales Benutzereingabefenster, in dem die zweite Spalte basierend auf einer einzelnen Eingabe in der ersten Spalte ausgefüllt wird?OK. Einige Vorschläge: Ich würde Kontrollkästchen durch Schaltflächen ersetzen. Für die ID des übergeordneten Teils könnte es so etwas wie „IDs des untergeordneten Teils abrufen“ und für die Schaltflächen für die ID des untergeordneten Teils „Alle auswählen“ und „Alle Auswahl aufheben“ lauten. Der Benutzer kann seine Auswahl im Listenfeld treffen.
Dies könnte Ihnen einige Ideen geben, was Sie tun könnten
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")
)
)
)
);Betreff: Wie erstelle ich ein zweispaltiges modales Benutzereingabefenster, in dem die zweite Spalte basierend auf einer einzelnen Eingabe in der ersten Spalte ausgefüllt wird?@jthi Danke. Das sollte den Job machen. Schaltflächen anstelle des Kontrollkästchens sind in Ordnung. Ich habe Ihr Skript in eine Funktion geändert, habe aber Schwierigkeiten, get selected () richtig zu platzieren, um die ausgewählten Werte als Liste zu erhalten (z. B. meine kommentierte Return-Anweisung am Ende der Funktion), wenn der Benutzer auf OK klickt. Könnte ich bitte ein paar Hinweise dazu bekommen, wo ich get selected() richtig platzieren soll?
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);Betreff: Wie erstelle ich ein zweispaltiges modales Benutzereingabefenster, in dem die zweite Spalte basierend auf einer einzelnen Eingabe in der ersten Spalte ausgefüllt wird?Fügen Sie es in die Schaltfläche „OK“ ein, damit es ausgeführt wird, wenn der Benutzer diese Schaltfläche drückt.
Betreff: Wie erstelle ich ein zweispaltiges modales Benutzereingabefenster, in dem die zweite Spalte basierend auf einer einzelnen Eingabe in der ersten Spalte ausgefüllt wird?@jthi Danke. Ich habe gerade festgestellt, dass ein wichtiger Teil, der in der obigen Funktion fehlt, darin besteht, dass ein Skript (das ich habe) (im Hintergrund) ausgeführt werden muss, wenn der Benutzer auf „Untergeordnete IDs abrufen“ klickt, wodurch die untergeordneten IDs basierend auf der übergeordneten ID generiert werden trat ein. Diese Kinder-IDs werden im zweiten Bereich angezeigt. Der Benutzer wählt dann eine oder mehrere der Kinder-IDs aus.
Im hier besprochenen Beispiel sind die Parent-IDs und Child-IDs bereits vorhanden, was im realen Fall nicht der Fall wäre.
Wie kann ein Skript ausgeführt werden, wenn der Benutzer auf „Untergeordnete IDs abrufen“ klickt, dessen Ausgabe die untergeordneten IDs auffüllt?
Betreff: Wie erstelle ich ein zweispaltiges modales Benutzereingabefenster, in dem die zweite Spalte basierend auf einer einzelnen Eingabe in der ersten Spalte ausgefüllt wird?Ich habe Ihnen eine Idee gegeben, wie Sie damit mit get_childids umgehen können. Ersetzen Sie es durch Ihre eigene Funktion, die die Daten abruft und dann die Werte festlegt (aa_parents „simuliert“ in diesem Fall nur die Datenbank).
Betreff: Wie erstelle ich ein zweispaltiges modales Benutzereingabefenster, in dem die zweite Spalte basierend auf einer einzelnen Eingabe in der ersten Spalte ausgefüllt wird?@jthi Ja dank. Ich benötige Hilfe beim Ausführen eines Skripts (eigentlich einer Funktion mit der übergeordneten ID als Eingabe), wenn das Auf die Schaltfläche „Kinder-IDs abrufen“ wird geklickt.
Betreff: Wie erstelle ich ein zweispaltiges modales Benutzereingabefenster, in dem die zweite Spalte basierend auf einer einzelnen Eingabe in der ersten Spalte ausgefüllt wird?Beispiel ist schon da. Gibt es etwas, das Sie nicht in Ihr Skript umwandeln können? Das Vielleicht, was verwirrend sein kann, obwohl es nur ein Name für ein Argument/einen Parameter ist, der sich auf das Element bezieht, das die Funktion aufruft?
Betreff: Wie erstelle ich ein zweispaltiges modales Benutzereingabefenster, in dem die zweite Spalte basierend auf einer einzelnen Eingabe in der ersten Spalte ausgefüllt wird?@jthi Meine JMP-Kenntnisse sind noch nicht gut (ich war bisher ein Matlab-Benutzer), daher habe ich immer noch Probleme mit der JMP-Denkweise. Ich versuche es auf dieser Seite, aber bisher ohne Erfolg. Nie benutzt Das Vor.
Ich habe versucht, Get Selected Indices () zu verwenden, etwas, das ich zuvor verwendet habe, um Benutzerklicks zu erfassen Holen Sie sich Kinder-IDs, Basierend darauf erhalten Sie den Funktionsaufruf zum Auslösen und Abrufen der untergeordneten IDs. Wieder kein Erfolg bisher.
Betreff: Wie erstelle ich ein zweispaltiges modales Benutzereingabefenster, in dem die zweite Spalte basierend auf einer einzelnen Eingabe in der ersten Spalte ausgefüllt wird?@jthi . Ich scheine einige Fortschritte gemacht zu haben, brauche aber immer noch Hilfe.
Ich bin wieder zum Skript übergegangen (anstelle der Funktion in Beitrag 5 in diesem Thread).
Unten finden Sie ein teilweise funktionierendes Skript. Ich habe Schwierigkeiten, die Eltern-ID (z. B. „715“ unten) aus der Eltern-ID-Eingabe des Benutzers in meine fetchChildIds-Funktion einzugeben. Brauche hier Hilfe.
Grundsätzlich muss ich die Eingabe in das Textbearbeitungsfeld in mein Funktionsargument übernehmen, um „715“ zu ersetzen.
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")
)
)
)
);
Betreff: Wie erstelle ich ein zweispaltiges modales Benutzereingabefenster, in dem die zweite Spalte basierend auf einer einzelnen Eingabe in der ersten Spalte ausgefüllt wird?@jthi
Warum wird hier nicht die vom Benutzer eingegebene Eltern-ID angezeigt? Weiter geht es mit 715. Ein aktualisierter Wert wird nicht übernommen/verwendet. Platziere ich es an der falschen Stelle, z. B. unter dem Textbearbeitungsfeld?
pid = Text Edit Box("715", << Set Width(150)),
ParentID = nw["pid" ]; show (ParentID);Die vom Benutzer aktualisierte ParentID ist außerhalb des neuen Fensters verfügbar (), aber ich glaube, ich brauche sie, wenn die Schaltflächenbox gedrückt wird.
Button Box("Get Child ID(s)", << set function(function({this},
get_childids(this); Betreff: Wie erstelle ich ein zweispaltiges modales Benutzereingabefenster, in dem die zweite Spalte basierend auf einer einzelnen Eingabe in der ersten Spalte ausgefüllt wird?Sie müssen << Text abrufen verwenden, um den Wert aus dem Textbearbeitungsfeld abzurufen
Betreff: Wie erstelle ich ein zweispaltiges modales Benutzereingabefenster, in dem die zweite Spalte basierend auf einer einzelnen Eingabe in der ersten Spalte ausgefüllt wird?@jthi Ja, habe es mit << Get Text versucht. Ich kann den Wert außerhalb des neuen Fensters () abrufen
Ich denke, mein Problem ist die korrekte Platzierung des Get-Texts.
Ich kann die Eltern-ID aus der Benutzereingabe nicht korrekt weitergeben, wenn die Schaltfläche „Kinder-ID abrufen“ platziert ist.
Wenn ich auf „Kinder-ID abrufen“ drücke, sollte meine Funktion zum Abrufen der Kinder-ID mit der Eltern-ID aus der Benutzereingabe ausgeführt werden.
Würde mich hier über etwas Hilfe freuen.
Betreff: Wie erstelle ich ein zweispaltiges modales Benutzereingabefenster, in dem die zweite Spalte basierend auf einer einzelnen Eingabe in der ersten Spalte ausgefüllt wird?Sie verwenden den hartcodierten Eingabewert „715“ und nicht die Eingabe des Benutzers
Betreff: Wie erstelle ich ein zweispaltiges modales Benutzereingabefenster, in dem die zweite Spalte basierend auf einer einzelnen Eingabe in der ersten Spalte ausgefüllt wird?@jthi
>> Sie verwenden den hartcodierten Eingabewert „715“ und nicht die Eingabe des Benutzers
Dies sollte nur zeigen, was ich tue. Ich möchte „715“ durch Benutzereingaben ersetzen.
Die übergeordnete ID muss an das Funktionsargument übergeben werden, wenn auf die Schaltfläche „Untergeordnete IDs abrufen“ geklickt wird.
fetchChildIds ()
Der hartcodierte Fall funktioniert wie erwartet, aber ich kann die Benutzereingabe nicht als Argument für meine oben genannte Funktion erhalten.
Betreff: Wie erstelle ich ein zweispaltiges modales Benutzereingabefenster, in dem die zweite Spalte basierend auf einer einzelnen Eingabe in der ersten Spalte ausgefüllt wird?Das Skript enthält keine Hinweise darauf, dass Sie beispielsweise Folgendes verwenden
pid << get text
Meine Methode, dies zum Reisen von Anzeigeboxen zu verwenden, ist komplizierter (aber manchmal möglicherweise robuster). Die Verwendung einer Referenz sollte ausreichen.
Beginnen Sie auch mit einem sehr einfachen Skript und bringen Sie es zunächst zum Laufen. Beginnen Sie mit einem Beispiel für einen Skriptindex:
Names Default To Here(1);
win = New Window("Example", fontobj = text = Text Edit Box("Example Text"));
Print(text << Get Text());
Ändern Sie es so, dass es ein Schaltflächenfeld enthält
Names Default To Here(1);
win = New Window("Example",
teb = Text Edit Box("Example Text"),
Button Box("Get Text")
);
Fügen Sie der Schaltfläche eine Funktion/einen Ausdruck hinzu
Names Default To Here(1);
win = New Window("Example",
teb = Text Edit Box("Example Text"),
Button Box("Get Text",
show(teb << get text)
);
);
Verschieben Sie die Funktion/den Ausdruck aus dem Schaltflächenfeld
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();
);
);
Lassen Sie die Funktion etwas zurückgeben
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);
);
);
und so weiter. Es ist sehr schwierig, das gesamte Skript auf einmal zum Laufen zu bringen. Arbeiten Sie daher nacheinander an viel kleineren Problemen
Betreff: Wie erstelle ich ein zweispaltiges modales Benutzereingabefenster, in dem die zweite Spalte basierend auf einer einzelnen Eingabe in der ersten Spalte ausgefüllt wird?@jthi Vielen Dank für Ihre Beiträge. Ich habe das Skript jetzt viel kleiner gemacht, was hoffentlich dazu beitragen wird, das Problem hervorzuheben, das ich habe.
In meinem Kommentar in Großbuchstaben unten (neben „returnedPid = pid << get text; show (returnedPid)“) brauche ich Hilfe.
Die Benutzereingabe für die Eltern-ID wird nicht an den Funktionsaufruf get_childids weitergeleitet.Ist mein <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>
Betreff: Wie erstelle ich ein zweispaltiges modales Benutzereingabefenster, in dem die zweite Spalte basierend auf einer einzelnen Eingabe in der ersten Spalte ausgefüllt wird?Es sollte sich im Schaltflächenfeld befinden und nicht irgendwo zwischen dem Textbearbeitungsfeld und dem Schaltflächenfeld.
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>Betreff: Wie erstelle ich ein zweispaltiges modales Benutzereingabefenster, in dem die zweite Spalte basierend auf einer einzelnen Eingabe in der ersten Spalte ausgefüllt wird?@jthi Danke, das hätte ich nie herausgefunden.
Das aktualisierte Skript unten übergibt jedoch den Wert von returnPid nicht als Argument an meine Funktion 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>Betreff: Wie erstelle ich ein zweispaltiges modales Benutzereingabefenster, in dem die zweite Spalte basierend auf einer einzelnen Eingabe in der ersten Spalte ausgefüllt wird?Sie sollten unbedingt den Scripting-Leitfaden durchlesen und sich den Scripting-Index ansehen, um zu verstehen, was vor sich geht.
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)
);
)
)
)
);