coldfusion builder extensions

71
ColdFusion Builder Extensions Terry Ryan Adobe ColdFusion Evangelist http://terrenceryan.com @tpryan

Upload: terry-ryan

Post on 20-May-2015

1.683 views

Category:

Technology


0 download

DESCRIPTION

How to get started doing extension development for ColdFusion Builder

TRANSCRIPT

Page 1: ColdFusion Builder Extensions

ColdFusion Builder ExtensionsTerry RyanAdobe ColdFusion Evangelisthttp://terrenceryan.com@tpryan

Page 2: ColdFusion Builder Extensions

Google Translat

or

Page 3: ColdFusion Builder Extensions

Builder Stats

Page 4: ColdFusion Builder Extensions

Riaforge Downloa

d

Page 5: ColdFusion Builder Extensions

Getting Started Using

Page 6: ColdFusion Builder Extensions

Installation

• Install–Packaged Zip files

• Import

Page 7: ColdFusion Builder Extensions

Using Extensions

• Available as Context Menus (Right Click thingies) for:–RDS View–Project View–Outline View–Editor

Page 8: ColdFusion Builder Extensions

RDS VIEWEDITOR VIEW

PROJECT VIEW

OUTLINE VIEW

Page 9: ColdFusion Builder Extensions

Getting Started Writing

Page 10: ColdFusion Builder Extensions

Extension Components

• Ide_config.xml• CFML Handlers• Supporting Code

Page 11: ColdFusion Builder Extensions

<application>

[Metadata]

[Menu Contributions]

[Handlers]

</application>

ide_config.xml

Page 12: ColdFusion Builder Extensions

ide_config.xml

<application><name>DemoExtensions</name><author>Terrence Ryan</author><version>1.0</version><email>[email protected]</email><description>Simple Extension</description>

[Menu Contributions]

[Handlers]

</application>

Page 13: ColdFusion Builder Extensions

Licensing

• Add License agreement to metadata.

Page 14: ColdFusion Builder Extensions

ide_config.xml

<application>[Metadata]

<menucontributions ><contribution target="rdsview" >

<menu name="Database Info"><action name=“DBVersion" handlerid="databaseVersion" />

</menu></contribution>

</menucontributions>

[Handlers]

</application>

Page 15: ColdFusion Builder Extensions

ide_config.xml<application>

[Metadata]

[Menu Contributions]

<handlers><handler id="databaseVersion" type="CFM"

filename="databaseVersion.cfm" /></handlers>

</application>

Page 16: ColdFusion Builder Extensions

ide_config.xml

<application><name>DemoExtensions</name><author>Terrence Ryan</author><version>1.0</version><email>[email protected]</email><description>Simple Extension</description>

<menucontributions ><contribution target="rdsview" >

<menu name="Database Info"><action name=“DBVersion" handlerid="databaseVersion" /><action name="Inspect Table" handlerid="inspectTables" />

</menu></contribution>

</menucontributions>

<handlers><handler id="databaseVersion" type="CFM"

filename="databaseVersion.cfm" /></handlers>

</application>

Page 17: ColdFusion Builder Extensions

Handlers

[Parse IDE input]

[Do something]

[Respond to IDE]

Page 18: ColdFusion Builder Extensions

Parse IDE Input

<event> <ide version="2.0"> <callbackurl> http://192.168.180.208:53301/index.cfm?extension=ColdFusion Builder Test Creator </callbackurl>

<rdsview> <database name="cfartgallery"> <table name="APP.ART"> <fields>

<field name="ARTID" type="INTEGER" length="10"/><field name="ARTISTID" type="INTEGER" length="10"/><field name="ARTNAME" type="VARCHAR" length="50"/><field name="DESCRIPTION" type="CLOB" length="2147483647"/><field name="PRICE" type="DECIMAL" length="19"/><field name="LARGEIMAGE" type="VARCHAR" length="30"/><field name="MEDIAID" type="INTEGER" length="10"/><field name="ISSOLD" type="SMALLINT" length="5"/>

