Estoy tratando de validar las entradas del usuario y evitar que pasen la IU de entrada si no ingresan los campos obligatorios. Hasta ahora parece que el cuadro de botones no ejecuta realmente el script en secuencia, o parece que no almacena las variables hasta que el script completo haya finalizado. ¿Cómo puedo evitar esto?
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() ),
),
);Además, vea el mensaje en línea << En Validar (expresión) a Nueva ventana () para este propósito.
No creo que esté evaluando nada fuera de secuencia. El problema es que está intentando modificar ese objeto filterColSelector en una línea separada por una coma. La coma está destinada a separar diferentes objetos de visualización que están anidados dentro de ese cuadro de lista vertical. Intercambia ese fragmento de código con este y deberías ser bueno:
vListBox(
choosesrc=filterColSelector( nLines( 6 ), << numeric( 0 ))
)
* Además, no estoy seguro de si planeas añadir algo más a ese vListBox, pero como solo contiene 1 caja de visualización, probablemente puedas deshacerte de él.