Blog

Entries Tagged as ColdFusion Builder Extensions

ColdFusion Builder Extension Using Flex

March 05, 2010 · No Comments

So, buried in the documentation around ColdFusion Builder is the fact that you can write extensions in Flex. I decided to fool around with this for a bit.

If you want to skip all of the demo and explanation and just try it out, feel free to pull down the extension:

Builder Stats at RIAForge

 

Builder Stats - ColdFusion Extension with Flex from Terry Ryan on Vimeo.

 

So doing it is pretty easy on the Builder side:

  • Create a remote service CFC for all of the information that you want to expose to Flex
  • Have your ColdFusion Builder extension pass information to the Flex generated SWF
    • Pass any variables to the SWF just like you would pass URL variables

On the Flex side:

  • Pull in the remote service cfc as a WSDL* using Flash Builder's Data/Services
  • Write your Flex app to use the services that get created
  • Alter the generated ActionScript classes to use a WSDL that is passed into the SWF via the URL (Flash Params)

One more thing:

I'm not sure if this is a Flex thing, a ColdFusion thing, an OS thing, a webservices thing, or a me being dumb thing, but the automatically generated WSDL for my remote service CFC was different on Windows and Mac. Consequently the SWF could call the Mac hosted WSDL but not the Windows hosts WSDL. My solution? Create a static WSDL file that had the service spelled both ways. Maybe a hack but worked like charm.

Anyway, if you want to see the code, it's available on github:

*WSDL? Why not Flash Remoting (or ColdFusion in the Data/Services list)? Remoting needs to be configured to each system's configuration, and isn't very discoverable. WSDL doesn't require knowing about the Extension user's AMF setup; it just uses a URL, which can be easily discovered.

 

No Comments Tags: git · ColdFusion Builder Extensions · Flash Builder · Flash · ColdFusion · Flex · ColdFusion Builder

Builder Extension using HTML

February 03, 2010 · 1 Comment

One of the cooler features of ColdFusion Builder's extension tooling is the ability to create extensions that are driven with HTML/JS/CSS instead of with the default XML options. I think this has a few advantages:

  • Allows interface options enabled by the XML options
  • Allows better branded extensions via CSS and background images
  • Allows you to develop/debug your extensions like normal web applications

This is pretty easy to enable. Normally you would have code like this in your handler to communicate back to the IDE:

<cfheader name="Content-Type" value="text/xml">
<response status="success" showresponse="true">
    <ide >
        <dialog width="600" height="400" />
        <body>
            <![CDATA[
                Some Response
            ]]>
        </body>
    </ide>
</response>

Instead you pass a URL parameter to the ide tag in your extension handler:

<cfheader name="Content-Type" value="text/xml">
<cfoutput>
<response showresponse="true">
    <ide url="http://localhost/extension/handler.cfm?configPath=#configPath#" >
        <dialog width="655" height="600" />
    </ide>
</response>
</cfoutput>

As you can see it can even handle URL variables.

Now, where I ran into trouble with this was with the URL itself. Basically you can't be sure of the URL when dealing with extensions. It could be localhost, but it just as easily could be on a remote server. So I was all clever and wrote some code to handle this:

<cfset baseURL = "http://" & cgi.server_name  />
<cfset messagesPath = getDirectoryFromPath(cgi.script_name) & "/messages.cfm" />
<cfset messagesOptions = "?type=notanapplication" />
<cfset messagesURL = baseURL  & messagesPath & messagesOptions >

 

You see, this will give me the correct URL to use to pass information to a template named "messages.cfm" that sits in the same folder as my handler. I use CGI variables to grab the server information. Then I use getDirectoryFromPath to make sure that I get the real relative path of the folder that the extension is sitting in (as opposed to assuming that it lives in the webroot). This works great.

Except I got reports of one of my extensions not working at all for some people. Look at that code again… There's another big assumption there. The assumption is that the extension is being called over the default http port, which for many ColdFusion developers it isn't. So the correct version of this code goes:

<cfset baseURL = "http://" & cgi.server_name & ":" & cgi.server_port />
<cfset messagesPath = getDirectoryFromPath(cgi.script_name) & "/messages.cfm" />
<cfset messagesOptions = "?type=notanapplication" />
<cfset messagesURL = baseURL  & messagesPath & messagesOptions >

Doing this you can be sure that you hit the right URL regardless of:

  • Server hostname
  • Server http port
  • Relative location of extension to the webroot

Happy extension building.

1 Comment Tags: ColdFusion Builder Extensions · ColdFusion · ColdFusion Builder

Apptacular Update and Video

February 02, 2010 · 3 Comment s

I know I've been quiet of late. But I've been working.

You see a few weeks ago I had this checklist up on the site:

  • Make sure apptacular_blog database works on MySQL on MAC.
  • Make sure apptacular_blog database works on MySQL on PC.
  • Make sure sakila database works on MySQL on MAC.
  • Make sure sakila database works on MySQL on PC.
  • Make sure apptacular_blog database works on MSSQL on MAC.
  • Make sure apptacular_blog database works on MSSQL on PC.
  • Make sure adventureworks database works on MSSQL on MAC.
  • Make sure adventureworks database works on MSSQL on PC.
  • Fix major issues in code readability.
  • Start Document how to work with Apptacular

