Phone directory lookup CFC

The following CFC implements a simple employee phone directory lookup application. The user sends an instant message containing some part of the name to be looked up (a space requests all names). The onIncomingMessage response depends on the number matches.

The following listing shows the CFC code:

<cfcomponent>
   <cffunction name="onIncomingMessage">
      <cfargument name="CFEvent" type="struct" required="YES">
      <!--- Remove any extra white space from the message. --->
      <cfset message =  Trim(arguments.CFEvent.data.MESSAGE)>
      <!--- If the message is numeric, a previous search probably returned a
         list of names. Get the name to search for from the name list stored in
         the Session scope. --->
      <cfif isNumeric(message)>
         <cfscript>
            if (structKeyExists(session.users, val(message))) {
               message = session.users[val(message)];
            }         
         </cfscript>
      </cfif>

      <!--- Search the database for the requested name. --->
      <cfquery name="employees" datasource="cfdocexamples">
         select FirstName, LastName, Department, Phone
         from Employees
         where 0 = 0
         <!--- A space indicates the user entered a first and last name. --->
         <cfif listlen(message, " ") eq 2>
            and FirstName like '#listFirst(message, " ")#%'
            and LastName like '#listlast(message, " ")#%'
         <!--- No space: the user entered a first or a last name. --->
         <cfelse>
            and (FirstName like '#listFirst(message, " ")#%' 
            or LastName like '#listFirst(message, " ")#%')
         </cfif>
      </cfquery>

      <!--- Generate and  return the message.--->
      <cfscript>
         retrunVal = structNew();
         retrunVal.command = "submit";
         retrunVal.buddyID = arguments.CFEvent.data.SENDER;
         
         //No records were found. 
         if (employees.recordCount eq 0) {
            retrunVal.message = "No records found for '#message#'";
         }
         //One record was found.
         else if (employees.recordCount eq 1) {
         // Whitespace in the message text results in bad formatting,
         // so the source cannot be indented.
            retrunVal.message = "Requested information:
#employees.firstName# #employees.lastName#
#employees.Department#
#employees.Phone#";
         }
         //Multiple possibilities were found.
         else if (employees.recordCount gt 1) {
            //If more than ten were found, return only the first ten.
            if (employees.recordCount gt 10)
            {
               retrunVal.message = "First 10 of #employees.recordCount# records";
            }else{
               retrunVal.message = "Records found: #employees.recordCount#";
            }
            // The session.users structure contains the found names.
            // The record key is a number that is also returned in front of the 
            // name in the message.
            session.users = structNew();
            for(i=1; i lte min(10, employees.recordCount); i=i+1)
            {
               // These two lines are formatted to prevent extra white space.
               retrunVal.message = retrunVal.message & "
#i# - #employees.firstName[i]# #employees.lastName[i]#";
               // The following two lines must be a single line in the source
               session.users[i]="#employees.firstName[i]#
                  #employees.lastName[i]#";
            }
         }
         return retrunVal;
      </cfscript>
   </cffunction>
</cfcomponent>

View comments in LiveDocs