DesignBais Tip – Formatting Date/Time Fields
VALIDATION:
* Use this code to validate user changes to work fields
BEGIN CASE
CASE EVENTSOURCE = "WORK03"
* User changed start time
IF DBVALUE # "" THEN
GOSUB VALIDATE.DATE.TIME
IF IVALUE # "" THEN
DBRECORD<E.START.TIME> = IVALUE
DBPASS.DBVALUE = OVALUE
DBPASS.DBVALUE.TO = "WORK03"
END ELSE
IERR.TEXT = "Invalid Time format"
END
END ELSE
DBRECORD<E.START.TIME> = ""
END
CASE EVENTSOURCE = "WORK04"
* User changed end time
IF DBVALUE # "" THEN
GOSUB VALIDATE.DATE.TIME
IF IVALUE # "" THEN
DBRECORD<E.END.TIME> = IVALUE
DBPASS.DBVALUE = OVALUE
DBPASS.DBVALUE.TO = "WORK04"
END ELSE
IERR.TEXT = "Invalid Time format"
END
END ELSE
DBRECORD<E.END.TIME> = ""
END
CASE 1
NULL
END CASE
RETURN
VALIDATE.DATE.TIME:
* Specific code to see if user entered a valid date or time
* May require some enhancement, works OK as-is
USER.VALUE = DBVALUE
IVALUE = "" ; * returning with a null IVALUE means bad data
OVALUE = ""
IMASK = ""
IF PROCESS.PARAMETER[1,2] = "MT" THEN IMASK = "MT"
IF PROCESS.PARAMETER[1,1] = "D" THEN IMASK = "D"
IF IMASK = "" THEN RETURN
IVALUE = ICONV(USER.VALUE,IMASK)
IF IMASK = "MT" THEN
GOSUB VALIDATE.TIME
IF IVALUE = "" THEN RETURN
END
IF IMASK = "D" THEN
GOSUB VALIDATE.DATE
IF IVALUE = "" THEN RETURN
END
OVALUE = OCONV(IVALUE,PROCESS.PARAMETER)
IF OVALUE # "" THEN
* User seemed to enter a valid value per the mask
* Return IVALUE for DBRECORD data and OVALUE for display
RETURN
END
IVALUE = ""
OVALUE = ""
RETURN
VALIDATE.DATE:
* Add your own code here to decide if the date is valid
* IF IVALUE < EARLIEST~~DATE OR IVALUE > LATEST~~DATE THEN
* IVALUE = ""
* RETURN
* END
RETURN
VALIDATE.TIME:
* Basic checks to parse and check various time entry formats
* Add more to suit your application
IF NUM(USER.VALUE) THEN
IF LEN(USER.VALUE) = 1 OR LEN(USER.VALUE) = 2 THEN
USER.VALUE = USER.VALUE * 100
END
MINUTES = USER.VALUE ‘R%2’
IF MINUTES > 59 THEN USER.VALUE = -1
IF USER.VALUE < 0 OR USER.VALUE > 2359 THEN
IVALUE = ""
RETURN
END
NEW.VALUE = ""
IF LEN(USER.VALUE) = 3 THEN
NEW.VALUE = (USER.VALUE[1,1]) : (USER.VALUE[2,2])
END
IF LEN(USER.VALUE) = 4 THEN
NEW.VALUE = (USER.VALUE[1,2]) : (USER.VALUE[3,2])
END
IVALUE = ICONV(NEW.VALUE,’MT’)
END
IF IVALUE < 0 OR IVALUE > 86399 THEN
IVALUE = ""
RETURN
END
RETURN
Please let me know how this works for you!