the singularity of being and nothingness
ColdFusion

Converting ColdFusion Queries for Ext
Jan 21st
At my new job, we use Ext fairly regularly to get some pretty cool AJAXiness up in the mix of things. To familiarize myself with Ext (I’ve not really used it until now), I recently downloaded the newest version and have been playing around with it quite a bit.
One of the elements I like quite a bit is the data grid. Like most other things, Ext makes it pretty simple to pull off a slick sortable, pageable data grid with very little work.
Of course, given that I use ColdFusion alot, I decided to hook up a grid to a remote CFC call. While the call itself is easy enough to do, there is one issue: the JSON that CF returns is in a format that Ext cannot quite understand.
Now there are a bunch of pre-built converters out there, some more robust than others (and a few I couldn’t quite get to work).
So in the spirit of trying to figure it out for myself, I wrote up a simple function in ColdFusion that will take a regular query and convert it into happy JSON that Ext can deal with.
First, here’s our function to create our generic query:
<cffunction name="getPosts" access="remote" returnformat="json" output="false" hint="Gets list/detail More >

Getting Web Site Screenshots with ColdFusion…and a Little Help
Jan 17th
For those of you who don't know, I am the owner and occassional operator (!) of CSS {Imagine}, a simple, but relatively well-visited web design gallery. One of the requirements I had for this site when I built it was that I did NOT want to have to do any work of manually grabbing screenshots and cropping thumbnails for the sites that are submitted to the site. So using a combination of a third-party screen-capture service and CF8's super-awesome image editing tools, I've built an entirely automated process for handling of all this less-than-fun work. Heck, all I have to do to kick off the process is to click a link in a notification e-mail…:)
One of the downsides to using the third-party service is that the results are VERY inconsistent. Some of the images are garbled, while others simply fail. However, the biggest issue I have is that the service has–reasonably enough–a finite amount of servers to process all the request. Therefore, there are several occassions (daily) that I have to wait to kick off the process until the screen shot service has reached my requests in the queue. I know, I know, not a huge deal. However, it would More >

CFSharePoint: Copy Items from One Folder to Another
Sep 12th
In a previous post, I wrote about watching out for data type mismatches when using the CFSharePoint tag. While this is all well and good, much of my post was based on a misconception of how an "inout parameter" works. While I can't claim great knowledge of this, I think I have a better understanding.
From what I understand, an inout parameter expects a specifically named parameter–let's say "Result"–to be passed in. When you pass this parameter to the web service, the value, or "out", should be the variable that you want returned. So if I want the "results" parameter to return its value as "finalResults", you could do something like:results="finalResults"
In the last post, I was under the impression that the initial value of "results" HAD to be a ColdFusion data type, like a structure or array. This is not correct. Sure, I can pass in the appropriate data type with the "results" parameter; however, whatever structure I pass in will overwrite the "out". This is why if you run the example I provided in the last post, copying an "About.doc" file from one folder to another will really just create a new "About.doc" with the value of the binary object More >

CFSharePoint: Adding Groups…and Users to Them :)
Aug 4th
Enough of lists! The last few posts, I’ve been dealing with the same old boring lists, and I’ve grown tired of that. So today, I want to show a quick example of how to use some of the Users and Groups web services to handle user and group management.
So let’s say I have a brand new user. They have astounding technical skills, so I decide that I want to add her to a special group of users that I’ll call “Super Users”. The only issue, however, is that this group does not exist. So to check all the items off my list and call it a day, I need to:
- Create the “Super Users” group;
- Add Maria to this group; and
- Add some missing user information about Maria
The first thing we need is to create the new SharePoint group. This is easy:
<cfsharepoint action="addgroup" domain="localhost" userName="un" password="pwd" name="theresult" wsdl="http://localhost/_vti_bin/UserGroup.asmx?wsdl" params="#{groupName="Super Users", ownerIdentifier="mycomp\joel", ownerType="user", defaultUserLoginName="mycomp\joel", description="A group of really cool, really powerful users :)" }#" />
Regarding the info being passed, there’s nothing really to speak of. However, you should notice that the method “addgroup” is not listed in the CF9 reference as being supported by the <cfsharepoint> tag (and believe me, a quick test reveals More >

CFSharePoint: Adding List Items with Attachments
Aug 3rd
In my last post, I showed how simple it is to post a list item to a SharePoint list from Coldfusion 9. In this post, I want to expand a bit, showing how to add an attachment to a newly created list item. I also thought it would be a bit more fun to use form data, rather than hardcoding everything…so here goes 🙂
<cfif isDefined('FORM.submit')> <cfsavecontent variable="xml"> <Batch OnError='Return'> <cfoutput> <Method ID='1' Cmd='New'> <Field Name='ID'>New</Field> <Field Name='Title'>#FORM.title#</Field> <Field Name='Favorite_x0020_Color' #FORM.color#</Field> </Method> </cfoutput> </Batch> </cfsavecontent> <cfset newItem = xmlParse(xml)> <!---Be sure to get the actual field name from the URL, not from the display in SharePoint---> <cfsharepoint action="updatelistitems" domain="domain" userName="username" password="password" name="theresult" params="#{listName="AAC20C17-A87D-4985-BA1D-9DD511EE9B9A",updates="#newItem#"}#" /> <cfset theID = theresult.result[2].ows_ID /> <cfset attach = filereadbinary(FORM.myfile)> <cfsharepoint action="addattachment" domain="domain" userName="username" password="password" params="#{listName="AAC20C17-A87D-4985-BA1D-9DD511EE9B9A", listItemID="#theID#", fileName="#filename#", attachment="#attach#" }#" /> </cfif> <cfform name="myform" method="post" enctype="multipart/form-data" target="addlistwithattachment.cfm"> Title: <cfinput type="text" name="title" /><br /> Fav Color: <cfinput type="text" name="color" /><br /> Filename: <cfinput type="text" name="filename" /><br /> File: <cfinput type="file" name="myfile" id="myfile" /><br /> <cfinput type="submit" name="submit" value="Submit" /></cfform>
So really, here we have another easy bit of code. The insert method (updatelistitems) is unchanged, except that I’ve tied the field values More >

CFSharePoint: Adding List Items
Aug 2nd
After pretty exciting results with retrieving list data from SharePoint using ColdFusion 9, I’ve been quite eager to try out some of the other methods exposed by ColdFusion. However, retrieving lists is one thing; testing out methods that could actually modify data is another entirely. So, I broke down and spent several hours installing WSS and SQL Server 2008 on my local machine. Interestingly enough, there are ways to get it to run on a 32-bit Vista machine, so if you’re curious how, let me know ;).
Anyway, once I got SharePoint installed, I immediately created a simple list. It’s incredibly simple–it only has two fields, “Title” and “Favorite Color.”
The first method I wanted to try out was to add a list item to this list, a name and a color. As with the list retrieval web service, the “updateListItems” method is just as simple to implement. Here’s the code I used:
<cfsavecontent variable="xml"> <Batch OnError='Return'> <Method ID='1' Cmd='New'> <Field Name='ID'>New</Field> <Field Name='Title'>Monkey</Field> <Field Name='Favorite_x0020_Color'>Pink</Field> </Method> </Batch> </cfsavecontent> <cfset newItem = xmlParse(xml)> <cfsharepoint action="updatelistitems" domain="localhost" userName="username" password="password" name="newitems" params="#{listName="AAC20C17-A87D-4985-BA1D-9DD511EE9B9A", updates="#newItem#"}#" /> <cfdump var="#newitems#" />
This is super straight-forward. First, you create a “Batch” element. Basically, this allows you to define any number of “methods” More >

