1

以下代码错误:

<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 动态设置参数 - 还是简单地传入一个结构并处理它更好?

谢谢罗伯
_

4

2 回答 2

1

不太可能。

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

于 2009-06-12T15:10:41.963 回答
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....
于 2009-06-12T16:09:39.560 回答