See those AdventureWorks database items? They nearly killed me and made me want to stop work on Apptacular. AdventureWorks is like a cruel Double Dare obstacle course for code generation:

  • Composite primary keys
  • Composite foreign keys
  • Composite primary keys that are also foreign keys
  • Custom Datatypes
  • Constraints (Really only affected unit testing).

I came through, and now I can give you this list:

  • Make sure apptacular_blog database works on MySQL on MAC.
  • Make sure apptacular_blog database works on MySQL on PC.
  • Make sure sakila database works on MySQL on MAC.
  • Make sure sakila database works on MySQL on PC.
  • Make sure apptacular_blog database works on MSSQL on MAC.
  • Make sure apptacular_blog database works on MSSQL on PC.
  • Make sure adventureworks database works on MSSQL on MAC.
  • Make sure adventureworks database works on MSSQL on PC.
  • Fix major issues in code readability.
  • Start Document how to work with Apptacular

So that's where I am. A few of you asked if you could get your hands on Apptacular and I would be happy to distribute it to individuals. I'm not ready for general availability yet though.

And as a final note, I thought I would share this feature with you: Apptacular can model CRUD for image fields in your database.

Apptacular ColdFusion Builder Extension - Working with Images from Terry Ryan on Vimeo.

3 Comment s Tags: ColdFusion Builder Extensions · ColdFusion · ColdFusion Builder

Builder Stats

January 27, 2010 · 7 Comment s

You may have seen my previous posts about Apptacular. I'm getting pretty far along in it, and I wanted to figure out how many lines of code I had written, you know, for my only curiosity's sake. There's no easy way of doing this, but I figured that this was the perfect excuse to build another extension.

So basically I wrote an extension that will count every nonblank line in every file in a targeted folder. It then groups those line counts by folder, extension, and then just all files.

This extension isn't going to change anyone's life. But it's a great example of the fact that ColdFusion Builder extensions remove barriers to entry for this sort of thing. If I had to drop to Java to extend this in Eclipse I would have never done it - too much work for too little reward. But with ColdFusion Builder extensions in ColdFusion there's very little cost to indulging in this sort of experiment:

  • 10 minutes to write the base code
  • 10 minutes to turn it into an extension
  • 1 hour getting the formatting right to share publicly. (CSS is sadly harder then ColdFusion)

Feel free to use it, and improve on it: BuilderStats at RIAForge.

7 Comment s Tags: ColdFusion Builder Extensions · ColdFusion · ColdFusion Builder

Apptacular Plans

December 21, 2009 · 3 Comment s

A few people have asked: When will Apptacular be released?

Short answer: I don't know.

Long answer: I have a plan. Read on.

Before I release Apptacular, I want to make sure that it's solid. Right now it works with the database I have but I know it will fall down when it hits a "real" database. The fix for that problem is to run it against demo databases that come with various RDBMSs. I'm targeting sakila for MySQL and AdventureWorks for MSSQL.

Also the source is somewhat hard to follow. There is no documentation. Most people won't give a project a second look unless the documentation can at least get them started. Most potential contributors won't even try to jump in unless the source is manageable.

So to those ends I have sort of a checklist to go through before I release the extension and code:

  • Make sure apptacular_blog database works on MySQL on MAC.
  • Make sure apptacular_blog database works on MySQL on PC.
  • Make sure sakila database works on MySQL on MAC.
  • Make sure sakila database works on MySQL on PC.
  • Make sure apptacular_blog database works on MSSQL on MAC.
  • Make sure apptacular_blog database works on MSSQL on PC.
  • Make sure adventureworks database works on MSSQL on MAC.
  • Make sure adventureworks database works on MSSQL on PC.
  • Fix major issues in code readability.
  • Start Document how to work with Apptacular

So I'll keep you all up to date on where it is. If you want to test it ahead of time, and are willing to deal with bugs, then drop me a line in the comments.

3 Comment s Tags: ColdFusion Builder Extensions · ColdFusion · ColdFusion Builder

Apptacular ColdFusion Builder Extension - Unit Tests

December 18, 2009 · 2 Comment s

I just cannot get enough of making videos for Apptacular it seems. This latest one is about unit tests, specifically MXUnit tests. I need to test if Apptacular is creating applications properly. I wrote up some traditional unit tests for my code, but I really need to test the code that Apptacular makes. So I got it to generate unit tests that help me determine if the applications that Apptacular creates actually work. However, in the process I have to wire up a few things that make it really easy for you to get started writing unit tests in your applications. So it's a win-win.

