queryEach или .each () не работает на CF 11, почему? - PullRequest
0 голосов
/ 17 октября 2018

Я искал в Google лучшую форму, чтобы поразмышлять над «запросом» в Coldfusion, так как я новичок в компании, где я работаю, и я пытаюсь получить больше от CF

Вот мои попытки:

Мои модели:

<cffunction hint="Foo" name="Foo" access="public" returntype="query">
    <!--- Argumentos --->
    <cfargument hint="Something" name="ArgComBus" type="string" required="no" default="">
    <cfargument hint="Other thing" name="ArgPar" type="string" required="no" default="">

    <cfscript>
        queryService = new Query();
        queryService.setSql("
            SELECT
                column1,
                column2,
            FROM
                tab_bar
            WHERE
                1=1
                #arguments.ArgComBus#
        ");
        queryService.setDataSource(session.Dsn);

        if(Len(Trim(arguments.ArgPar))){
            Evaluate(arguments.ArgPar);
        }
        queryResult = queryService.execute();
        qBus = queryResult.getResult();
    </cfscript>


    <cfreturn qBus>
</cffunction>

Мой скрипт

<cfscript>
arrFoo = arrayNew(1);

qFoo = this.Foo(
    ArgComBus = " AND column1 = #variables.bar# ");

// First Attempt - The each method was not found.
qFoo.each(function (foo) {
    arrFoo.append(foo);
});

// Second Attempt - Variable QUERYEACH is undefined.
queryEach(qFoo, function (foo) {
    arrFoo.append(foo);
});

writeDump(arrFoo);
</cfscript>

Дамп моего сервера

InstallKit  Native Windows
appserver   Tomcat
productlevel    Developer
productname ColdFusion Server
productversion  11,0,05,293506
rootdir C:\CFusion11\cfusion

Я даже использовал getMetaData() в моей переменной запроса qFoo, и это возвращение, которое является массивом ... поэтому, когда я попытался использовать что-то подобное (пытаясь преобразовать массив в запросе?)

cfQuery = createObject("java", "coldfusion.sql.QueryTable").init(qFoo); 

.each() и queryEach() один и тот же ответ ... я даже пытался использовать arrayEach(), но вернуть объект coldfusion.sql.QueryTable, а не массив

1 Ответ

0 голосов
/ 17 октября 2018

Вы используете ColdFusion 11.

Функция queryEach() не была добавлена ​​до ColdFusion 2016:

Изначально я писал, что функция члена each() недоступна в Adobe ColdFusion 11. Аквитания указалав комментариях, что это действительно так. Я неправильно сослался на функцию Each() для Люси, которая работает с коллекциями.Функция Each(), связанная с этим вопросом, на самом деле является версией скрипта функции тега ArrayEach().Который доступен в ColdFusion 11 (он был фактически добавлен в ColdFusion 10).Извините за путаницу.

Документация может быть неправильной.Я не мог заставить функцию работать как Each(), кроме как в ColdFusion 2018. Для ColdFusion 11 я мог заставить ее работать только как ArrayEach().

Вот пара примеров, как зацикливать запрос в ColdFusion 11(заимствовано у cfdocs):

// Define our query 
platform = ["Adobe ColdFusion", "Railo", "Lucee"]; 
myQuery = queryNew(" "); 
queryAddColumn(myQuery, "platform", "CF_SQL_VARCHAR", platform); 


// By row index 
for (i = 1; i <= myQuery.recordCount; i++) { 
   writeOutput("<li>#myQuery["platform"][i]#</li>"); 
} 


// By query 
for (row in myQuery) { 
   writeOutput("<li>#row.platform#</li>"); 
}


// By arrayeach 
writeOutput("<h3>By arrayeach:</h3>");
function printArray(vendor, index)
{
    writeOutput("<li>#vendor#</li>");
}
arrayEach(platform,printArray);

Я создал для вас суть на TryCF.com, чтобы вы могли увидеть этот код в действии и поэкспериментировать с ним, если хотите. Просто нажмите здесь, чтобы запустить код .

...