*------------------------------------------------------ Define CLASS UserValidator AS IValidator OLEPUBLIC *------------------------------------------------------ Name = "UserValidator" Function vldUsrname(tcValue, tlPreStatus, roMessage) Local llRetVal llRetVal=.T. *-- NOTE: You will need to fill in this method *-- if you want validation on field USRNAME of table USER * * It must be a Present IF llRetVal AND (ISNULL(tcValue) OR EMPTY(tcValue)) llRetVal = .F. IF VARTYPE(roMessage) = "O" roMessage.AddMessage("UserEmptyUsrName", THIS.NAME ) ENDIF ENDIF * It must be character IF llRetVal AND (VARTYPE(tcValue) # 'C') llRetVal = .F. IF VARTYPE(roMessage) = "O" roMessage.AddMessage("UserNonCharacterUsrName", THIS.NAME ) ENDIF ENDIF * It must be no more than 18 characters THIS.DebugLog( "Value:"+ ALLTRIM(tcValue) +":") IF llRetVal AND (LEN(ALLTRIM(tcValue)) > 18) llRetVal = .F. IF VARTYPE(roMessage) = "O" roMessage.AddMessage("UserTooLongUsrName", THIS.NAME ) ENDIF ENDIF Return llRetVal EndFunc EnddefineThis does not work as validation fails over and over during testing.
*------------------------------------------ DEFINE CLASS aValidator AS iValidator *------------------------------------------ cMessagingType = "XML" ENDDEFINE *------------------------------------------------------ DEFINE CLASS AttorneyValidator AS aValidator OLEPUBLIC *------------------------------------------------------ Name = "AttorneyValidator" *------------------------------------------ FUNCTION vldLastName( tcValue, tlPreStatus, roMessage) *------------------------------------------ LOCAL llRetVal llRetVal = .NOT. EMPTY( tcValue ) If NOT llRetVal if vartype(roMessage) = "O" roMessage.AddMessage("AttorneyEmptyLastName", THIS.Name ) Endif Endif RETURN llRetVal ENDFUNC ENDDEFINEThe sample Attorney application works in its validation and If I modify the Wizard generated code to look like the Attorney App aValidators.prg then it will work also. So now I will get on my soap box.