Page History
The source for the PHONE_FORMAT conversion is found in the SYSPROCS table, in the SYSPROG account. In addition to illustrating customized input and output conversions the code shows how to create a customized error message if the conversion fails. See the DisplayError internal subroutine, which sets Status() = 3 and uses the msg() function to display a customized error message.. The source is below:
Code Block |
---|
compile SUBROUTINE PHONE_FORMAT( charstr CONV, charstr ANS, charstr BRANCH, charstr RETURN_DATA)
*
* PHONE_FORMAT is an example of a developer's custom prompt formatting
* routine using the square brackets call.
*
* It should be placed in square brackets, like this:
*
* [PHONE_FORMAT]
*
* This subroutine should be used as the first and only "Validation Pattern" in
* an OpenInsight control. Placed in "Conversion Pattern", it properly formats any
* reasonable string of numbers into a consistent US telephone number format.
*
* mtr 5-29-01 Changed @upper.case to @lower.case conversion
* mtr 3-18-02 Added '.' as a valid delimiter.
!
begin condition
pre:
post:
end condition
* Subroutine declarations
$insert msg_equates
declare function msg
* Local Equates
* The STATUS() variable is used to indicate the error condition of the
* pattern. They are:
EQU VALID$ TO 0 ;* Successful
EQU INVALID_MSG$ TO 1 ;* Bad Data - Print error message window
EQU INVALID_CONV$ TO 2 ;* Bad Conversion - " "
EQU INVALID_NOMSG$ TO 3 ;* Bad but do not print the error message window
EQU THREEDGRAY$ TO 192
* Begin Conversion
*
RETURN_DATA = ""
IF ANS NE "" THEN
TEL = ANS
ANS = ""
STATUS() = VALID$
*DFLT_AREA_CODE = ""
* PHONE_FORMAT can support a default area code. To assign a default
* simply set the variable DFLT_AREA_CODE. In this example it is set to
* null.
*CONVERT " -()" TO "" IN DFLT_AREA_CODE
*IF NUM( DFLT_AREA_CODE ) ELSE DFLT_AREA_CODE = ""
CONVERT " -()." TO "" IN TEL
* mtr
CONVERT @LOWER.CASE TO @UPPER.CASE IN TEL
CONVERT "ABCDEFGHIJKLMNOPQRSTUVWXYZ" TO "2223334445556667Q77888999Z" IN TEL
IF NUM( TEL ) THEN
LENGTH = LEN( TEL )
* Case statement to validate all possible types of phone numbers. If
* a new format is required simply add another case.
* The fall-through (CASE 1) traps invalid conversions.
BEGIN CASE
CASE LENGTH = 10
IF CONV EQ "OCONV" THEN
RETURN_DATA = FMT( TEL, "L(###) ###-####")
END ELSE
RETURN_DATA = TEL
END
CASE LENGTH EQ 7
IF CONV EQ "OCONV" THEN
RETURN_DATA = FMT( TEL, "L###-####")
END ELSE
RETURN_DATA = TEL
END
CASE 1
IF CONV = "ICONV" THEN
gosub DisplayError
END
STATUS() = INVALID_NOMSG$
END CASE
END ELSE
IF CONV = "ICONV" THEN
gosub DisplayError
END
STATUS() = INVALID_NOMSG$
END
END
RETURN
*
DisplayError:
msgrec = ""
msgrec<MCAPTION$> = "Data Validation Error"
msgrec<MTEXT$> = TEL : " is not a valid phone number. Please enter a seven or ten digit number in any format."
msgrec<MBKCOLOR$> = THREEDGRAY$:@VM:THREEDGRAY$:@VM:THREEDGRAY$
msgrec<MJUST$> = 'L'
result = msg( "", msgrec)
return
|