Brandon asks:
Is there a way to see what UDF's are available to the requesting template?
While there is probably some internal method that can do this, there is a little known function you can use to find out if a variable is a UDF. Let's start by creating a bunch of variables and UDFs.
<cfscript> a = 1; b = 2; c = 3; d = 'you betcha!';function e() { return 'beer!'; }
f = [1,2,3]; g = {name='Ray',consuming=e};
function h() { return "more beer!"; } </cfscript>
<cffunction name="i"> <cfreturn "Stuff"> </cffunction>
Yes, those are horrible variable names, but you get the idea. In the above list, e, h, and i are udfs. Everything else is not. So how can we find them? First lets treat the variables scope like a structure:
<cfloop item="k" collection="#variables#">
Next use the isCustomFunction function:
<cfoutput> The variable #k# is <cfif not isCustomFunction(variables[k])>NOT</cfif> a UDF.<br /> </cfoutput>
That's it! If you run this you will see that it correctly recognizes which variables are UDFs.
In case you're curious, there isn't a direct way to tell if "X" is a built in function. You can use getFunctionList, which returns a struct, but you would then obviously need to do a structKeyList followed by a listFindNoCase.
I'll admit to have never using either of these functions in production. Has anyone used them?