PowerBuilder: Come posso fare in modo che un campo di testo in DataWindow non è vuota?
-
29-09-2019 - |
Domanda
Ho un oggetto utente che sta utilizzando servizi di PFC. Ora, durante l'aggiornamento, come posso fare in modo che un campo di testo in DataWindow non è vuota?
Soluzione
PFC ha un servizio di Colonna DataWindow richiesto, che modifica il comportamento di attributo richiesto colonne di valutare a risparmiare tempo. Se il requisito comporta colonne editmask, questo non funzionerà, ma può essere un modo semplice per raggiungere questo obiettivo in altro modo.
Per usare questo, avevo messo il seguente codice nel costruttore ( di avvertimento: è stato un po 'che ho usato ):
of_SetReqColumn(TRUE)
inv_reqcolumn.of_RegisterSkipColumn ("col_a")
In bocca al lupo,
Terry.
Altri suggerimenti
cercherò di spiegare il metodo che uso per fare in modo che un utente non lascerà un campo specificato vuoto. Quanto segue è il codice che ho messo nel caso di pfc_updateprep u_dw (l'antenato). Poi, per ogni una delle colonne che voglio un valore da dare in ogni caso, ho messo un M
nella proprietà tag
del campo di testo che descrive la colonna. 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
Quello che ho fatto in PB è quello di impostare la seguente DataWindow proprietà delle colonne true o controllato:
- Stringa vuota è NULL
- Obbligatorio
In questo caso, il DataWindow dovrebbe convalidare automaticamente il campo per voi e per impedire all'utente di lasciare vuoto il campo.
[EDIT - Chiarimento dopo sempre un buon consiglio di Terry]
La prima parte del mio post dovrebbe funzionare per i campi di testo in fase di immissione dei dati e credo che costringerà l'utente a inserire un valore valido nel DW prima di consentire attenzione ai cambiamenti a meno che non si modifica che il comportamento, ad esempio, nel itemChanged evento.
Il servizio Colonna PFC richiesto può essere attivata e la colonna registrato con esso per fornire la convalida Salva-tempo. Questo lo rende meno ingombrante per un utente di muoversi attraverso i campi durante la navigazione i campi, e assilla solo l'utente quando si cerca di risparmiare.