在我们的代码库中使用ColdFusion 2016的代码分析器后,它给出了以下错误。
否_ [B5O]错误使用WRITELOG函数.WRITELOG函数不能用于替换语句。
<cfoutput>#writeLog("DS001", "#This.Name#", "SDC601", ArrayNew(1))#</cfoutput>
这个错误是什么意思?我需要做些什么才能解决问题?
我们正在从ColdFusion 7迁移到ColdFusion 2016.
答案 0 :(得分:0)
您如何/为何在<cfscript>
代码中使用<cfoutput>
语法?如果您的代码位于writelog
代码内,那么<cflog>
代码将无效。无论如何,在调用WriteLog (text, type, application, file, log)
或writeLog("DS001", "#This.Name#", "SDC601", ArrayNew(1))
函数时不需要这些标记。这让我相信你分享的代码不是真正的代码。
似乎您的函数调用值不正确。不确定在ColdFusion 7中是如何工作的(再次,这可能不是实际代码的一个例子)。以下是摘录from the documentation for the writelog function:
功能语法
text = "DS001" type = "#This.Name#" application = "SDC601" file = ArrayNew(1) log =
对于位置表示法,必须严格按照语法中提供的顺序执行序列。如果您未提供其中一个参数,请改用空字符串。这不适用于必须提供正确值的布尔值,即使您必须跳过它们。
您分享的代码是:
SELECT * FROM (
SELECT YEAR(CreateDate) [Year], MONTH(CreateDate) [Month], DATENAME(MONTH,CreateDate) [Month Name],COUNT(id) [Total],
CASE
WHEN PaymentStatus = 1 THEN 'Pending'
WHEN PaymentStatus = 2 THEN 'Commited'
WHEN PaymentStatus = 3 THEN 'Confirmed'
WHEN PaymentStatus = 4 THEN 'Canceled'
WHEN PaymentStatus = 5 THEN 'Failed'
ELSE ''
END AS PaymentStatus,count(ID) as counts
FROM [dbo].[BankPaymentRequest]
GROUP BY YEAR(CreateDate), MONTH(CreateDate), DATENAME(MONTH, CreateDate), PaymentStatus) as asd
PIVOT( SUM(counts)
FOR PaymentStatus IN ([Pending],[Commited],[Confirmed],[Canceled],[Failed])) AS MNamePivot
这意味着您正在使用位置表示法,ColdFusion将其解释为:
Year Month Total Pending Commited Confirmed Canceled Failed
2016 Jan 34 1 4 63 840 157
2016 Feb 34 8 4 62 8 15
2016 Mar 65 1 4 63 840 157
2016 Dec 56 8 4 62 8 15
2017 Jan 78 1 4 63 840 157
2017 Feb 89 8 4 62 8 15
2017 Mar 67 1 4 63 840 157
2017 Dec 8 4 62 8 15 345
需要修改代码,以便在使用该语法时以正确的顺序传递值。而且我不确定你为什么要尝试将空数组传递给函数。没有属性接受数组。