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 будет проходить через каждую область, пока не найдет что-то. (Нет, это не очень хороший подход)
Если вам нужно это исправить, я бы порекомендовал не использовать такой неоднозначный подход. Короче говоря, нет никакого реального способа узнать, что он оценивает.