User Guide

Table Of Contents
Handling errors in UDFs 189
Reviewing the code
The following table describes the code that has been changed or added to the previous version of
this example. For a description of the initial code, see A user-defined function example
on page 192.
Calling the function
The code that calls the function now looks like the following. Code that is changed from the
example in A user-defined function example” on page 192 is in bold.
<cfset status = StructNew()>
<cfset myInterest = TotalInterest(Form.Principal,
Form.AnnualPercent,Form.Months, status)>
<cfif myInterest EQ -1>
<cfoutput>
ERROR: #status.errorMsg#<br>
</cfoutput>
<cfelse>
<cfoutput>
Loan amount: #Form.Principal#<br>
Annual percentage rate:
#Form.AnnualPercent#<br>
Loan duration: #Form.Months# months<br>
TOTAL INTEREST: #myInterest#<br>
</cfoutput>
</cfif>
Reviewing the code
The following table describes the code that has been changed or added:
Code Description
function
TotalInterest(principal,
annualPercent, months,
status)
The function now takes an additional argument, a status
structure. Uses a structure for the status variable so that
changes that the function makes affect the status structure in
the caller.
if ((principal LE 0) OR
(annualPercent LE 0) OR
(months LE 0)) {
Status.errorMsg = "All values
must be greater than 0";
Return -1;
}
Checks to make sure the principal, percent rate, and duration
are all greater than zero.
If any is not, sets the errorMsg key (the only key) in the Status
structure to a descriptive string. Also, returns -1 to the caller
and exits the function without processing further.
Code Description
<cfset status = StructNew()>
Creates a structure to hold the function status.
<cfset myInterest = TotalInterest
(Form.Principal, Form.AnnualPercent,
Form.Months, status)>
Calls the function. This time, the function requires
four arguments, including the status variable.