With the release of ColdFusion 9 you can do nearly everything in script syntax that you were able to do using tags, including executing queries. I'm not really sure when this feature was introduced in Railo (probably 3.2), but you can do this in Railo as well. However, I found one inconsistency today when doing a query-of-query using script syntax.
In ColdFusion, there is a dbtype argument to the execute() method of the Query object. So to do a query-of-queries you can just specify dbtype="query" when you execute your query:
<cfscript> // myQuery is a predifined query // so I can execute a query against myQuery this way: qoq = new Query(); qoq.setSQL("select * from myQuery where foo = 'bar'"); qoq.execute(dbtype="query").getResult(); </cfscript>
But when I ran this code in Railo (latest BER version 3.30.023). I got the error "Table 'mydsn.myQuery' doesn't exist"
So it was looking for a table in my db named 'myQuery' and seemed to ignore the dbtype="query" argument that I passed into the execute() function. Fortunately, you can look right into the workings of Railo's Query object by opening WEB-INF/railo/components/org/railo/cfml/Query.cfc, and by doing that you can see that there is no dbtype argument specified for execute(). However, it turns out that you can get it to work in Railo by using the setDBType() method.
<cfscript> qoq.setDBType("query"); qoq.execute().getResult(); </cfscript>
Basically Query.cfc extends a Base.cfc component which uses onMissingMethod to enable using setters for passing in things that you would use attributes for in the tag version. So it's one extra line of code, but it works. And the good news is that it also works in ColdFusion 9. Since it is inconsistent with CF9, I submitted an issue for it. But I just thought I'd post this in case someone else runs into this issue.
Well, it's been quite a while since I've posted anything here. Lots of things have been going on in my life which has effectively deep-sixed by blogging (not that I've ever been that prolific). But on with the subject of this particular blog post. Those of you who I talked to at cfObjective already know about this, but the big news in my life is that I'm now officially an Application Developer for ten24 Web Solutions!
Lately, I've been doing some work with Greg Moser on the Slatwall Ecommerce plugin for Mura CMS. The other day, I did a core upgrade on my local Mura development instance which I was using for Slatwall. All of a sudden, I couldn't access the Slalwall dashboard even though I was logged in as a Super Admin. No matter what I did, it seemed like I wasn't recognized as a privileged user.
In Mura CMS, there is the concept of templates that make up your site theme. Your theme can have multiple templates, such as a two-column template and a 3 column template which can be assigned to individual pages in your site. You can read more about templates in Mura here. Recently, while working on a Mura site, I wanted my pages to be able to dynamically use either a 2- or a 3-column template depending on whether something was assigned to the right column display region (which was display region #3 in this site).
So I whipped up this template named default.cfm:
<cfif len( trim($.dspObjects(3)) )> <cfinclude template="three_column.cfm" /> <cfelse> <cfinclude template="two_column_SL.cfm" /> </cfif>
So basically it checks to see if anything was assigned to the right column display region. If so, the 3 column template is rendered. If not it defaults to 2 columns. This way, I can just set all pages to the default template and let the content determine whether 2 or 3 columns are used.