Thanks for the feedback, Jake. All that "reassigning" of variables is a lot more typing. (But, can I get around reassigning each form variable individually by using the "argumentCollection" attribute when calling the method?)
I think I see what you're saying, however. By "translating" the type of variable coming in to the method into the argument scope, then any type of variable can be fed into the method...session, url, form, etc.,... making the method more flexible. Right? Thanks for the re-write, too! That helps me understand how things need to change. Jake Churchill wrote: > I generally make my CFCs as generic as possible. You are updating a > product and looking in the form scope for everything. It'll work, > sure. But, what if in the future you get an entire cart. Then you > won't be looking in the form scope, you'll be looking at something in > the session or database. In that case, you'll want to be able to loop > over something and pass stuff into the function which would be very > tricky if the function is stuck in the form scope. Also, there's no > reason to copy the arguments over to variables. Variables would be used > more if you are actually instantiating a CFC as an object. I assume you > are not because if you did that, you'd probably pass an object into the > update product. > > Here's a way I'd re-write your function to make it more abstract: > > <cffunction name = "update_product" displayname = "update_product" hint > = "Update specified product" output = "false"> > <cfargument name="product_id" type="string" required="yes"> > <cfargument name="name" type="string" required="false" default=""> > <cfargument name="description" type="string" required="false" > default=""> > <cfargument name="regular_price" type="numeric" required="false" > default=""> > <cfargument name="featured" type="string" required="false" default=""> > <cfargument name="special" type="string" required="false" default=""> > <cfargument name="special_price" type="numeric" required="false" > default=""> > <cfargument name="photo_150" type="string" required="false" default=""> > <cfargument name="photo_400" type="string" required="false" default=""> > > <cfquery name = "qUpdateProduct" datasource="#application.dsn#"> > update products > set name = <cfqueryparam cfsqltype="cf_sql_varchar" > value="#arguments.name#">, > description = <cfqueryparam cfsqltype="cf_sql_varchar" > value="#arguments.description#">, > regular_price = <cfqueryparam cfsqltype="cf_sql_decimal" > value="#arguments.regular_price#" scale="2">, > featured = <cfqueryparam cfsqltype="cf_sql_char" > value="#arguments.featured#">, > special = <cfqueryparam cfsqltype="cf_sql_char" > value="#arguments.special#">, > special_price = <cfqueryparam cfsqltype="cf_sql_decimal" > value="#arguments.special_price#" scale="2">, > photo_150 = <cfqueryparam cfsqltype="cf_sql_varchar" > value="#arguments.photo_150#">, > photo_400 = <cfqueryparam cfsqltype="cf_sql_varchar" > value="#arguments.photo_400#"> > where product_id = "#arguments.product_id#" > </cfquery> > </cffunction> > > > -Jake Churchill > > Rick Faircloth wrote: > >> Hi, all... still trying to get a handle on using CFC's. >> >> Here's an update method I wrote and I'd like to know >> what can be changed to make it better. Such as, >> why not use the form scope in the query? And, why >> not just use the application scope for the dsn, instead >> of converting it to the variables scope? >> >> If components have access to the url, form, session, and >> application scopes, etc., why not use them in the component? >> What's the benefit of converting them? >> >> <cffunction name = "update_product" >> displayname = "update_product" >> hint = "Update specified product" >> output = "false"> >> >> <cfargument name="product_id" type="string" required="yes"> >> <cfset variables.product_id = "#arguments.product_id#"> >> >> <cfquery name = "qUpdateProduct" datasource="#application.dsn#"> >> >> update products >> >> set name = <cfqueryparam >> cfsqltype = "cf_sql_varchar" value = "#form.name#">, >> description = <cfqueryparam >> cfsqltype = "cf_sql_varchar" value = "#form.description#">, >> regular_price = <cfqueryparam >> cfsqltype = "cf_sql_decimal" value = "#form.regular_price#" scale >> = "2">, >> featured = >> <cfqueryparam cfsqltype = "cf_sql_char" value = >> "#form.featured#">, >> special = >> <cfqueryparam cfsqltype = "cf_sql_char" value = >> "#form.special#">, >> special_price = <cfqueryparam >> cfsqltype = "cf_sql_decimal" value = "#form.special_price#" scale >> = "2">, >> photo_150 = <cfqueryparam >> cfsqltype = "cf_sql_varchar" value = "#form.photo_150#">, >> photo_400 = <cfqueryparam >> cfsqltype = "cf_sql_varchar" value = "#form.photo_400#"> >> >> where product_id = >> "#variables.product_id#" >> >> </cfquery> >> >> >> </cffunction> >> >> >> > > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| Adobe® ColdFusion® 8 software 8 is the most important and dramatic release to date Get the Free Trial http://ad.doubleclick.net/clk;207172674;29440083;f Archive: http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:314231 Subscription: http://www.houseoffusion.com/groups/cf-talk/subscribe.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4

