Pergunta

Os erros o seguinte código:

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

mas eu realmente gostaria de saber se é possível ajustar dinamicamente os argumentos para uma CFC -? Ou é melhor do que simplesmente passar um struct e lidar com isso

Graças
Rob

Foi útil?

Solução

Uma maneira que eu tentei fazer coisas semelhantes ao que você está fazendo é algo ao longo destas linhas:

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

e o laço em seguida, sobre a lista de potenciais colunas, usando cada elemento na lista como o índice para procurar na estrutura columnValues. se esse valor existe na estrutura, bom, então yo'ure; caso contrário, você ignorar essa coluna na atualização.

você, em seguida, chamar a função algo como isto:

para obter as colunas que você está procurando

Como alternativa, você poderia ignorar o argumento potentialColumns e apenas obter essa informação em sua cfc:

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

Outras dicas

Sem chance!

Duas maneiras, como você disse, não definem as tags cfargument e, em vez olhar para eles sendo passado com StructKeyExists (argumentos, aDynamicName) ou, criar um gerador de código e escrever esses métodos em um arquivo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top