</fields> </table> </database> </rdsview> </ide></event>

Page 19: ColdFusion Builder Extensions

Parse IDE Input

<cfset XMLDoc = XMLParse(form.ideeventInfo) /><cfset db.dbname=XMLDoc.event.ide.rdsview.database[1].XMLAttributes.name />

[Do something]

[Respond to IDE]

Page 20: ColdFusion Builder Extensions

Do Something

[Parse IDE input]

<cfdbinfo datasource="#db.dbname#" name="version" type="version" />

[Respond to IDE]

Page 21: ColdFusion Builder Extensions

Respond to IDE

[Parse IDE input]

[Do something]

<cfheader name="Content-Type" value="text/xml"><response status="success" showresponse="true">

<ide ><dialog width="600" height="400" /><body>

<![CDATA[<cf_versionDisplay versionQuery = "#version#" />

]]></body>

</ide></response>

Page 22: ColdFusion Builder Extensions

Put it all together

<cfset XMLDoc = XMLParse(form.ideeventInfo) /><cfset db.dbname=XMLDoc.event.ide.rdsview.database[1].XMLAttributes.name />

<cfdbinfo datasource="#db.dbname#" name="version" type="version" />

<cfheader name="Content-Type" value="text/xml"><response status="success" showresponse="true">

<ide ><dialog width="600" height="400" /><body>

<![CDATA[<cf_versionDisplay versionQuery = "#version#" />

]]></body>

</ide></response>

Page 23: ColdFusion Builder Extensions

Interacting with IDE

Page 24: ColdFusion Builder Extensions

Collecting Input

<menucontributions ><contribution target="rdsview" >

<menu name="Database Info"><action name="Database Version" handlerid="databaseVersion" /><action name="Inspect Table" handlerid="inspectTables">

<input name="showPK" label="Show Primary Key" type="boolean"/><input name="showFK" label="Show Foreign Key" type="boolean"/>

</action></menu>

</contribution></menucontributions>

Page 25: ColdFusion Builder Extensions

User input

<event><user>

<input name="showPK" value="true"/><input name="showFK" value="true"/>

</user></event>

Page 26: ColdFusion Builder Extensions

Collecting Input

• Types– String– Dir– Boolean– File– Password– List

• Name• Label• Tooltip• Required

• Default• Checked• Pattern• ErrorMessage• HelpMessage

Page 27: ColdFusion Builder Extensions

Workspace Keywords

• Leverage Workspace Values– project location– projectname– serverhome– wwwroot

<input name=“outputDir" label=“Output Folder" default="{$projectlocation}" type="dir"/>

Page 28: ColdFusion Builder Extensions

Workspace Keywords - Gotchas

• Does not work in RDSview• Keywords are case sensitive

Page 29: ColdFusion Builder Extensions

Menu Filters

• Add Context-Menus only to specifi c items– Folders– Projects– Files– Outline Nodes

• Pattern match against name or RegEx<fi lters>

<fi lter type="fi le" pattern=“ index.cfm" /><fi lter type=“cff unction" />

</fi lters>

Page 30: ColdFusion Builder Extensions

Menu Filters - Gotchas

*.cfc does not workIt’s a regular expression.*\.cfc

Page 31: ColdFusion Builder Extensions

Menus

• RDS View• Project View• Outline View• Editor

Page 32: ColdFusion Builder Extensions

RDS View

<event> <ide version="2.0"> <callbackurl> http://192.168.180.208:53301/index.cfm?extension=ColdFusion Builder Test Creator </callbackurl>

<rdsview> <database name="cfartgallery"> <table name="APP.ART"> <fields>

<field name="ARTID" type="INTEGER" length="10"/><field name="ARTISTID" type="INTEGER" length="10"/><field name="ARTNAME" type="VARCHAR" length="50"/><field name="DESCRIPTION" type="CLOB" length="2147483647"/><field name="PRICE" type="DECIMAL" length="19"/><field name="LARGEIMAGE" type="VARCHAR" length="30"/><field name="MEDIAID" type="INTEGER" length="10"/><field name="ISSOLD" type="SMALLINT" length="5"/>

