2009-06-12 64 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)來查找它們,或者創建一個代碼生成器並將這些方法寫入文件。