何にハマったか
Outsystemsの画面入力項目にバインドした変数が0になってしまう。
調べていくと、画面入力項目に小数を入力した場合にバインドした変数が0になることが分かった。
何をしてしまったか
入力とボタンを配置した簡単なプログラムを作成した。
入力を整数として変数に保持する。
Outsystemsでは入力項目(Input Widget)に対してInput Typeを設定することができる。
また、Variable項目に変数を指定し、入力や変更をその変数に反映することができる。
以下の例は、数値の入力項目(Input_Var_Integer)に数値(Number)を入力することができ、入力値をVar_Integer変数(Integer)に反映させるコードとなる。
Input Typeに設定できる値は以下の通り。
何が起きたか
上記のコードを実行し、値を設定してみる。
・未入力の場合は変数に0が反映(直感的にわからないでもない)
C#でfloatをintにキャストしたときのように、100が入るものかと先入観が働いていた。
float f = 100.123f;
int i = (int)f;
0になるという予想をしていなかったため、原因箇所はほかにあると思い込んでしまい、原因特定に時間がかかってしまった。
結論
Input Widgetにバインドされた変数を参照する前に、FormのValidationがクリアされていることを確認しましょう!
余談
Validationをクリアしていない入力項目の値はNullになるのかと予想した。
Email型で検証したところ、Validationをクリアできない値を入れた場合でもバインドされた変数に入力された値が格納されていた。