One of the announced features for ColdFusion 8 is support for dynamically passing attributes to ColdFusion tags. This will be a godsend for tags like CFMAIL. A reader asked me (and by the way, folks, don't ask me about Scorpio, in general I can't answer) if this support carried over to cfmodule and custom tags.

This is actually something that has been supported in ColdFusion for quite some time. I don't have the exact version it was added to ColdFusion, but custom tags have had support for 'attributeCollection' for a while. Consider this simple custom tag:

<cfdump var="#attributes#" label="In the tag">

If you first run it like so:

<cf_customtag name="ray" age="34">

You will see a struct with 2 keys, name and age. However, you can get the same result like so:

<cfset s = structNew()> <cfset s.name = "ray"> <cfset s.age = 34> <cf_customtag attributeCollection="#s#">

At the same time, ColdFusion UDFs support an argumentCollection value. Consider this example:

<cffunction name="mirrorargs"> <cfreturn arguments> </cffunction>

<cfset result = mirrorargs(name='ray',age=34)> <cfdump var="#result#">

This returns a structure much like the custom tag example. Now imagine we call it like so:

<cfset s = structNew()> <cfset s.name = "ray"> <cfset s.age = 34> <cfset result=mirrorargs(argumentCollection=s)> <cfdump var="#result#" label="Result using argumentcollection">

This will return the same structure as well. (Although to be clear - the case of the structs keys is different, but you should not be relying on struct key case anyway.)