2009-06-12 12 views
2

Les erreurs de code suivant:Est-il possible de remplir dynamiquement un CFC avec des arguments?

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

mais je voudrais vraiment savoir s'il est possible de définir dynamiquement les arguments en faveur d'un CFC — ou est-il préférable de passer simplement dans une struct et faire face à cela?

Merci
Rob

+0

et les excuses pour la faute de frappe dans le titre de la question - 4 heures sur un vendredi des trucs comme ça est voué à arriver! –

+0

@robdudley: Vous pouvez toujours éditer vos propres choses ici. Et si vous avez assez de réputation, vous pouvez aussi éditer le contenu des autres. ;-) Autant que je sache, les CFC ne peuvent pas avoir d'arguments, je pense que vous faites référence à s? – Tomalak

Répondre

0

Une façon que je l'ai essayé de faire des choses semblables à ce que vous faites est quelque chose le long de ces lignes:

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

puis boucle sur la liste des colonnes potentielles, en utilisant chaque élément dans la liste comme l'index à rechercher dans la structure columnValues. si cette valeur existe dans la structure, alors yo'ure bien; sinon, vous ignorez cette colonne dans la mise à jour.

vous auriez alors appeler la fonction quelque chose comme ceci:

pour obtenir les colonnes que vous recherchez

alternativement, vous pouvez ignorer l'argument potentialColumns et juste obtenir cette information votre cfc:

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

Pas de chance! Comme vous l'avez dit, deux manières ne définissent pas les balises cfargument et cherchent plutôt à les transmettre avec StructKeyExists (ARGUMENTS, aDynamicName) ou à créer un générateur de code et à écrire ces méthodes dans un fichier.