Я пытаюсь написать пользовательский тег, который будет перебирать объект cfquery особым образом.Я нашел эту страницу: http://www.zrinity.com/developers/mx/undocumentation/query.cfm, в которой рассказывается, как использовать базовые java-методы для навигации по набору результатов, но, похоже, он не работает в CF9.
Я могу позвонить .next()
,.previous()
, .first()
и .last()
просто отлично, и каждый метод обновляет query.currentRow
, но ссылка query.columnName
всегда возвращает значение из первой строки, а не currentRow.
Пример:
<cfquery name="testQuery" datasource="source">
SELECT FooName FROM NumberedFoos
</cfquery>
<cfloop from="1" to="3" index="i">
<cfoutput>#testQuery.currentRow# => #testQuery.fooName#</cfoutput><br />
<cfset testQuery.next()>
</cfloop>
Производит:
1 => Foo 1
2 => Foo 1
3 => Foo 1
Я знаю, что могу использовать что-то вроде testQuery.fooName[testQuery.currentRow]
, но это довольно нежелательно для людей, для которых я создаю пользовательский тег.Была ли удалена функциональность, описанная в приведенной выше ссылке из CF9?Если да, есть ли альтернатива?
EDIT
Чтобы подробнее узнать, почему, клиенту нужен собственный тег, который позволяет ему "утверждать" определенные вещи в запросе.Клиент имеет довольно низкий уровень понимания CF, но довольно хорошо пишет SQL.Их желаемый конечный результат является чем-то похожим на:
<cfquery name="purchaseTotals">
SELECT PurchaseId, Total FROM Purchases
</cfquery>
<CF_ASSERT query="purchaseTotals">
purchaseTotals.Total gte 0
</CF_ASSERT>
Желаемым результатом будет html-таблица, где каждая строка является строкой из запроса, который не соответствует утверждению.Поэтому для меня тег CF_ASSERT должен иметь возможность обновлять текущую строку.
Редактировать 2:
Основная задача - разрешить использование html в теле тега, сохраняя при этом запросзначения подставляются из соответствующей строки:
<CF_ASSERT query="purchaseTotals">
<CF_CONDITION expression="purchaseTotals.Total gte 0">
<!---error message when expression is false--->
<cfoutput>
Purchase #purchaseTotals.purchaseId# has a negative total!
</cfoutput>
</CF_CONDITION>
<CF_CONDITION expression="purchaseTotals.Total eq ''">
#PurchaseTotals.purchaseId# has a null total, this may be caused by:
<ul>
<li>Edge Case 1</li>
<li>Edge Case 2</li>
</ul>
</CF_CONDITION>
<CF_ASSERT>
Вывод здесь будет выглядеть примерно так:
Purchase 120 has a negative total!
Purchase 157 has a negative total!
Purchase 157 has a null total, this may be caused by:
<ul><li>Edge Case 1</li><li>Edge Case 2</li></ul>