Windows

42. 数字の扱いはIBMとWindowsでこんなにちがう

IBM iの表示装置ファイル(DSPF)で入力用の数字フィールド
定義することを考えてみよう。

DSPF で数字フィールドを定義するとそのフィールドに表示されたり
入力可能な文字は純粋に 0-9 までの数字だろうか?
そんなことはない。
数字フィールドと定義しても

0, 1, 2, … 9 および . (小数点), , (カンマ), – (符号)

と、つまり純粋な0-9の数字以外に

小数点、カンマ、マイナス符号

と数字ではない記号も表示されるし入力も可能である。
ところがWindowsで数字の入力フィールドを定義すると
その欄には 0-9の純粋な数字しか入力することができなくなってしまう。
確かに数字と言えば 1-9でありそれ以外の入力を禁止するのが
正しいのかも知れない。
しかし小数点やマイナス符号の入力ができない業務が
正常に運営できるとMicrosoftは考えているのだろうか?

ビジネスではこんなことはありえないので文字フィールドとして
定義して小数点やカンマ、マイナス符号の入力だけは認めるようにして
その他の文字を許さないように毎度毎度このような入力を
開発者自身が作らなくてはならない。
Microsoft は VC++などで莫大な数の汎用的なClassを提供しているが
このようなビジネスの数値入力をサポートしているClassはただのひとつもない。

これは何故だろうか?
Microsoftの開発者チームにビジネスの設計開発をした経験者が
一人もいないのではないかと思えてしまう。
ブラウザも同様である。
従ってAutoWebでは自動的に数値の入力を制御している。

IBMであれば数字フィールドにはカンマも小数点も符号も入力することが
できる。これは5250エミュレータが制御してくれているだが
昔、IBM の輸入製品でWebフェーシングのある製品では数字フィールドにも
すべての文字が入力されてしまう製品があった。
これはTELNET をWebフェーシングにした製品なのでTELNETでは
入力可能のフィールドであることはわかって文字フィールドなのか
数字フィールドなのか識別がつかないのである。
従ってSEがお客さまのところへ行って半日かけて元のDDSソース
見比べて格闘しながら数字フィールドを探して変更を加えていくという
恐ろしい製品があった。
AutoWeb5250ストリームを直接読んでいるのでフィールドの属性も
把握しており数字フィールドには文字は入力できないように
JavaScriptで制御されている。
そのため5250エミュレータと何ら変わることなく安全に利用されている。
これが普通である。

先の恐ろしい製品は国内でも一時流通していたようであるが
最近は全く話を聞かなくなってしまった。