J'essaie de valider les entrées utilisateur et de les empêcher de transmettre l'interface utilisateur d'entrée s'ils ne saisissent pas les champs obligatoires. Jusqu'à présent, il semble que la boîte à boutons n'exécute pas le script en séquence, ou ne semble pas stocker les variables jusqu'à la fin du script. Comment puis-je contourner cela?
clearLog();
clearGlobals();
clearSymbols();
dt = currentDataTable();
inputGUI = newWindow( "Input Selection UI", << modal,
//Step Name input box
hListBox(
textBox("1. Enter some text input"),
stepTextEdit = textEditBox(),
),
//Column Section input box
hListBox(
vListBox(
choosesrc=filterColSelector( nLines( 6 ) ),
chooseSRC << numeric( 0 ),
),
vListBox(
lineUpBox( nCol( 1 ), spacing( 2 ),
buttonBox( "Add Column >>",
listcols2 << Append( chooseSRC << getSelected );
),
buttonBox( "<< Remove Column",
listcols2 << removeSelected;
),
),
),
vListBox(
listcols2 = colListBox( nLines( 3 ), minItems(1), maxItems(1) ), //col list box with no columns inside
);
),
//Footer Section and OK/Cancel Buttons
hListBox(
buttonBox("OK",
//Collect all variables from input boxes
uinp_stepName = stepTextEdit << getText;
uinp_colssrc=listcols2 << getItems;
// Input Validation Logic
if ( IsMissing(uinp_stepName) == 1,
(nw_error_uinp_stepName = New Window("Error ", << Modal,
VList Box(
Text Box("Text input is missing"),
HList Box(
Button Box ( "OK" ),
),
);
);
break(); // Only send 1 error at a time
)
);
if ( nItems(uinp_colsSRC) == 0,
(nw_error_uinp_colssrc=New Window("Error ", << Modal,
VList Box(
Spacer Box( Size (5, 5) ),
Text Box("Column input is missing"),
Spacer Box( Size (15, 15) ),
HList Box(
Button Box ( "OK" ),
),
);
);
break(); // Only send 1 error at a time
)
);
),
buttonBox("Cancel", Print("User cancelled operation!"); Stop() ),
),
);Voir également le message en ligne << On Valider (expression) dans Nouvelle fenêtre () à cette fin.
Je ne pense pas que cela évalue quoi que ce soit hors séquence. Le problème est que vous essayez de modifier cet objet filterColSelector sur une ligne séparée par une virgule. La virgule est destinée à séparer différents objets d'affichage imbriqués dans cette zone de liste verticale. Échangez cet extrait de code avec celui-ci et vous devriez être bon:
vListBox(
choosesrc=filterColSelector( nLines( 6 ), << numeric( 0 ))
)
* De plus, je ne sais pas si vous envisagez d'ajouter autre chose à cette vListBox, mais comme elle ne contient qu'une zone d'affichage, vous pouvez probablement vous en débarrasser.