Come creare una finestra modale di input utente a due colonne in cui la seconda colonna viene popolata in base al singolo input sulla prima colonna?Vorrei creare una finestra modale di input utente a due colonne in cui l'input dell'utente va nella prima colonna (casella di input singola) per un "ID parte padre", in base al quale vengono popolate le voci adiacenti della finestra della seconda colonna (ID parte figlio).
- Le voci nella seconda colonna provengono da una query sul database (per la quale ho già uno script). Un "ID parte genitore" può avere uno o più "ID parte figlio"
- Questo script di query deve essere eseguito quando viene selezionata una casella di controllo adiacente alla casella di input dell'ID della parte principale dopo l'input.
- Una volta selezionati uno o più ID di parte figlio (a seconda dei casi) nella seconda colonna (sempre utilizzando la casella di controllo), premere il pulsante OK nella parte inferiore della finestra modale per rendere disponibili le voci selezionate nella seconda colonna (come elenco) per uno script successivo da utilizzare.
- Un'opzione seleziona tutto per le voci nella seconda colonna sarebbe un ulteriore vantaggio.
Apprezzerei se potessi avere qualche idea su come procedere con questo in JSL?
Automazione e scriptingfinestreRi: Come creare una finestra modale di input utente a due colonne in cui la seconda colonna viene popolata in base al singolo input sulla prima colonna?Potresti creare una sorta di modello dell'interfaccia utente e fornire alcuni dati di esempio?
Ri: Come creare una finestra modale di input utente a due colonne in cui la seconda colonna viene popolata in base al singolo input sulla prima colonna?@jthi Si prega di vedere in allegato. L'utente inserisce ad esempio 9098 e seleziona la casella (spunta rossa, non è necessario che sia colorata di rosso) sotto ID parte principale. Selezionando questa casella viene eseguito uno script in background che genera una tabella di dati a colonna singola o un elenco (ho questo script, quindi posso fare entrambe le cose secondo necessità). I valori di riga di questa tabella a colonna singola o di valori di elenco popolano le righe sul lato destro della finestra di input dell'utente, sotto ID parte figlio. L'utente seleziona quindi gli ID delle parti della carta come desiderato utilizzando la casella di controllo (le opzioni "seleziona tutto" e "deseleziona tutto" sarebbero fantastiche).
Premendo Recupera, l'ID della parte madre e gli ID della parte figlio devono essere resi disponibili come due elenchi separati per l'utilizzo da parte di uno script successivo.
Spero di essere riuscito a spiegarmi abbastanza chiaramente.