The generator does some smart things like wiring up ORM tests that test across many-to-one relationships. (I haven't figured out how to do one-to-many or many-to-many yet.) Anyway, check out the video.

Apptacular ColdFusion Builder Extension - Unit Test from Terry Ryan on Vimeo.

2 Comment s Tags: ColdFusion Builder Extensions · ColdFusion · ColdFusion Builder

Apptacular ColdFusion Builder Extension - Working with Flash Catalyst and Flash Builder

December 16, 2009 · No Comments

For my next Extension trick, I want to show how to use Apptacular to jump start your Flex development. Apptacular by default creates remote services that are compatible with Flex. Flash Builder 4 has a new tool called "Data/Services" that makes working with ColdFusion remote services simplistic. Too simplistic. "Oh crap, what happens if my boss finds out I have all of this free time now" simplistic.

This demo will take you from a Flash Catalyst driven front-end to a Flex application back-ended by Apptacular created ColdFusion services.

Apptacular ColdFusion Builder Extension - Flash Builder and Flash Catalyst from Terry Ryan on Vimeo.

No Comments Tags: ColdFusion Builder Extensions · ColdFusion · ColdFusion Builder

Apptacular ColdFusion Builder Extension - Aesthetics

December 14, 2009 · No Comments

My last post and video dealt with how Apptacular could scaffold together your application. This post and video will talk about making that application look more like you want.

First off, everything has a display name. That display name is altered in the data model tools of Apptacular or in the XML directly. Then you might want to alter what column gets used when your table shows up in another table's interface because of a relationship. This is called a foreign key label. This is also editable in the configuration. After you get all of your labels done right, you want to order all of your columns correctly. You guessed it; it's done in the configuration tools. Finally, you might want to make up columns to use in your various labels. Apptacular has the concept of "virtual columns", which will allow you create custom getters for things like concatenated or formatted columns.

Once you get past interface issues, you may want to change application structure, move code around, or fine tune choices. This is done through the Application configuration. You can also detect obsolete code and have it removed automatically. Finally, if you are so inclined, Apptacular includes a login piece that can add an easy authentication form to your application.

So still a work in progress, hopefully this creates a good starting place for applications. My next post will talk about integrating this back-end into a Flex front-end.

Apptacular ColdFusion Builder Extension - Aesthetics from Terry Ryan on Vimeo.

No Comments Tags: ColdFusion Builder Extensions · ColdFusion · ColdFusion Builder

Apptacular ColdFusion Builder Extension - Scaffolding

December 11, 2009 · 6 Comment s

Scaffolding against a database has been done to death. But I wanted to take on some of the harder challenges. How do you act towards relationships? How do you handle one to many, many to one, and many to many relationships? How do you detect these relationships? This is especially important with the ORM features in ColdFusion 9. If we can detect these, and model our CFCs correctly we can save a lot of time by generating these CFCs with relationships included. Then if we scaffold on views that take these relationships into account, we can really turbo charge development.

I also wanted to take on a few key issues like paging and performance. Basically, I wanted paging to be easy. That meant wiring it up from the get go. I wanted performance to be usable. That meant writing common needs like column counts automatically in HQL for optimal performance.

So that's some of what I've set out to do in Apptacular. I have a video below that shows off these features:

  • Scaffolding
  • One-to-many relationships
  • Many-to-one relationships
  • Many-to-many relationships
  • Paging
  • Counts

ColdFusion Builder - Apptacular - Scaffolding from Terry Ryan on Vimeo.

6 Comment s Tags: ColdFusion Builder Extensions · ColdFusion · ColdFusion Builder

Apptacular ColdFusion Builder Extension

December 11, 2009 · 1 Comment

I've been working on a code generation ColdFusion Builder Extension for awhile -

Hey wait, where are you going? Okay, I know, code generation is so passé, but stick with me here I have some cool stuff for you.

So. Code generation. Okay, I have a ColdFusion Builder Extension named Apptacular. It's an application scaffolder that builds an application from a database. Pretty standard stuff. But I wanted to do something cool with it.

I started with how I handle overriding. Every scaffolder can create a default application, but where they start to fall down is when you want to override the defaults. A good example of this is form labels. The database field is "first_name" but you want the form label for that control to say "First Name." Different scaffolders solve this in different ways. I went with the tried and true XML configuration file route. My previous experience with this type of development tells me that people NEVER edit the XML. It's a pain. Okay, fair enough, but I'm using ColdFusion and ColdFusion Builder. I can create interfaces that allow you to edit your configs without looking at the XML. I've done that.

This feature allows me to do all sort of tweaks to the application. I can change label, sort order, and foreign key label fields. I can also change aspects of the application like where the CFCs are stored, how the services are created, etc. It uses XML, but you don't. (Unless you want to.)

The next thing I tried to do is make the interface for the entire set of configuration tools look a little better than the default. I used the ColdFusion Builder Extension APIs ability to display a URL as an interface to handle this. So I sprinkled in a little HTML, CSS and images to make a pleasing, branded, interface for my extension.

Then I put a lot of work into data modeling correctly. I can detect relationships and build the proper ColdFusion ORM CFCs for it. I can get commonly used items like number of related items.

Finally, there are a lot of little features like virtual columns, authentication, and Flex services that I've added. I should have a few videos of this in action for you over the next week.

The code is not quite ready to share yet, but I wanted to get it out there for all to see, and if need be, comment.

1 Comment Tags: ColdFusion Builder Extensions · ColdFusion · ColdFusion Builder