我有这个代码:
<cfdump eval=server>
Run Code Online (Sandbox Code Playgroud)
它输出的顶级键coldfusion,java,lucee,os,separator,servlet.请注意,railo那里没有列出.
但是,如果我这样做:
<cfdump eval=server.railo>
Run Code Online (Sandbox Code Playgroud)
然后它输出运行Railo服务器时可能期望的通常结构(而不是Lucee服务器).
那是怎么回事?
我试图使用new关键字调用组件,但它无法正常工作.
以下方法可以正常工作:
<cfset test = CreateObject("component", "test-objects.shipping_new").init(bar="Blah", foo="boom")>
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用以下内容时:
<cfset test = New test-objects.shipping_new(bar="Blah", foo="boom") />
Run Code Online (Sandbox Code Playgroud)
我收到了错误tag cfset is not closed.上面的代码是我试图从中调用它的文件的第一行,除非我遗漏了标记看起来对我不熟的东西.我正在使用Lucee 4.5,如果这有所作为.
我想启动一些请求日志记录,更重要的是,我的应用程序中的查询。Lucee 使这变得非常简单,我可以在 onRequestEnd 函数中使用几行代码记录任何给定页面中运行的所有查询:
<cfset getQueries = getPageContext().variablesScope()>
<cfset queryArr = ArrayNew(2)>
<cfset x = 0>
<cfloop collection="#getQueries#" item="key">
<cfif IsQuery(getQueries[key])>
<cftry>
<cfset thisQ = getQueries[key]>
<cfset thisQT = thisQ.getExecutionTime() / 1000000>
<cfset thisSQL = thisQ.getSQL().getSQLString()>
<cfset x = x + 1>
<cfset queryArr[x][1] = thisQT>
<cfset queryArr[x][2] = thisSQL>
<cfcatch>
</cfcatch>
</cftry>
</cfif>
</cfloop>
Run Code Online (Sandbox Code Playgroud)
这给了我一个数组,其中包含每个查询的 SQL(绑定变量用 ? 表示)和执行时间。我可以将它插入到日志数据库中,并从中获得各种乐趣。
问题是我有很多页面调用 CFC,它们运行查询然后返回数据:
<cfset someVar = createObject("component","cfc.test").getSomeData(ID=7)>
Run Code Online (Sandbox Code Playgroud)
在我编写日志代码后,我意识到 CFC 中的查询(我的大部分数据处理)没有被记录下来,因为它们当然是在自己的范围内运行的。我也在寻找一种简单的方法来记录 CFC 中的查询。
几分钟前我从未听说过 onCFCRequest(当谷歌启发我时),我找不到关于它使用的太多信息。我希望它可以像 onRequest 一样工作,我可以做这样的事情:
<cffunction name="onCFCRequest">
<cfargument type="String" name="cfcName" required=true/> …Run Code Online (Sandbox Code Playgroud) 我试图使用多插入语法获取我插入的行的生成密钥(或identitycol).
<cfquery>
CREATE TABLE TempPerson
(
PersonID INT NOT NULL IDENTITY (1,1) PRIMARY KEY,
LastName varchar(20),
FirstName varchar(20)
);
</cfquery>
<cfquery result="qrResult">
INSERT INTO TempPerson( lastName, firstName )
VALUES( 'Smith', 'Michael' ), ('Jones','Ricky')
</cfquery>
<cfdump var="#qrResult#">
Run Code Online (Sandbox Code Playgroud)
我在CF10和Railo 4.2中结合SQL Server和MySQL运行了这个.
带有SQL Server的CF10 - 没有返回GeneratedKey.只有recordCount变量
RecordCount = 2
Run Code Online (Sandbox Code Playgroud)
CF10与MySQL - 获取标识列作为列表,但错误的recordCount
GeneratedKey = 1,2
RecordCount = 1
Run Code Online (Sandbox Code Playgroud)
带有SQL Server的Railo 4.2 - 只获取最后一个标识列
GeneratedKey = 2
RecordCount = 2
Run Code Online (Sandbox Code Playgroud)
带有MySQL的Railo 4.2 - 获取标识列作为列表,以及正确的recordCount
GeneratedKey = 1,2
RecordCount = 2
Run Code Online (Sandbox Code Playgroud)
所以看起来4个排列中没有一致性.但我最紧迫的问题是,是否有办法从SQL Server运行CF10生成密钥.在那儿?
我正在使用lucee-spreadsheet,这是一个很棒的工具.我正在制作一个非常大的电子表格(工作簿中有多张表,每张表有数千行).一切都按预期工作.我已经用数据填充了工作表,并在客户想要的组之间创建了空白行.我现在回去尝试应用一些格式,我遇到了错误:
超出了最大单元格样式数.您可以在.xls工作簿中定义最多4000个样式
问题是我只尝试应用一种风格:
spreadsheet.formatColumns(workbook=workbook, format={dataformat="$##,####0.00"},range='5-20');
我还需要应用其他一些风格.我猜测,因为有超过500行,并且这种样式被应用于16列,该样式实际上是格式化每个单元格而不是列.
有没有不同的方式,我可以或应该应用这种风格?
我正在尝试向cfc添加一个接口,其中包含cfml文件中的一些函数,但是它会抛出错误消息"component [...]没有实现接口的函数[..]"它的功能抱怨是在包含的cfml文件中实现的,我已经在railo 4和lucee 5中测试了这个并且在两者中都得到了相同的错误但它在coldfusion 11中有效吗?是否有人知道在lucee中是否有解决方法或修复此问题或railo?
下面是重现错误的示例代码.
interface {
public numeric function func() output="false";
}
Run Code Online (Sandbox Code Playgroud)
component implements="int" {
include "inc.cfm";
}
Run Code Online (Sandbox Code Playgroud)
<cfscript>
public numeric function func() output="false"{
return 2;
}
</cfscript>
Run Code Online (Sandbox Code Playgroud)
<cfscript>
cfc = createObject("component", "comp");
writedump(cfc.func());
</cfscript>
Run Code Online (Sandbox Code Playgroud) 我希望能够在CFML/LUCEE组件中动态编写一组getter和setter(没有硬编码的cfproperty标签).
<!--- MyComp.cfc --->
<cfcomponent displayname="MyComp" hint="MyComp" accessors="true">
<cffunction name="init">
<cfargument name="dynamicprops" type="array">
<cfloop array="#dynamicprops#" index="item">
<!---
Now what? I cannot do a cfsavecontent and write props here.
It demands cfproperty just after the cfcomponent begins. I
tried to do with closures but they are not acually setters
and getters. Does anyone know how to better do it?
--->
</cfloop>
</cffunction>
</cfcomponent>
<!--- example call --->
<cfset mc = CreateObject("component","MyComp").init( [{"name"="a","default"=1}] ) />
Run Code Online (Sandbox Code Playgroud)
然后我希望能够调用mc.setA(100)和mc.getA().但是没有发生. …
我有一个没有格式化的项目列表,我需要排序.
item 1, item 3.0 ,item 8 , item 1.0 , item 4, item 5, item 6, item 10
Run Code Online (Sandbox Code Playgroud)
基本上,一些项目可以在逗号(,)之前或之后有空格(多个偶数).
我试图listtoarray然后排序但我发现排序保留了空格,使得第1项和第1.0项无法正确排序.我以为我可以使用listtoarray删除空格,但也许我正在考虑一个不同的功能,或者我需要通过循环遍历我的列表?
有人能刷新我的记忆吗?
更新预期结果应为:
项目1,项目10,项目3.0,项目4,项目5,项目6,......等.
我继承了一个在CF 9.01上运行的大型应用程序。
我正在将其移植到Lucee 5.3.3.62的过程中,但是存在一些问题,我知道我应该将其替换为,但是此应用程序有〜1000个源文件(!!),并且当前替换所有这些标签由于时机原因不明显。
Lucee抛出如下错误:
“对象或列名丢失或为空。对于SELECT INTO语句,请验证每个列都有一个名称。对于其他语句,请查找空别名。别名定义为“”或不允许。将别名更改为有效名称。”
起初,我认为日期字段存在问题,因为Lucee与CF 9.01的处理方式不同,但事实并非如此。因此,我创建了一个测试表(在MS-SQL Server 2008R2上):
CREATE TABLE [dbo].[LuceeTest01](
[Field1] [nvarchar](50) NULL,
[Field2] [nvarchar](50) NULL ) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
在Lucee中,我用作数据源:Microsoft SQL Server(供应商Microsoft),称为“一个”
这是我的测试应用程序:
<cfset Form.Field1 = "Field1">
<cfset Form.Field2 = "Field2">
<cfoutput>
<cfinsert datasource="one"
tablename="LuceeTest01"
formfields="Field1, Field2">
</cfoutput>
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我得到同样的错误。知道为什么吗?完整的跟踪在这里:https : //justpaste.it/6k0hw
谢谢!
编辑1:很
好奇。我尝试使用“用于MS SQL Server和Sybase的jTDS Type 4 JDBC驱动程序”作为数据源驱动程序,现在错误是:
对象限定符的数据库名称部分必须是当前数据库的名称。
这可以追溯到以下语句:
{call []..sp_columns 'LuceeTest01', '', '', 'null', 3}
Run Code Online (Sandbox Code Playgroud)
当我在Microsoft SQL Server Management Studio中尝试此操作时,出现相同的错误。但是,当我指定数据库名称(“ one”作为第三个参数)时,MS SQL SMS中没有错误。
EXEC sp_columns 'LuceeTest01', '', 'one', 'null', 3
Run Code Online (Sandbox Code Playgroud)
Lucee不应从数据源配置中获取此参数吗?
编辑2: …
我想使用 lucee/coldfusion 发出 API 请求。
我像这样设置我的令牌请求:
cfhttp(
url="[myurl]"
method="POST"
result="token"
) {
cfhttpparam(type="header" name="host" value="[url]");
cfhttpparam(type="body" name="client_id" value="[id]");
cfhttpparam(type="body" name="client_secret" value="[secret]");
cfhttpparam(type="body" name="grant_type" value="[credentials]");
cfhttpparam(type="body" name="scope" value="[url]");
};
Run Code Online (Sandbox Code Playgroud)
但错误消息告诉我需要包含“grant_type”,所以我的正文似乎没有正确发送。
有人可以帮我吗?
编辑:
我也尝试过这个:
var body = {
"host": "[url]",
"client_id": "[id]",
"client_secret": "[secret]",
"grant_type": "[credentials]",
"scope": "[url]"
}
// Token
cfhttp(
url="[url]"
method="POST"
result="token"
) {
cfhttpparam(type="header" name="host" value="[url]");
cfhttpparam(type="body" value="#body.toJson()#");
};
Run Code Online (Sandbox Code Playgroud) lucee ×10
coldfusion ×9
cfml ×4
railo ×4
cfc ×2
apache-poi ×1
cfhttp ×1
excel ×1
list ×1
sql-server ×1
t-sql ×1