Я столкнулся с интересной ситуацией при обновлении устаревшего кода с CF10 до CF2018. Запрос сегментируется на куски строки на веб-странице и передается с помощью оператора CFGRID BIND в запрос в файле .cf c.
.CF C обрабатывает несколько веб-страниц для CFGRID. Различные веб-страницы предоставляют поля ввода для фильтрации данных в сетке, такие как поиск, даты и т. Д. c.
В некоторых запросах используется сокращенная запись JOIN (+) в операторе WHERE.
Моя проблема в том, что где-то между CFGRID и .CF C, "+" сбрасывается и заменяется пробелом.
DisplayHistoryReceived.cfm
Conditions = "t.CPNId = pn.CPNId(+)
AND t.PartId = p.PartId
AND t.POId = po.POId(+)
AND t.LocationId = l.LocationId
AND l.BuildingId = b.BuildingId
AND t.StatusCodeId = sc.StatusCodeId(+)
AND t.TransTypesId = 1
AND po.OwnerId = o.OwnerId"
DisplayGrid- HTML .cfm
<CFGRID
BIND="cfc:#application.area#.Components.Global.DrillDown.SearchGrid({dSource},{queryFieldNames},
{tableNames},{Conditions},{SearchField@change},SearchInput@keyup},{BooleanSelect@change},{BoolField},
{DFilters},DFilterLine1},{DFilterLine2},{DFilterLine3},{DateRange},{DateAfter},{DateBefore},{OrderBy},
{GroupBy},{pSize},{cfgridsortcolumn},{cfgridsortdirection},{cfgridpage},{cfgridpagesize})"
DrillDown.cf c
<CFQUERY NAME="grd" DATASOURCE="#dSource#">
SELECT DISTINCT #Fields#
FROM #PreserveSingleQuotes(Tables)#
WHERE #PreserveSingleQuotes(Conditions)#
<!--- Used to filter based on a TEXT search --->
<cfif '#sInput#' neq ''>
AND #sField# like <cfqueryparam cfsqltype="cf_sql_varchar" value="%#sInput#%"/>
</cfif>
[следуют другие инструкции CFIF]
Сообщение об ошибке, которое я получаю это: [Macromedia] [Oracle JDB C Драйвер] [Oracle] ORA-00904: «S C». «STATUSCODEID»: неверный идентификатор
Но эта выдержка из сообщения об ошибке приводит меня думать, что что-то могло произойти в CF2018 вместо этого:
WHERE t.CPNId = pn.CPNId( )
AND t.PartId = p.PartId
AND t.POId = po.POId( )
AND t.LocationId = l.LocationId
AND l.BuildingId = b.BuildingId
AND t.StatusCodeId = sc.StatusCodeId( )
AND t.TransTypesId = 1
AND po.OwnerId = o.OwnerId
Какие-нибудь идеи, кроме переписывания всех запросов стандартными JOINS? Есть несколько страниц, разбросанных по всему сайту, которые используют это.