Ich versuche, Benutzereingaben zu validieren und zu verhindern, dass sie die Eingabe-Benutzeroberfläche passieren, wenn sie keine erforderlichen Felder eingeben. Bisher sieht es so aus, als würde das Schaltflächenfeld das Skript nicht in der richtigen Reihenfolge ausführen, oder es scheint die Variablen nicht zu speichern, bis das gesamte Skript fertig ist. Wie kann ich das umgehen?
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() ),
),
);Siehe dazu auch die Inline-Meldung << On Validate (Ausdruck) to New Window ().
Ich denke nicht, dass es etwas außerhalb der Reihenfolge bewertet. Das Problem ist, dass Sie versuchen, dieses filterColSelector-Objekt in einer durch Komma getrennten Zeile zu ändern. Das Komma soll verschiedene Anzeigeobjekte trennen, die in diesem vertikalen Listenfeld verschachtelt sind. Tauschen Sie das Code-Snippet mit diesem aus, und Sie sollten gut sein:
vListBox(
choosesrc=filterColSelector( nLines( 6 ), << numeric( 0 ))
)
* Ich bin mir auch nicht sicher, ob Sie an diese vListBox etwas anderes anhängen möchten, aber da sie nur 1 Anzeigefeld enthält, können Sie es wahrscheinlich entfernen.