2009-06-12 3 views
2

Die folgenden Codefehler:Kann ein CFC dynamisch mit Argumenten gefüllt werden?

<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> 

aber ich würde wirklich gerne wissen, ob es möglich ist, dynamisch für ein CFC die Argumente zu setzen — oder ist es besser, einfach in einer Struktur übergeben und damit umgehen?

Dank
Rob

+0

und Entschuldigung für den Tippfehler in der Frage Titel - 4 Uhr an einem Freitag Zeug wie das ist zu passieren! –

+0

@robdudley: Sie können hier immer Ihre eigenen Sachen bearbeiten. Und wenn man genug Reputation hat, kann man auch das Zeug anderer bearbeiten. ;-) Soweit ich weiß, können CFCs keine Argumente haben, ich denke du beziehst dich auf s? – Tomalak

Antwort

0

Ein Weg, ich habe versucht, ähnliche Dinge zu tun, was Sie tun etwas in dieser Richtung ist:

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

und dann Schleife über die Liste der möglichen Spalten, jedes Element in der Liste mit als der Index, nach dem in der columnValues-Struktur gesucht werden soll. Wenn dieser Wert in der Struktur existiert, dann bist du gut; Andernfalls ignorieren Sie diese Spalte im Update.

Sie würden dann die Funktion in etwa so nennen:

die Spalten Sie suchen abwechselnd

zu erhalten, können Sie die potentialColumns Argument ignorieren konnte und erhalten nur die Informationen in Ihr cfc:

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

Keine Chance!

Zwei Wege, wie Sie gesagt haben, definieren nicht die cfargument Tags und suchen stattdessen nach StructKeyExists (ARGUMENTS, aDynamicName) oder erzeugen einen Code Generator und schreiben diese Methoden in eine Datei.

Verwandte Themen