Dynamic arguments and attributes in ColdFusion

This post is more than 2 years old.

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.)

Raymond Camden's Picture

About Raymond Camden

Raymond is a developer advocate for HERE Technologies. He focuses on JavaScript, serverless and enterprise cat demos. If you like this article, please consider visiting my Amazon Wishlist or donating via PayPal to show your support. You can even buy me a coffee!

Lafayette, LA https://www.raymondcamden.com