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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top