È possibile compilare dinamicamente un CFC con gli argomenti?
-
13-09-2019 - |
Domanda
Il seguente codice di errore:
<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>
ma mi piacerebbe davvero sapere se è possibile impostare in modo dinamico gli argomenti per una CFC o è meglio passare semplicemente in una struttura e di fare??
Grazie
Rob
Soluzione
Un modo che ho sempre cercato di fare cose simili a quello che stai facendo è qualcosa lungo queste linee:
<cffunction name="doSomethingWithDatabase">
<cfargument name="potentialColumns" type="string">
<cfargument name="columnValues" type="struct">
e poi loop sopra l'elenco dei potenziali colonne, utilizzando ogni elemento della lista, come l'indice di ricerca per la columnValues struct.se il valore è presente nella struttura, poi yo'ure bene;in caso contrario, si ignora che la colonna dell'aggiornamento.
devi chiamare la funzione di qualcosa di simile a questo:
per ottenere le colonne che stai cercando
in alternativa, si potrebbe ignorare il potentialColumns argomento e solo ottenere che le informazioni in vostro cfc:
<cffunction name="doSomethingWithDatabase">
<cfargument name="columnValues" type="struct">
<cfset potentialColumns = getMyColumns()>
.... loop....
Altri suggerimenti
Nessuna possibilità!
Due modi, come hai detto, non definire i tag cfargument e invece cercare per loro vengono passati con StructKeyExists (argomenti, aDynamicName) o, creare un generatore di codice e scrivere questi metodi in un file.