2010-06-24 3 views

Répondre

3

PFC dispose d'un service DataWindow Column Required, qui modifie le comportement de l'attribut Required des colonnes à évaluer lors de la sauvegarde. Si votre exigence implique des colonnes editmask, cela ne fonctionnera pas, mais peut être un moyen facile d'y parvenir autrement.

Pour l'utiliser, je mettrais le code suivant dans le constructeur (avertissement: il a été un moment que je l'ai utilisé):

of_SetReqColumn(TRUE) 
inv_reqcolumn.of_RegisterSkipColumn ("col_a") 

Bonne chance,

Terry .

2

Je vais essayer d'expliquer la méthode que j'utilise afin de m'assurer qu'un utilisateur ne laissera pas un champ spécifié vide. Ce qui suit est le code que j'ai mis dans l'événement pfc_updateprep de u_dw (l'ancêtre). Ensuite, pour chacune des colonnes que je veux donner une valeur dans tous les cas, je mets un M dans la propriété tagdu champ de texte qui décrit la colonne. 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 
2

Ce que je l'ai fait dans PB est de définir les propriétés de la colonne DataWindow suivantes à TRUE ou vérifié:

  • Chaîne vide est NULL
  • requis

Si vous faites Ainsi, la fenêtre de données doit automatiquement valider le champ pour vous et empêcher l'utilisateur de laisser le champ vide.

[EDIT - clarification après toujours de bons conseils de Terry]

La première partie de mon poste devrait travailler pour les champs de texte au moment de la saisie des données et je crois forcera l'utilisateur d'entrer une valeur valide dans l'entrepôt de données avant d'autoriser Vous pouvez modifier le focus à moins de modifier ce comportement, par exemple, dans l'événement itemchanged.

Le service PFC Required Column peut être activé et la colonne enregistrée avec pour assurer la validation de la sauvegarde. Cela rend moins fastidieux pour un utilisateur de se déplacer dans les champs tout en naviguant dans les champs, et ne pèse que sur l'utilisateur lorsqu'il tente d'enregistrer.

Questions connexes