是否可以使用参数动态填充CFC?

时间:2009-06-12 15:03:14

标签: data-structures dynamic coldfusion arguments 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的参数 - 或者更简单地传入一个结构并处理它?<​​/ p>

感谢
罗布

2 个答案:

答案 0 :(得分:1)

没机会!

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

答案 1 :(得分: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....