pfc サービスを使用しているユーザー オブジェクトがあります。更新中に、データウィンドウのテキスト フィールドが空でないことを確認するにはどうすればよいですか?
3 に答える
PFC には DataWindow Required Column サービスがあり、列の Required 属性の動作を保存時に評価するように変更します。要件に editmask 列が含まれる場合、これは機能しませんが、それ以外の場合はこれを達成する簡単な方法になる可能性があります。
これを使用するには、コンストラクターに次のコードを追加します (警告: 使用してからしばらく経ちます)。
of_SetReqColumn(TRUE)
inv_reqcolumn.of_RegisterSkipColumn ("col_a")
幸運を、
テリー。
私が PB で行ったことは、次の datawindow 列のプロパティを TRUE に設定するか、オンにすることです。
- 空の文字列は NULL です
- 必須
これを行うと、データウィンドウは自動的にフィールドを検証し、ユーザーがフィールドを空白のままにしないようにする必要があります。
[編集 - テリーの常に良いアドバイス後の明確化]
私の投稿の最初の部分は、データ入力時にテキスト フィールドに対して機能するはずです。たとえば、itemchanged イベントでその動作を変更しない限り、フォーカスを変更できるようにする前に、ユーザーが dw に有効な値を入力することを強制すると思います。
PFC 必須列サービスをオンにして列を登録し、時間を節約するための検証を行うことができます。これにより、ユーザーがフィールドをナビゲートしながらフィールド間を移動するのが煩わしくなくなり、ユーザーが保存しようとするときだけ煩わしくなります。
ユーザーが指定されたフィールドを空のままにしないようにするために使用する方法を説明しようとします。以下は、u_dw (祖先) の pfc_updateprep イベントに挿入したコードです。次に、どのような場合でも値を指定したい列ごとに、列を説明するtextfieldM
のtag
プロパティに を入れます。HTH。
integer li_size,i,l,li_zero
string ls_textname,ls_tag,ls_objects[]
string ls_col,ls_type,ls_text,ls_key,ls_any
any la_null,la_any
dec ld_zero
real lr_zero
long ll_zero
boolean lb_zero
dwItemStatus l_status,l_key_status
This.Modify("DataWindow.Table.UpdateKeyinPlace=Yes")
li_size = This.inv_base.of_Getobjects(ls_objects[ ],"column","*",TRUE)
FOR l=1 TO This.Rowcount()
l_status=This.GetItemStatus(l, 0,Primary!)
IF l_status=NewModified! OR l_status=Datamodified! THEN
FOR i = 1 to li_size
ls_col=ls_objects[i]
ls_key = Upper(This.Describe(ls_col+".Key"))
ls_type=This.Describe ( ls_col + ".ColType")
ls_textname=ls_col+"_t" // because the textnames that I use are the same as the column names followed by a "_t"
ls_tag=This.Describe(ls_textname+".Tag")
ls_text=This.Describe(ls_textname+".Text")
IF ls_tag='M' THEN
lb_zero = FALSE
IF This.Rowcount()>0 THEN
la_null=This.inv_base.of_GetItemany(l,ls_col)
choose case Upper(MidA(ls_type,1,3))
case 'DEC'
ld_zero=Dec(la_null)
IF ld_zero = 0 THEN lb_zero=TRUE
case 'INT'
li_zero=Integer(la_null)
IF li_zero = 0 THEN lb_zero=TRUE
case 'REA'
lr_zero=Real(la_null)
IF lr_zero = 0 THEN lb_zero=TRUE
case 'LON'
ll_zero=Long(la_null)
IF ll_zero = 0 THEN lb_zero=TRUE
end choose
IF Isnull(la_null) OR lb_zero THEN
Messagebox(gnv_app.of_Getframe().Getactivesheet().Title,&
"You must provide a value for the following field ~r("+&
ls_text+") !!!")
Return FAILURE
END IF
END IF
END IF
NEXT
END IF
NEXT
Return SUCCESS