CF9: Что это за оценка?

Я застрял и мне нужен свежий взгляд на это, пожалуйста.

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

<cfset surveyCount = 0>
<cfloop query="surveys">
    <cfif evaluate("defaultReport" & ID)>
        <cfset surveyCount = surveyCount + 1>
    </cfif>
</cfloop>  

В дампе запросов я вижу 9 записей, чего я и ожидаю, но из-за того, что оценка не удалась, surveyCount не увеличивается. Я не вижу столбцов для defaultReport, За мои 15 лет работы с CF я всегда избегал метода rate(), и теперь, когда мне нужно проанализировать его, я в полном недоумении. Может ли кто-нибудь предложить какое-либо руководство?

Добавлено изображение CFDump (некоторые имена столбцов были удалены для обеспечения конфиденциальности и безопасности):

ОБНОВЛЕНИЕ I: Этот файл имеет множество операторов cfinclude и очень мало форматирования кода. В результате я пропустил некоторые утверждения cfinclude. Я нашел следующее. Я все еще ищу, но хотел документировать это, как я копаю.

<cfloop query="surveys"> <cfscript> variables["defaultReport" & ID] = evaluate(thisAssociation & "Price"); </cfscript> </cfloop>

ОБНОВЛЕНИЕ II: Сбрасывая область видимости переменной, я подтвердил искомую переменную (находя запрос, который я написал в ОБНОВЛЕНИИ, я тоже помог).:)

2 ответа

Решение

То, что они хотели сделать, это увеличить surveyCount но только если эта вещь evaluate("defaultReport" & ID) оценивает true,

Из вашего изображения дампа запроса похоже, что идентификаторы являются числами 144, 145, так далее...

В этом контексте вы можете думать на evaluate("defaultReport" & ID) как-то так defaultReport144, defaultReport145 и т.д... (это переменные, установленные где-то в коде).

Итак, код:

<cfif evaluate("defaultReport" & ID)>
    <cfset surveyCount = surveyCount + 1>
</cfif>

становится (для идентификатора 144, первым в вашем цикле запросов)

<cfif defaultReport144>
    <cfset surveyCount = surveyCount + 1>
</cfif>

и так далее... для других идентификаторов

Итак, поищите в вашем коде переменные типа defaultReport144, defaultReport145 и т. д. true or false (0 or 1),

Что-то вроде:

<cfset defaultReport144 = true />

или, может быть, они используют какое-то выражение, которое оценивается как true или false, например:

<cfset defaultReport144 = [some expression] />

Если вы не можете найти, то, возможно, код был изменен или удален в месте, где эти defaultReport... переменные были установлены.

Холодный синтез evaluate() документация:
https://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7f4e.html

Вам нужно искать переменную вне вашего запроса. Эта переменная имеет имя default#ID#, Это можно назвать.

variables.default#ID#
form.default#ID#
url.default#ID#
request.default#ID#
attributes.default#ID#

и т.п.

В основном ColdFusion будет проходить через каждую область, пока не найдет что-то. (Нет, это не очень хороший подход)

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

Другие вопросы по тегам