Ri: Come creare una finestra modale di input utente a due colonne in cui la seconda colonna viene popolata in base al singolo input sulla prima colonna?OK. Alcuni suggerimenti per sostituire le caselle di controllo con i pulsanti. Per l'ID parte genitore potrebbe essere qualcosa come "Ottieni ID parte figlio" e per i pulsanti ID parte figlio "Seleziona tutto" e "Deseleziona tutto". L'utente può effettuare le proprie selezioni nella casella di riepilogo.
Questo potrebbe darti qualche idea su cosa potresti fare
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")
)
)
)
);Ri: Come creare una finestra modale di input utente a due colonne in cui la seconda colonna viene popolata in base al singolo input sulla prima colonna?@jthi Grazie. Questo dovrebbe fare il lavoro. I pulsanti al posto della casella di controllo vanno bene. Ho modificato il tuo script in una funzione, ma faccio fatica a posizionare correttamente get selezionato () per ottenere i valori selezionati come elenco (ad esempio la mia istruzione Return commentata nella parte inferiore della funzione) quando l'utente fa clic su OK. Per favore, potrei ottenere alcune indicazioni su dove posizionare correttamente get selezionato ()?
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);Ri: Come creare una finestra modale di input utente a due colonne in cui la seconda colonna viene popolata in base al singolo input sulla prima colonna?Inseriscilo nel pulsante OK in modo che venga eseguito quando l'utente preme quel pulsante.
Ri: Come creare una finestra modale di input utente a due colonne in cui la seconda colonna viene popolata in base al singolo input sulla prima colonna?@jthi Grazie. Mi sono appena reso conto che una parte fondamentale che manca nella funzione di cui sopra è che uno script (che ho) deve essere eseguito (in background) quando l'utente fa clic su "Ottieni ID figlio" che genererà gli ID figlio in base all'ID genitore inserito. Questi ID bambino vengono visualizzati nel secondo pannello. L'utente sceglie quindi uno o più ID bambino.
Nell'esempio discusso qui, gli ID genitore e gli ID figlio sono già disponibili, il che non è come sarebbe nel caso reale.
Come ottenere l'esecuzione di uno script quando l'utente fa clic su "Ottieni ID bambino", il cui output popola gli ID bambino?
Ri: Come creare una finestra modale di input utente a due colonne in cui la seconda colonna viene popolata in base al singolo input sulla prima colonna?Ti ho fornito un'idea su come gestirlo con get_childids, sostituiscilo con la tua funzione che ottiene i dati e quindi imposta i valori (aa_parents sta semplicemente "simulando" il database in questo caso).
Ri: Come creare una finestra modale di input utente a due colonne in cui la seconda colonna viene popolata in base al singolo input sulla prima colonna?@jthi Sì grazie. Ho bisogno di aiuto su come eseguire uno script (in realtà una funzione con ID genitore come input) quando il file Si fa clic sul pulsante Ottieni ID bambino.
Ri: Come creare una finestra modale di input utente a due colonne in cui la seconda colonna viene popolata in base al singolo input sulla prima colonna?L'esempio c'è già. C'è qualcosa che non puoi convertire per funzionare con il tuo script? Questo forse, il che può creare confusione anche se è solo un nome per argomento/parametro che si riferisce all'elemento che chiama la funzione?
Ri: Come creare una finestra modale di input utente a due colonne in cui la seconda colonna viene popolata in base al singolo input sulla prima colonna?@jthi Le mie competenze in JMP non sono ancora buone (finora sono stato un utente Matlab), quindi ho ancora difficoltà con il modo di pensare di JMP. Sto provando questo lato ma finora senza successo. Mai usato Questo Prima.
Quello che stavo provando era usare Get Selected Indices (), qualcosa che ho usato prima, per catturare il clic dell'utente Ottieni ID bambino, in base al quale attivare la chiamata alla funzione e ottenere gli ID figlio. Ancora una volta nessun successo finora.
Ri: Come creare una finestra modale di input utente a due colonne in cui la seconda colonna viene popolata in base al singolo input sulla prima colonna?@jthi . Mi sembra di aver fatto dei progressi, ma ho ancora bisogno di aiuto.
Sono tornato allo script (al posto della funzione nel post 5 in questo thread).
Di seguito è riportato uno script parzialmente funzionante. Ho difficoltà a inserire l'ID genitore (ad esempio "715" di seguito) dall'ID genitore inserito dagli utenti nella mia funzione fetchChildIds. Hai bisogno di aiuto qui.
Fondamentalmente devo inserire l'input nella casella di modifica del testo nell'argomento della mia funzione per sostituire "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")
)
)
)
);
Ri: Come creare una finestra modale di input utente a due colonne in cui la seconda colonna viene popolata in base al singolo input sulla prima colonna?@jthi
Perché questo non mostra l'ID genitore inserito dall'utente. Si procede con 715. Un valore aggiornato non viene preso/utilizzato. Sto inserendo nel posto sbagliato, ad esempio sotto la casella di modifica del testo?
pid = Text Edit Box("715", << Set Width(150)),
ParentID = nw["pid" ]; show (ParentID);il ParentID aggiornato dall'utente è disponibile al di fuori della Nuova finestra (), ma penso di averne bisogno quando si preme la casella dei pulsanti.
Button Box("Get Child ID(s)", << set function(function({this},
get_childids(this); Ri: Come creare una finestra modale di input utente a due colonne in cui la seconda colonna viene popolata in base al singolo input sulla prima colonna?È necessario utilizzare << Ottieni testo per ottenere il valore dalla casella di modifica del testo
Ri: Come creare una finestra modale di input utente a due colonne in cui la seconda colonna viene popolata in base al singolo input sulla prima colonna?@jthi sì, ho provato << Ottieni testo. Posso ottenere il valore fuori dalla nuova finestra()
Penso che il mio problema sia il corretto posizionamento di Get Text.
Non riesco a ottenere che l'ID genitore dall'input dell'utente venga trasmesso correttamente quando viene posizionato il pulsante "Ottieni ID figlio".
Premendo "Ottieni ID bambino" dovrebbe essere eseguita la funzione di recupero dell'ID bambino con l'ID genitore dall'input dell'utente.
Apprezzerei un po' di aiuto qui.
Ri: Come creare una finestra modale di input utente a due colonne in cui la seconda colonna viene popolata in base al singolo input sulla prima colonna?Stai utilizzando il valore di input hardcoded "715" e non l'input dell'utente
Ri: Come creare una finestra modale di input utente a due colonne in cui la seconda colonna viene popolata in base al singolo input sulla prima colonna?@jthi
>> Stai utilizzando il valore di input hardcoded "715" e non l'input dell'utente
Questo era solo per mostrare quello che sto facendo. Voglio sostituire "715" con l'input dell'utente.
L'ID genitore deve essere passato all'argomento della funzione quando viene premuto il pulsante Ottieni ID figlio.
fetchChildIds ()
Il caso hardcoded funziona come previsto, ma non riesco a inserire l'input dell'utente come argomento per la funzione sopra menzionata.
Ri: Come creare una finestra modale di input utente a due colonne in cui la seconda colonna viene popolata in base al singolo input sulla prima colonna?Lo script non ha indicazioni sul tuo utilizzo, ad esempio
pid << get text
il mio metodo di utilizzo di questo per viaggiare nelle scatole di visualizzazione è più complicato (ma a volte potrebbe essere più robusto), il solo utilizzo del riferimento dovrebbe essere sufficiente.
Inizia anche con uno script molto semplice e fallo funzionare prima. Inizia con l'esempio dell'indice di scripting:
Names Default To Here(1);
win = New Window("Example", fontobj = text = Text Edit Box("Example Text"));
Print(text << Get Text());
modificarlo per avere una casella di pulsanti
Names Default To Here(1);
win = New Window("Example",
teb = Text Edit Box("Example Text"),
Button Box("Get Text")
);
aggiungere funzione/espressione al pulsante
Names Default To Here(1);
win = New Window("Example",
teb = Text Edit Box("Example Text"),
Button Box("Get Text",
show(teb << get text)
);
);
spostare la funzione/espressione fuori dalla casella dei pulsanti
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();
);
);
fare in modo che la funzione restituisca qualcosa
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);
);
);
e così via. È molto difficile provare a far funzionare l'intero script in una volta sola, quindi lavora su problemi molto più piccoli uno alla volta
Ri: Come creare una finestra modale di input utente a due colonne in cui la seconda colonna viene popolata in base al singolo input sulla prima colonna?@jthi Molte grazie per i tuoi input. Ora ho ridotto la sceneggiatura molto più piccola, il che spero possa aiutare a evidenziare il problema che sto riscontrando.
Il mio commento in maiuscolo di seguito (adiacente a returnPid = pid << get text; show (returnedPid)) è dove ho bisogno di aiuto.
L'input dell'utente sull'ID genitore non viene passato alla chiamata della funzione get_childids.Il mio testo <
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>
Ri: Come creare una finestra modale di input utente a due colonne in cui la seconda colonna viene popolata in base al singolo input sulla prima colonna?Dovrebbe trovarsi all'interno della casella dei pulsanti, non da qualche parte tra la casella di modifica del testo e la casella dei pulsanti.
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>Ri: Come creare una finestra modale di input utente a due colonne in cui la seconda colonna viene popolata in base al singolo input sulla prima colonna?@jthi Grazie, non l'avrei mai capito.
Tuttavia, lo script aggiornato di seguito non passa il valore di returnPid come argomento alla mia funzione 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>Ri: Come creare una finestra modale di input utente a due colonne in cui la seconda colonna viene popolata in base al singolo input sulla prima colonna?Dovresti davvero leggere la guida agli script e controllare l'indice degli script per capire cosa sta succedendo.
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)
);
)
)
)
);