</fields> </table> </database> </rdsview> </ide></event>

Page 33: ColdFusion Builder Extensions

Project View

<event> <ide version="2.0"> <callbackurl> http://192.168.180.208:53301/index.cfm?extension=ColdFusion Builder Test Creator </callbackurl>

<projectview projectname="DemoExtensions" projectlocation=”[Project Path]"> <resource path=”[File Path]" type="file"/> </projectview> </ide></event>

Page 34: ColdFusion Builder Extensions

Outline View

<event> <ide version="2.0"> <callbackurl> http://192.168.180.208:53301/index.cfm?extension=ColdFusion Builder Test Creator </callbackurl>

<outlineview projectname="FlexGumboDemo" projectlocation="[Project Path]"> <source filename="artists.cfc" path="[FilePath]"> <node type="cffunction"> <function name="getIDName" returntype=" void"> </function> </node> </source> </outlineview> </ide></event>

Page 35: ColdFusion Builder Extensions

Editor View

<event> <ide version="2.0"> <callbackurl> http://192.168.180.208:53301/index.cfm?extension=ColdFusion Builder Test Creator </callbackurl>

<editor> <file location="/Users/terryr/Sites/centaur.dev/translator/test.cfm" name="test.cfm" project="Translator"

projectlocation="/Users/terryr/Sites/centaur.dev/translator" projectrelativelocation="test.cfm" />

<selection endcolumn="86" endline="4" startcolumn="1" startline="1"> <text>

Editor contentEditor contentEditor contentEditor content

</text> </selection> </editor> </ide></event>

Page 36: ColdFusion Builder Extensions

Getting information via callbacks<event> <ide version="2.0"> <callbackurl> http://192.168.180.208:53301/index.cfm?extension=ColdFusion Builder Test Creator </callbackurl>

…</event>

Page 37: ColdFusion Builder Extensions

Getting information via callbacks<cfset callbackURL = XMLParse(form.ideeventinfo).event.ide.callbackurl.XMLText />

<cfsavecontent variable="postData"><response>

<ide><commands>

<command type="getdatasources"></command>

</commands></ide>

</response></cfsavecontent>

<cfhttp method="post" url="#callbackURL#"><cfhttpparam type="body" value="#postData#" >

</cfhttp>

Page 38: ColdFusion Builder Extensions

Callback results<?xml version="1.0" encoding="UTF-8"?><event>

<ide version="2.0"><callbackurl>

http://192.168.180.208:53301/index.cfm?extension=Storm Extensions

</callbackurl><command_results>

<command_result type="getdatasources"><datasources>

<datasource name="max2010" server="centaur.dev"/>

<datasource name="webdu" server="centaur.dev"/>

<datasource name="indy" server="centaur.dev"/>

<datasource name="inventory" server="centaur.dev"/>

...</datasources>

</command_result></command_results>

</ide></event>

Page 39: ColdFusion Builder Extensions

Callbacks data fetches

• getServers• getDatasources• getTables• getTable• searchFile• getFunctionsAndVariables

Page 40: ColdFusion Builder Extensions

Callbacks can perform operations

• refreshProject• refreshFolder• refreshFile• insertText• openFile

Page 41: ColdFusion Builder Extensions

Callbacks- Gotchas

IDE has to have them enabled (it does by default)

Page 42: ColdFusion Builder Extensions

Creating Dynamic Extensions

• ColdFusion Builder Extensions Responses– XML– HTML– Flash– Eclipse SWT

Page 43: ColdFusion Builder Extensions

XML Response to Create Dynamic UI

<response status="success" type="default"><ide message="">

<dialog height="400" width="400" ><input name="location" default="${projectlocation}" /><input name="Generate View" type="boolean" checked="yes" />

</dialog></ide>

</response>

Page 44: ColdFusion Builder Extensions

XML Response to Create HTML UI

<response status="success" showresponse="true"><ide >

