Er det mulig å dynamisk fylle et CFC med argumenter?

stemmer
2

Følgende kodefeil:

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

men jeg vil gjerne vite om det er mulig å sette dynamisk argumentene for en CFC - eller er det bedre å bare passere i en struct og håndtere det?

Takket
Rob

Publisert på 12/06/2009 klokken 15:03
kilden bruker
På andre språk...                            


2 svar

stemmer
1

Ingen sjanse!

To måter, som du sa, ikke definere cfargument kodene og i stedet se etter dem som sendes inn med StructKeyExists (argumenter, aDynamicName), eller lage en kode generator og skrive disse metodene til en fil.

Svarte 12/06/2009 kl. 15:10
kilden bruker

stemmer
0

En måte jeg har prøvd å gjøre lignende ting med hva du gjør er noe langs disse linjene:

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

og deretter sløyfe over listen over potensielle kolonner, ved hjelp av hvert element i listen som indeksen for å søke etter i columnValues ​​struct. hvis det finnes at verdien i struct, så yo'ure godt; ellers ignorerer du at kolonnen i oppdateringen.

du vil da kaller funksjonen noe sånt som dette:

å få kolonnene du leter etter

vekselvis, kan du ignorere potentialColumns argument og bare få denne informasjonen i din CFC:

<cffunction name="doSomethingWithDatabase">
<cfargument name="columnValues" type="struct">
<cfset potentialColumns = getMyColumns()>
.... loop....
Svarte 12/06/2009 kl. 16:09
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more