Handling Errors on Interdependent Fields
This document provides information on how to handle errors on two or more interdependent fields (for example, a start and end date range).
When you click a particular field, the Supervisor cleans up errors assigned to it. For example, for the Start date field, the following code makes sure that the value of Start date is not greater than the value of End date (if End date is not blank):
$PROPERTIES Case CURPRO When “STARTDATE” : Gosub STARTDATE Endcase Return $STARTDATE Case ACTION When “PROPAGATE” Gosub VALIDATE_STARTDATE Endcase Return $VALIDATE_STARTDATE If this.ENDDATE <> AVOID.ADATE & this.STARTDATE > this.ENDDATE ASTATUS = fmet this.ASETERROR(“STARTDATE”, “Start date cannot be after End date”, [V]CST_AERROR) Endif Return
If an invalid start date is entered, error “Start date cannot be after End date” is displayed, attached to the Start date field. If a valid start date is then entered, the error is cleared by the Supervisor.
Note: If you implement validation on the start date’s PROPAGATE event, the validation will not be executed again when clicking Save.
A similar validation can be applied to the End date field:
$PROPERTIES Case CURPRO When “STARTDATE” : Gosub STARTDATE When “ENDDATE” : Gosub ENDDATE Endcase Return $STARTDATE Case ACTION When “PROPAGATE” Gosub VALIDATE_STARTDATE Endcase Return $ENDDATE Case ACTION When “PROPAGATE” Gosub VALIDATE_ENDDATE Endcase Return $VALIDATE_STARTDATE If this.ENDDATE <> AVOID.ADATE & this.STARTDATE > this.ENDDATE` ASTATUS = fmet this.ASETERROR(“STARTDATE”, “Start date cannot be after End date”, [V]CST_AERROR) Endif Return $VALIDATE_ENDDATE If this.ENDDATE <> AVOID.ADATE & this.ENDDATE < this.STARTDATE ASTATUS = fmet this.ASETERROR(“ENDDATE”, “End date cannot be before Start date”, [V]CST_AERROR) Endif Return
If an invalid end date is entered, error “End date cannot be before Start date” is displayed, attached to the End date field. If a valid End date is then entered, the error is cleared by the Supervisor.
However, if you try to correct the date range error by adjusting the start date, the previous error (assigned to End date) is not cleared by the Supervisor, even though the date range is now valid, and no new error is displayed. This is due to the fact that the Start date field is now selected.
To clear the previous error in this scenario, method "ADELETEERROR" must be manually called to clear any errors on the alternate field:
$VALIDATE_DATES If CURPRO = “STARTDATE” ASTATUS = fmet this.ADELETEERROR(“ENDDATE”) Else ASTATUS = fmet this.ADELETEERROR(“STARTDATE”) Endif If this.ENDDATE <> AVOID.ADATE & this.STARTDATE > this.ENDDATE If CURPRO = “STARTDATE” ASTATUS = fmet this.ASETERROR(“STARTDATE”, “Start date cannot be after End date”, [V]CST_AERROR) Else ASTATUS = fmet this.ASETERROR(“ENDDATE”, “End date cannot be before Start date”, [V]CST_AERROR) Endif Endif Return $VALIDATE_STARTDATE ASTATUS = fmet this.ADELETEERROR(“ENDDATE”) If this.ENDDATE <> AVOID.ADATE & this.STARTDATE > this.ENDDATE ASTATUS = fmet this.ASETERROR(“STARTDATE”, “Start date cannot be after End date”, [V]CST_AERROR) Endif Return $VALIDATE_ENDDATE ASTATUS = fmet this.ADELETEERROR(“STARTDATE”) If this.ENDDATE <> AVOID.ADATE & this.ENDDATE < this.STARTDATE ASTATUS = fmet this.ASETERROR(“ENDDATE”, “End date cannot be before Start date”, [V]CST_AERROR) Endif Return
Note: Hard-coded message strings should be replaced with mess( )
calls.