<dialog width="600" height="400" /><body>

<![CDATA[<p>This is an HTML Response</p>

]]></body>

</ide></response>

Page 45: ColdFusion Builder Extensions

Two Browsers

• Internally, ColdFusion Builder utilizes two different browsers to render extensions–Internal browser–System default browser

Page 46: ColdFusion Builder Extensions

IDE Browser

Pros• Crappy CSS

Support

Cons• Call backs for more

interaction with the IDE

Page 47: ColdFusion Builder Extensions

Native Browser

Pros• Full CSS

Cons• No Callbacks

Page 48: ColdFusion Builder Extensions

XML Response to Native Browser

<response status="success" showresponse="true"><ide url="#attributes.messageURL#" >

<dialog width="600" height="400" /></ide>

</response>

Page 49: ColdFusion Builder Extensions

Responding to views

<cfheader name="Content-Type" value="text/xml"><response status="success" showresponse="true"><ide ><view id="stormExtensions" title="Storm Extensions Test" icon="" /><body><![CDATA[

…]]></body></ide></response>

Page 50: ColdFusion Builder Extensions

<codeassistcontribution> <functions> <function name="linkTo" variableName="event" componentName="" handlerId="CodeAssistHandler"> <parameter index="1" /> </function> </functions> </codeassistcontribution>

Extension Code Assist

Page 51: ColdFusion Builder Extensions

<codeassist_response> <proposal display="display_value" insert="insert_this_value" inquotes="true/false"/> </codeassist_response>

Extension Code Assist

Page 52: ColdFusion Builder Extensions

Development Tips

Page 53: ColdFusion Builder Extensions

Development Tips

• <cfsettings showdebugoutput=“false” />

Page 54: ColdFusion Builder Extensions

Development Tips

• Reload / Import ExtensionsPreferences > ColdFusion > Extensions

• Have to do when you alter ide_confi g.xml

Page 55: ColdFusion Builder Extensions

Development Tips

• Errors output to Eclipse error logsWindow > Show View > Other > General > Error Log

Page 56: ColdFusion Builder Extensions

Development Tips

• Simulate submissions– Capture IDE input to text fi le– Read IDE input from text fi le– Develop like a webapp, until you

are ready for full testing with IDE

Page 57: ColdFusion Builder Extensions

Testing and Debugging

Page 58: ColdFusion Builder Extensions

Run ColdFusion from command line and

dump to the console

Page 59: ColdFusion Builder Extensions

Use a custom tag to dump to the IDE

window

Page 60: ColdFusion Builder Extensions

Use ColdFusion Builder Tester Extension

Page 61: ColdFusion Builder Extensions

Demo

ColdFusion Builder Tester

Page 62: ColdFusion Builder Extensions

Skinning

Page 63: ColdFusion Builder Extensions

HTML/CSS/JS

Pros• Easy to write• Compliments other

things you do

Cons• Some Concepts

aren’t well expressed

Page 64: ColdFusion Builder Extensions

Flex

Pros• Can do some cool

stuff

Cons• Harder to just

throw together an extensions

Page 65: ColdFusion Builder Extensions

Logo

• You can place a logo in the upper right hand corner

Page 66: ColdFusion Builder Extensions

<response showresponse="true" ><ide >

<dialog title="Apptacular"

image="handlers/logo.png" width="710"

height="690"/></ide>

</response>

Page 67: ColdFusion Builder Extensions

Menu Spacer

• You can add spacers to menu items.

• They’re clickable, but do nothing

Page 68: ColdFusion Builder Extensions

<menucontributions ><contribution target="rdsview" >

<menu name="Apptacular"> <action

name="------------------------------" /></menu>

</contribution>

Page 69: ColdFusion Builder Extensions

Like an app put ui in Custom tags

Page 70: ColdFusion Builder Extensions

Instant Code

Review

Page 71: ColdFusion Builder Extensions

Follow up?

• Feel free to contact me–[email protected]–http://terrenceryan.com–Twitter: @tpryan