Можно ли динамически заполнять CFC аргументами? - PullRequest
2 голосов
/ 12 июня 2009

следующие ошибки кода:

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

но мне бы очень хотелось узнать, можно ли динамически устанавливать аргументы для CFC & mdash; или лучше просто передать структуру и разобраться с этим?

Спасибо
Rob

Ответы [ 2 ]

1 голос
/ 12 июня 2009

Нет шансов!

Двумя способами, как вы сказали, не определяйте теги cfargument, а вместо этого ищите, как они передаются в StructKeyExists (ARGUMENTS, aDynamicName), или создайте генератор кода и запишите эти методы в файл.

0 голосов
/ 12 июня 2009

Один из способов, с помощью которых я пытался сделать нечто похожее на то, что вы делаете, это что-то вроде:

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

, а затем переберите список потенциальных столбцов, используя каждый элемент списка в качестве индекса для поиска в структуре columnValues. если это значение существует в структуре, тогда вы хорошо; в противном случае вы игнорируете этот столбец в обновлении.

тогда вы вызываете функцию примерно так:

чтобы получить столбцы, которые вы ищете

альтернативно, вы можете проигнорировать аргумент потенциальные столбцы и просто получить эту информацию в вашем коде:

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