coldfusion - 在 cfscript 中使用 Valuelist 不起作用
问题描述
我正在使用来自 cflib.org 的 iCalUS 函数,该函数使用 cfscript 为日历生成 iCal。一项活动可能有多个位置。这些位置来自不同的表,所以我想使用 Valuelist 来获取逗号分隔的列表。
我的代码:
<cfquery datasource="#application.dsn#" name="getEvents">
select project.project_id,omschrijving, project.naam, project.start,project.eind,room, meeting_url
from project, lp_booking, lp_locaties
where export = <cfqueryparam value="1" cfsqltype="cf_sql_bit">
and keuren is null
and project.datum >= <cfqueryparam value="#createODBCDate(Now())#" cfsqltype="cf_sql_date">
and lp_locaties.room_id = lp_booking.room_id
and lp_booking.project_id = project.project_id
order by project.datum
</cfquery>
<cfscript>
eventStr = StructNew();
function iCalUS(stEvent) {
var vCal = "";
var CRLF=chr(13)&chr(10);
var date_now = Now();
vCal = vCal & writeoutput('BEGIN:VCALENDAR'& CRLF);
vCal = vCal & writeoutput('VERSION:2.0'& CRLF);
vCal = vCal & writeoutput('PRODID:Name'& CRLF);
vCal = vCal & writeoutput('X-WR-CALNAME:SOMENAME' CRLF);
vCal = vCal & writeoutput('CALSCALE:GREGORIAN'& CRLF);
vCal = vCal & writeoutput('METHOD:PUBLISH'& CRLF);
for(i=1; i LTE getEvents.RecordCount; i=i+1){
vCal = vCal & writeoutput('BEGIN:VEVENT'& CRLF);
vCal = vCal & writeoutput('SUMMARY:'&getEvents.naam[i]& CRLF);
vCal = vCal & writeoutput('UID:'&getEvents.project_id[i]& CRLF);
vCal = vCal & writeoutput('SEQUENCE:0'& CRLF);
vCal = vCal & writeoutput('STATUS:CONFIRMED'& CRLF);
vCal = vCal & writeoutput('TRANSP:OPAQUE'& CRLF);
vCal = vCal & writeoutput('DTSTART;TZID=Europe/Amsterdam:'&reReplace(getEvents.start[i],"[-:]","","all")& CRLF);
vCal = vCal & writeoutput('DTEND;TZID=Europe/Amsterdam:'&reReplace(getEvents.eind[i],"[-:]","","all")& CRLF);
vCal = vCal & writeoutput('DTSTAMP:'&reReplace(getEvents.start[i],"[-:]","","all")& CRLF);
vCal = vCal & writeoutput('LOCATION:'&getEvents.room[i]& CRLF);
vCal = vCal & writeoutput('DESCRIPTION:'&getEvents.omschrijving[i]&'\n\n\n'&getEvents.meeting_url[i]& CRLF);
vCal = vCal & writeoutput('URL:'&application.webUrl& CRLF);
vCal = vCal & writeoutput('END:VEVENT'& CRLF);
}
vCal = vCal & writeoutput('END:VCALENDAR'& CRLF);
return Trim(vCal);
}
</cfscript>
<cfcontent type="text/calendar" reset="Yes">
<cfheader name="Content-Disposition" value="inline; filename=churchbookAgenda.ics"> <cfoutput>#iCalUS(eventStr)#</cfoutput>`
现在我想使用:
vCal = vCal & writeoutput('LOCATION:'&valuelist(getEvents.room[i])& CRLF);
当我这样做时,我得到一个错误:变量 [SomeRoomName] 不存在。当我删除 [i] 时,它可以工作,但我得到了查询中找到的所有位置。
vCal = vCal & writeoutput('LOCATION:'&valuelist(getEvents.room)& CRLF);
解决方案
评论太长了。
如果您使用标签而不是脚本,这会更容易。这将允许你这样做:
<cfoutput query = "getEvents" group = "a suitable field from your query">
code for stuff you only want to appear once
<cfoutput>
generate your list of rooms here
</cfoutput>
</cfoutput>
我不知道是否有一个与此等效的简单脚本。
编辑从这里开始
如果要使用脚本和值列表,可以在循环中使用queryExecute
with 。您可以在此处dbtype="query"
找到一个非常简单的示例。您所要做的就是将这个一般想法应用于您自己的情况。