CFSharePoint…Yes!
Jul 21st
The other day, I downloaded the beta for ColdFusion 9. While waiting for the download, I was looking through some of the marketing copy that Adobe had on their site about the new features for this release. I about fell off my chair when I saw that not only has ColdFusion 9 increased connectivity to Microsoft’s SharePoint, but they have even built a tag to wrap up the functionality into one nice little package: <cfsharepoint />.
This one little tag is incredibly powerful. It knocks out all of the painful and cumbersome web services wrappings required to deal with SharePoint’s WSDLs. Besides having over 50 built-in functions to deal with lists, document libraries, and the like, you can optionally point to other (or custom) WSDLs to access whatever <cfsharepoint> can’t get at by default.
So after reading about this, I just HAD to try it out. Not surprisingly, ColdFusion makes a routine task like retrieving a list extremely simple. Here’s my test:
<cfset viewFields = xmlParse(" <ViewFields> <FieldRef Name='Title'/> <FieldRef Name='ID'/></ViewFields> ")> <cfset query = xmlParse(" <Query> <OrderBy> <FieldRef Name='ID'/> </OrderBy> </Query> ")> <cfset queryOptions = xmlParse("<QueryOptions></QueryOptions>")> <cfsharepoint action="getlistitems" domain="domain.com" name="spVar" userName="myusername" password="mypassword" params="#{listName="546585D2-7AC4-493F-8DC5-F089B9EEB0AD", viewName="A8720E14-A847-4255-8527-055D2DD97868", query="#query#", rowLimit="20", viewFields="#viewFields#", queryOptions="#queryOptions#", webID="" }#" /> <cfset More >

Setting Dynamic Mappings in ColdFusion 8
May 2nd
Over the last year, I've learned alot about ColdFusion, AJAX, and DBA stuff. I have to say, however, that the coolest thing I've learned is that in ColdFusion 8 you can set per application mappings in the Application.cfc itself. Why is this so cool? Well, I tend to create a lot of folders in my applications in order to keep related assets in one place together. Of course, creating mappings to these folders makes life a lot easier in that you don't have to worry about making sure you are referencing these folders correctly in different contexts–with mappings ColdFusion can take of that for you.
However, the problem I often run into is that I have to create some funky mapping names in CF Administrator in order to keep them all unique. In my local host environment, for example, the number of mappings is huge and it becomes a hassel to remember to re-set these mappings up when I push final code to a production environment (not to mention that some hosting providers make doing this a lot harder than you could imagine…).
But with CF8, this is no longer a problem. Now you can create dynamic mappings in APplication.cfc, More >

ColdFusion input=datefield Gotcha
Feb 5th
Another quick post 🙂
If you're using ColdFusion 8's datefield input AND are using a table for laying out the form, make sure that the cfform element is OUTSIDE of the table element.
This, of course, should be done anyway…however, tonight I was modifying some old, embarassing code and upgraded to the datefield. The page kept throwing an unhelpful JS error. After about 20 minutes of getting angry, I reversed the order of the table and form elements, and voila, it worked again.
Urgh.
Share this:
ColdFusion 9…Here I Come!
Dec 8th
Oh yeah! I just received email confirmation today that I have been accepted to participate in the Centaur (ColdFusion 9) alpha release! Additionally, I am going to be able to beta Bolt, a new Eclipse-based IDE being developed by Adobe to be used in conjunction with ColdFusion.
This is going to be fun 🙂
Share this: