2009-06-12 65 views
2

下面的代码错误:是否可以使用参数动态填充CFC?

<cfdbinfo datasource="#Application.DSN#" name="getCols" type="columns" table="#this.tableName#"> 
<cftry> 
    <cfquery name="getColumnDetails" dbtype="query"> 
    SELECT COLUMN_NAME,TYPE_NAME 
    FROM getCols 
    WHERE IS_PRIMARYKEY = 'NO' 
    </cfquery> 
    <cfcatch> 
    <cfset this.ErrorState = true> 
    <cfthrow message="General DB Error"> 
    </cfcatch> 
</cftry> 

<cfloop query="getColumnDetails"> 
    <cfargument name="#getColumnDetails.COLUMN_NAME#" displayName="values" type="Any" required="false" /> 
</cfloop> 

,但我真的想知道是否可以动态地设置参数为CFC —还是更简单地传递一个struct和处理呢?

感谢
罗布

+0

并且对问题标题中的错字表示歉意 - 在星期五这样的星期五会发生这样的事情! – 2009-06-12 15:03:53

回答

0

一种方式我一直试图做类似的事情,你在做什么,是沿着这些路线的东西:

<cffunction name="doSomethingWithDatabase"> 
<cfargument name="potentialColumns" type="string"> 
<cfargument name="columnValues" type="struct"> 

,然后遍历潜在列的列表,在列表中使用的每个元素要在columnValues结构中搜索的索引。如果该值存在于结构中,那么你会很好;否则,您会忽略更新中的该列。

你再调用函数是这样的:

得到你正在寻找

列交替,你可以不理会potentialColumns说法,只是得到的信息你的cfc:

<cffunction name="doSomethingWithDatabase"> 
<cfargument name="columnValues" type="struct"> 
<cfset potentialColumns = getMyColumns()> 
.... loop.... 
1

没有机会!

正如你所说的,两种方式并没有定义cfargument标签,而是使用StructKeyExists(ARGUMENTS,aDynamicName)来查找它们,或者创建一个代码生成器并将这些方法写入文件。

相关问题