Conditional Cfloop code to place AND at first loop - coldfusion

Using the following query, I am trying to do a simple case here when the first record it encounters it should basically add "AND" and for the remaining conditions, I want to add OR
Here is my try
<cfif isDefined('age') and len(trim(age)) and age neq '-1'>
<cfset age = trim(htmlEditFormat(lcase(age)))>
<cfloop list="#age#" index="k">
or age between #ListFirst(k,'-')# and #ListLast(k,'-')#
</cfloop>
</cfif>
trying to make it work like this
and (age between 18 and 20
or age between 20 and 25
or age between 25 and 30)
I am not getting where I should add a condition to add parenthesis and the AND operator.

You could do something as similar as adding a false statement and then looping through everything else as needed
<cfif isDefined('age') and len(trim(age)) and age neq '-1'>
<cfset age = trim(htmlEditFormat(lcase(age)))>
AND (1 = 2 --always returns false
<cfloop list="#age#" index="k">
OR age between #ListFirst(k,'-')# and #ListLast(k,'-')#
</cfloop>
)
</cfif>
This is what you were trying to do
<cfif isDefined('age') and len(trim(age)) and age neq '-1'>
<cfset age = trim(htmlEditFormat(lcase(age)))>
AND (
<cfloop list="#age#" index="k">
<cfif listFirst(age) NEQ k> OR </cfif> --if it's not the first iteration, add the OR
age between #ListFirst(k,'-')# and #ListLast(k,'-')#
</cfloop>
)
</cfif>

An alternative that doesn't require an if block and would work for any type of loop:
<cfif isDefined('age') and len(trim(age)) and age neq '-1'>
<cfset age = trim(htmlEditFormat(lcase(age)))>
<cfset expressionSeparator = "">
AND (
<cfloop list="#age#" index="k">
#expressionSeparator#
age between #ListFirst(k,'-')# and #ListLast(k,'-')#
<cfset expressionSeparator = " or ">
</cfloop>
)
</cfif>

Related

Adding AND statement to ColdFusion query

I am trying to add AND ActiveFlag = 'Y' (value in same table as CommitteeRoleCode), but all my attempts either brake it or are ignored. Would anyone be kind enough to assist?
Thanks for your time!
<cfparam name="attributes.Address" default="">
<cfparam name="attributes.CommitteeID" default="0">
<cfparam name="attributes.AddressListName" default="">
<cfif Len(Trim(attributes.CommitteeID)) EQ 0>
<cfset attributes.CommitteeID = 0>
</cfif>
<cfif Len(Trim(attributes.Address))>
<cfset result = "">
<cfloop list="#attributes.Address#" index="i">
<cfif Refind("\[{1}.+\]{1}", i)>
<!---looking for the 'ALL' member type to grab all categories--->
<cfif i EQ "[ALL]">
<cfset l_where = "a.CommitteeRoleCode IS NOT NULL AND c.EmailAddress IS NOT NULL">
<cfelse>
<cfset l_where = "a.CommitteeRoleCode=#Chr(39)##ReReplace(i, "\[|\]", "", "ALL")##Chr(39)# AND c.EmailAddress IS NOT NULL">
</cfif>
<cfquery datasource="#application.datasource#" name="MemberTypeEmails">
Select c.EmailAddress
from (Committee_Role_Ref as a Inner Join Committee_Member as b on a.CommitteeRoleCode=b.CommitteeRoleCode)
Inner Join Contact as c on b.ContactID=c.ContactID
Where #ReReplace(l_where, "\'\'", "'", "ALL")#
AND b.CommitteeID=#attributes.CommitteeID#
</cfquery>
<cfloop query="MemberTypeEmails">
<cfif ReFind("[^#chr(13)##chr(10)##chr(9)##chr(32)#]#{1}.+\..+", EmailAddress)>
<cfif Len(Trim(result))>
<cfset result = result & "," & EmailAddress>
<cfelse>
<cfset result = EmailAddress>
</cfif>
</cfif>
</cfloop>
<cfelseif ReFind(".+#{1}.+\..+", i)>
<cfif Len(Trim(result))>
<cfset result = result & "," & i>
<cfelse>
<cfset result = i>
</cfif>
</cfif>
</cfloop>
<cfset "caller.#attributes.AddressListName#" = result>
</cfif>
You say you are trying to add AND ActiveFlag = 'Y' (value in same table as CommitteeRoleCode). However, the value CommitteeRoleCode appears in two tables and I know this because of this part of the query
a.CommitteeRoleCode = b.CommitteeRoleCode
My suggestion would be to find out which table the ActiveFlag is really in and then prefix it accordingly in the query with either the a. or b. ie
AND a.ActiveFlag = 'Y'
or
AND b.ActiveFlag = 'Y'
Then place your AND clause where indicated below. But if you want more help you should also post what error message you are receiving.
<cfquery datasource="#application.datasource#" name="MemberTypeEmails">
Select c.EmailAddress
from (Committee_Role_Ref as a Inner Join Committee_Member as b on a.CommitteeRoleCode=b.CommitteeRoleCode)
Inner Join Contact as c on b.ContactID=c.ContactID
Where #ReReplace(l_where, "\'\'", "'", "ALL")#
AND b.CommitteeID=#attributes.CommitteeID#
-- AND a. or b. ActiveFlag goes here
AND a.ActiveFlag = 'Y'
</cfquery>

How to increase variable number using loop?

In Coldfusion, how do I increase a variable number by 1 for 5 loops?
I tried the following:
<cfset num = 19001>
<cfoutput>
<cfloop index="i" from="#num#" to="5">
#num#
</cfloop>
</cfoutput>
But this is not working.
You can do it like this:
<cfset num = 19001>
<cfoutput>
<cfloop index="i" from="#num#" to="#num+5#">
#i#
</cfloop>
</cfoutput>
You could simply loop from 1 to 5 and add 1 to your base number each time. Then your starting number can be anything and you don't need to calculate your end value ahead of time.
<cfset num = 19001>
<cfoutput>
<cfloop index="i" from="1" to="5">
<cfset num = num + 1>
#num#
</cfloop>
</cfoutput>

Split and Sort an Array by date, getting blank array places

I am just confusing myself with this one. I have a data log that is saved on the database as something like this:
Log-Date: 10/26/2012. Record created. Admission Date: 08/01/2012
Log-Date: 06/20/2013 Discharged. Discharge Date:10/15/2012
Reason for Discharge:01 - (routine discharge).
<!--- all other tracking info --->
I am trying to pull from this log only the discharges and sort/filter them by date. This log is saved in the database as one column varchar(MAX). I need to sort this data and only pull the discharge dates / reason using regex and then apply a filter. The end product should end up with me putting that array in a table with PATIENT | DISCHARGE DATE | DISCHARGE REASON My code right now is giving me some errors as it is leaving me with some empty array values. My question is that I need to remove those blank values and sort by the date, but I am unsure where to begin.
<cfquery name="getDischarge" datasource="#this.dsn#">
select PatientsName, LogData from Patient
</cfquery>
<cfoutput query="getDischarge" group="PatientsName">
<cfif LogData neq "">
<cfsavecontent variable="str">
#LogData#
</cfsavecontent>
<cfset possibilities = reMatch("Discharge Date?:(\d\d?/\d\d?/\d{4})\s*Reason for Discharge:\d* - ((?:(?!Log-Date:).)*)", str)>
<cfset dateArray = ArrayNew(2)>
<cfloop index="w"
array="#possibilities#">
<cfif w NEQ "">
<!--- create 1 dimensional temp array to hold DATE | REASON --->
<cfset tempArray = ArrayNew(1)>
<!--- trim our regex to have only the date & then DateFormat --->
<cfset theDate = #Mid(w, 16, 11)#>
<cfset formatDate = #dateformat('#thedate#','mm-dd-yyyy')#>
<!--- use our regex to find the reason for discharge --->
<cfset theReason = reMatch("Reason for Discharge:\d* - ((?:(?!Log-Date:).)*)", str)>
<!--- append our DATE | REASON to 1d temp array --->
<cfset ArrayAppend(tempArray, '#formatDate#')>
<cfset ArrayAppend(tempArray, '#theReason#')>
<!--- append our 1d array to our 2d array to output matching DATE | REASON --->
<cfset #ArrayAppend(dateArray, '#tempArray#')#>
</cfif>
</cfloop>
<cfdump var="#dateArray#">
</cfif> <!--- logdata neq "" --->
</cfoutput>
To me, logically, this should work and omit blank values, but this is what I get when I dump this data:
Looks like you are struggling with the Jakarta ORO regular expression engine that is used in ColdFusion. reMatch/reMatchNoCase are terrible when it comes to capturing. Java on the other hand offers the POSIX regular expression engine.
<cfset data = [
"Log-Date: 10/26/2012. Record created. Admission Date: 08/01/2012
Log-Date: 06/20/2013 Discharged. Discharge Date:10/15/2012
Reason for Discharge:01 - (routine discharge).
More stuff...",
"Log-Date: 10/26/2012. Record created. Admission Date: 08/01/2012
Log-Date: 06/20/2013 Discharged. Discharge Date:10/16/2012
Reason for Discharge:lorem ipsum."
]>
<cfset result = queryNew("DISCHARGE_DATE,DISCHARGE_REASON", "VARCHAR,VARCHAR")>
<cfloop array="#data#" index="line">
<cfset dischargeDate = reMatchGroupNoCase("Discharge Date:([0-9]{2}/[0-9]{2}/[0-9]{4})", line)>
<cfset dischargeReason = reMatchGroupNoCase("Reason for Discharge:([^\n]*)", line)>
<cfset hasDate = (arrayLen(dischargeDate) eq 1)>
<cfset hasReason = (arrayLen(dischargeReason) eq 1)>
<cfif hasDate or hasReason>
<cfset rowIndex = queryAddRow(result, 1)>
<cfif hasDate and isDate(dischargeDate[1])>
<cfset querySetCell(result, "DISCHARGE_DATE", dateFormat(dischargeDate[1], "yyyy-mm-dd"), rowIndex)>
</cfif>
<cfif hasReason>
<cfset querySetCell(result, "DISCHARGE_REASON", dischargeReason[1], rowIndex)>
</cfif>
</cfif>
</cfloop>
<cfquery name="orderedResult" dbType="query">
SELECT
*
FROM
[result]
ORDER BY
[DISCHARGE_DATE] ASC
</cfquery>
<cfdump var="#orderedResult#">
And here is the function you need:
<cffunction name="reMatchGroupNoCase" access="public" output="false" returnType="array">
<cfargument name="regex" type="string" required="true">
<cfargument name="value" type="string" required="true">
<cfset LOCAL.result = []>
<cfset LOCAL.Pattern = createObject("java", "java.util.regex.Pattern")>
<cfset ARGUMENTS.regex = LOCAL.Pattern.compile(ARGUMENTS.regex, bitOr(LOCAL.Pattern["CASE_INSENSITIVE"], LOCAL.Pattern["UNICODE_CASE"]))>
<cfset LOCAL.buffer = ARGUMENTS.regex.matcher(toString(ARGUMENTS.value))>
<cfset LOCAL.length = LOCAL.buffer.groupCount()>
<cfloop condition="LOCAL.buffer.find()">
<cfloop from="1" to="#LOCAL.length#" index="LOCAL.i">
<cfset LOCAL.value = LOCAL.buffer.group(
javaCast("int", LOCAL.i)
)>
<cfif isNull(LOCAL.value)>
<cfcontinue>
</cfif>
<cfset LOCAL.result.add(LOCAL.value)>
</cfloop>
</cfloop>
<cfreturn LOCAL.result>
</cffunction>
I recommend this approach:
with q1 as (select 'Log-Date: 10/26/2012. Record created. Admission Date: 08/01/2012
Log-Date: 06/20/2013 Discharged. Discharge Date:10/15/2012
Reason for Discharge:01 - (routine discharge). ' logData
)
select substring(logData, patindex('%Admission Date: %', logdata) + 16
, 10) admitDate
from q1
where logData like '%Discharge Date:%'
That returns 08/01/2012. You may have some complications for a variety of reasons, but the general idea should work.

Coldfusion 10 cfloop errors

I am getting an error after upgrade from coldfusionOX to coldfusion 10.
Error Occurred While Processing Request Complex object types cannot be
converted to simple values.
The expression has requested a variable or an intermediate expression
result as a simple value. However, the result cannot be converted to a
simple value. Simple values are strings, numbers, boolean values, and
date/time values. Queries, arrays, and COM objects are examples of
complex values. The most likely cause of the error is that you tried
to use a complex value as a simple one. For example, you tried to use
a query variable in a cfif tag.
It occurs at line " cfloop index="local.thisRight" list="#rights#" ". It seems like ColdFusion does not like the "rights" here.
Anyone can give me some help? Thanks so much.
<cfif local.profile.rights.profile.self is not "">
<cfquery name="local.getAffiliations" datasource="#Request.readerDSN#">
SELECT tblPersonsToAffiliations.affiliationID, tblPersonsToAffiliations.rights, tblAffiliations.affiliationType, tblPersonsToAffiliations.relationshipType
FROM tblPersonsToAffiliations INNER JOIN tblAffiliations
ON tblPersonsToAffiliations.affiliationID = tblAffiliations.affiliationID
WHERE tblPersonsToAffiliations.personID IN (#local.profile.rights.profile.self#)
AND (tblPersonsToAffiliations.archived IS NULL
OR tblPersonsToAffiliations.archived = '')
</cfquery>
<cfif local.getAffiliations.recordCount is not 0>
<cfloop query="local.getAffiliations">
<cfif local.getAffiliations.relationshipType is "interested">
<cfset local.thisRelationshipType = "provisionalMember">
<cfif IsDefined("local.profile.rights.#affiliationType#.#local.thisRelationshipType#")>
<cfset local.profile.rights[affiliationType][local.thisRelationshipType] = ListAppend(local.profile.rights[affiliationType][local.thisRelationshipType], affiliationID)>
<cfelse>
<cfset local.profile.rights[affiliationType][thisRelationshipType] = affiliationID>
</cfif>
<cfelse>
<cfset local.thisRelationshipType = "fullMember">
<cfif IsDefined("local.profile.rights.#affiliationType#.#local.thisRelationshipType#")>
<cfset local.profile.rights[affiliationType][local.thisRelationshipType] = ListAppend(local.profile.rights[affiliationType][local.thisRelationshipType], affiliationID)>
<cfelse>
<cfset local.profile.rights[affiliationType][local.thisRelationshipType] = affiliationID>
</cfif>
<cfif isNull(rights)>
<cfelse>
<cfloop index="local.thisRight" list="#rights#" >
<cfif IsDefined("local.profile.rights.#affiliationType#.#local.thisRight#")>
<cfset local.profile.rights[affiliationType][local.thisRight] = ListAppend(local.profile.rights[affiliationType][local.thisRight], affiliationID)>
<cfelse>
<cfset local.profile.rights[affiliationType][local.thisRight] = affiliationID>
</cfif>
</cfloop>
</cfif>
</cfif>
</cfloop>
</cfif>
</cfif>
A bit earlier in your code you do this:
<cfif local.getAffiliations.relationshipType is "interested">
I think you need the same query name prefix in front of "rights" that is used when evaluating "relationshipType".
Try this:
#local.getAffiliations.rights#
HTH!
I am betting it is failing on this line:
<cfloop index="local.thisRight" list="rights" >
You are attempting to use the string "rights" as a list. My first reaction would be that you need to make that:
<cfloop index="local.thisRight" list="#rights#" >

Issues with CFZip functionality

I have the following which is working half way. I am trying to CFZip the contents of a downloaded Excel file but there is one problem involved. The code below shows that there are 3 tickets. 1 main ticket and 2 tickets that are the extended answers of the main ticket. Attachments are allowed on all tickets, the main ones and the children's too.
When I try to download the Excel file, I am also trying to download two folders that should be inside the Zip file. One that should be pointing to the child and one to the parent. Both should have their respective attachments. I am missing some big piece of code here.
Here is the code:
<cfquery datasource="#request.dsn#" name="mainTickets">
SELECT s.ticketID,CAST(s.DateRaised as
varchar) AS DateRaised,s.Summary,s.RaisedBy,s.AssignedTo,
st.Status
,CAST(s.LastUpdatedDate as varchar),CAST(s.TimeSpent as float) as
timespent,stt.TicketType,s.LastUpdatedComment
from supportTickets s
inner join SupportStatusType st on st.statusID = s.status
inner join supportTicketType stt on stt.TicketTypeID = s.TicketType
where s.ticketID IN (<cfqueryparam cfsqltype="cf_sql_numeric" value="#url.ticketID#" list="yes">
)
</cfquery>
<cfset filename = "Detailed_Ticket_Summary" & dateformat(now(), 'mm_dd_yyyy') & "." & "xls">
<cfset s = spreadsheetNew("Tickets Summary")>
<!--- Add header row --->
<cfset spreadsheetAddRow(s, "TicketID,Date Raised,Summary,Raised By,AssignedTo,Status,Last Updated Date, Time Spent, Ticket Type, Last Updated Comment, Details")>
<!--- format header --->
<cfset spreadsheetFormatRow(s, #format1#, 1)>
<cfset spreadsheetAddRows(s, mainTickets)>
<cfset SpreadsheetFormatColumn(s, {textwrap=true}, 10)>
<cfset SpreadsheetFormatColumn(s, {textwrap=true}, 3)>
<cfloop from="1" to="#mainTickets.recordcount#" index="i">
<cfset k = i + 1>
<cfset SpreadsheetSetCellFormula(s, 'HYPERLINK("[Tickets Summary]TicketID_#mainTickets.ticketID#!A1","Click Here")',#k#,11)>
<cfset SpreadsheetFormatCell(s, {bold=true, color='blue', bottomborder='dotted'}, #k#, 11)>
</cfloop>
<cfif mainTickets.recordcount>
<cfoutput query="mainTickets">
<cfquery datasource="#request.dsn#" name="fetchTickets">
SELECT s.ticketID,s.ticketNumber,CAST(s.DateRaised as
varchar),s.Summary,s.RaisedBy,s.AssignedTo,
st.Status
,CAST(s.LastUpdatedDate as varchar),s.TimeSpent,stt.TicketType,s.LastUpdatedComment
from supportTicketsHistory s
inner join SupportStatusType st on st.statusID = s.status
inner join supportTicketType stt on stt.TicketTypeID = s.TicketType
where s.ticketnumber = <cfqueryparam cfsqltype="cf_sql_numeric" value="#mainTickets.ticketID#">
</cfquery>
<!--- Add query --->
<cfif fetchTickets.recordcount>
<cfset SpreadsheetCreateSheet(s, 'TicketID_#ticketID#')>
<cfset SpreadsheetSetActiveSheet(s, 'TicketID_#ticketID#')>
<!--- Add header row --->
<cfset spreadsheetAddRow(s, "TicketID,Ticket Number,Date Raised,Summary,Raised By,AssignedTo,Status,Last Updated Date, Time Spent, Ticket Type, Last Updated Comment")>
<!--- format header --->
<cfset spreadsheetFormatRow(s, #format1#, 1)>
<cfset SpreadsheetAddRows(s, fetchTickets)>
<cfset SpreadsheetFormatColumn(s, {textwrap=true}, 11)>
<cfset SpreadsheetSetActiveSheetNumber(s, 1)>
<cfset ielements = ValueList(mainTickets.ticketID)>
<cfquery datasource="#request.dsn#" name="getAttachments">
SELECT Attach_FileName,Attach_FileSize,Attach_Time,SupportTicketID
FROM support_attachments
WHERE SupportTicketID = #val(fetchTickets.ticketnumber)#
</cfquery>
<cfquery datasource="#request.dsn#" name="getChkAttachments">
SELECT Support_Attach_FileName,Support_Attach_FileSize,Support_Attach_Time,
Support_SupportTktHistoryID,Support_SupportTicketID
FROM support_attach_History
WHERE Support_SupportTicketID = #val(fetchTickets.ticketnumber)#AND Support_SupportTktHistoryID
in (SELECT ss.ticketID FROM supportTicketsHistory ss
WHERE ss.ticketNumber = #val(fetchTickets.ticketnumber)#)
</cfquery>
<!--- handle the attachments for the Ticket in ZIp Format --->
<cfset currentDirectory = GetDirectoryFromPath(GetTemplatePath()) & getAttachments.SupportTicketID>
<cfif !DirectoryExists(currentDirectory)>
<cfdirectory action="create" directory="#currentDirectory#">
</cfif>
<cfset currentDirectory2 = GetDirectoryFromPath(GetTemplatePath()) & getChkAttachments.Support_SupportTktHistoryID>
<cfif !DirectoryExists(currentDirectory2)>
<cfdirectory action="create" directory="#currentDirectory2#">
</cfif>
<cfif getAttachments.recordcount>
<cfloop query="getAttachments">
<cffile action="copy"
source="#ExpandPath('attachments/#getAttachments.Attach_FileName#')#"
destination="#currentDirectory#\">
</cfloop>
</cfif>
<cfif getChkAttachments.recordcount>
<cfloop query="getChkAttachments">
<cffile action="copy"
source="#ExpandPath('attachments/#getChkAttachments.Support_Attach_FileName#')#"
destination="#currentDirectory2#\">
</cfloop>
</cfif>
<!--- handle the attachments for the Ticket in ZIP Format --->
<cfset spreadsheetWrite(s, filename, true)>
<cfset dest2 = getTempDirectory() & "/" & "Tickets" & ".zip">
<cfzip action="zip" file="#dest2#">
<cfdirectory action="list" directory="#currentDirectory#/" name="listRoot">
<cfdirectory action="list" directory="#currentDirectory2#/" name="listRoot2">
<cfset lstFiles = ValueList(listRoot.name)>
<cfset lstFiles2 = ValueList(listRoot2.name)>
<cfloop list="#lstFiles#" index="k">
<cfzipparam source="#currentDirectory#/#k#" recurse="yes" filter="*"/>
</cfloop>
<cfloop list="#lstFiles2#" index="kk">
<cfzipparam source="#currentDirectory2#/#kk#" recurse="yes" filter="*"/>
</cfloop>
</cfzip>
</cfif>
</cfoutput>
</cfif>
<cfheader name="Content-Disposition" value="attachment;filename=#ListFirst(filename,'.')#.zip">
<cfcontent file="#dest2#" type="application/zip" deletefile="true" reset="true">
I sorted it out here is the way I have done it.
<cfquery datasource="#request.dsn#" name="mainTickets">
SELECT s.ticketID,CAST(s.DateRaised as
varchar) AS DateRaised,s.Summary,s.RaisedBy,s.AssignedTo,
st.Status
,CAST(s.LastUpdatedDate as varchar),CAST(s.TimeSpent as float) as timespent,stt.TicketType,s.LastUpdatedComment
from supportTickets s
inner join SupportStatusType st on st.statusID = s.status
inner join supportTicketType stt on stt.TicketTypeID = s.TicketType
where s.ticketID IN (<cfqueryparam cfsqltype="cf_sql_numeric" value="#url.ticketID#" list="yes">)
</cfquery>
<cfset filename = "Detailed_Ticket_Summary" & dateformat(now(),'mm_dd_yyyy') & "." & "xls">
<cfset s = spreadsheetNew("Tickets Summary")>
<!--- Add header row --->
<cfset spreadsheetAddRow(s, "TicketID,Date Raised,Summary,Raised By,AssignedTo,Status,Last Updated Date, Time Spent, Ticket Type, Last Updated Comment, Details")>
<!--- format header --->
<cfset spreadsheetFormatRow(s,#format1#,1)>
<cfset spreadsheetAddRows(s, mainTickets)>
<cfset SpreadsheetFormatColumn(s,{textwrap=true},10)>
<cfset SpreadsheetFormatColumn(s,{textwrap=true},3)>
<cfloop from="1" to="#mainTickets.recordcount#" index="i">
<cfset k = i+1>
<cfset SpreadsheetSetCellFormula(s, 'HYPERLINK("[Tickets Summary]TicketID_#mainTickets.ticketID#!A1","Click Here")',#k#,11)>
<cfset SpreadsheetFormatCell(s,{bold=true,color='blue',bottomborder='dotted'},#k#,11)>
</cfloop>
<cfif mainTickets.recordcount>
<cfoutput query="mainTickets">
<cfquery datasource="#request.dsn#" name="fetchTickets">
SELECT s.ticketID,s.ticketNumber,CAST(s.DateRaised as
varchar),s.Summary,s.RaisedBy,s.AssignedTo,
st.Status
,CAST(s.LastUpdatedDate as varchar),s.TimeSpent,stt.TicketType,s.LastUpdatedComment
from supportTicketsHistory s
inner join SupportStatusType st on st.statusID = s.status
inner join supportTicketType stt on stt.TicketTypeID = s.TicketType
where s.ticketnumber = <cfqueryparam cfsqltype="cf_sql_numeric" value="#mainTickets.ticketID#">
</cfquery>
<!--- Add query --->
<cfset Temp = GetDirectoryFromPath(GetTemplatePath()) & 'temp'>
<cfif !DirectoryExists(Temp)>
<cfdirectory action="create" directory="#Temp#">
</cfif>
<cfif fetchTickets.recordcount>
<cfset SpreadsheetCreateSheet(s , 'TicketID_#ticketID#')>
<cfset SpreadsheetSetActiveSheet(s , 'TicketID_#ticketID#')>
<!--- Add header row --->
<cfset spreadsheetAddRow(s, "TicketID,Ticket Number,Date Raised,Summary,Raised By,AssignedTo,Status,Last Updated Date, Time Spent, Ticket Type, Last Updated Comment")>
<!--- format header --->
<cfset spreadsheetFormatRow(s,#format1#,1)>
<cfset SpreadsheetAddRows(s , fetchTickets)>
<cfset SpreadsheetFormatColumn(s,{textwrap=true},11)>
<cfset SpreadsheetSetActiveSheetNumber(s, 1)>
<cfset ielements = ValueList(mainTickets.ticketID)>
<cfquery datasource="#request.dsn#" name="getAttachments">
SELECT Attach_FileName,Attach_FileSize,Attach_Time,SupportTicketID
FROM support_attachments
WHERE SupportTicketID = #val(fetchTickets.ticketnumber)#
</cfquery>
<cfquery datasource="#request.dsn#" name="getChkAttachments">
SELECT Support_Attach_FileName,Support_Attach_FileSize,Support_Attach_Time,
Support_SupportTktHistoryID,Support_SupportTicketID
FROM support_attach_History
WHERE Support_SupportTicketID = #val(fetchTickets.ticketnumber)#
AND Support_SupportTktHistoryID in (SELECT ss.ticketID FROM supportTicketsHistory ss
WHERE ss.ticketNumber = #val(fetchTickets.ticketnumber)#)
</cfquery>
<cfif getAttachments.recordcount>
<!--- handle the attachments for the Ticket in ZIp Format --->
<cfset currentDirectory = "MainTicketID_" & "Number_" & getAttachments.SupportTicketID & "_Attachments">
<cfdump var="#temp#\#currentDirectory#">
<cfif !DirectoryExists("#temp#\#currentDirectory#")>
<cfdirectory action="create" directory="#temp#\#currentDirectory#">
</cfif>
<cfdump var="#currentDirectory#">
<cfif getAttachments.recordcount>
<cfloop query="getAttachments">
<cffile action="copy" source="#ExpandPath('attachments/#getAttachments.Attach_FileName#')#"
destination="#temp#\#currentDirectory#\">
</cfloop>
</cfif>
</cfif>
<cfif getChkAttachments.recordcount>
<cfset currentDirectory2 = "MainTicket_" & getChkAttachments.Support_SupportTicketID & "_Updated_Child_" & getChkAttachments.Support_SupportTktHistoryID & "_Attachments">
<cfif !DirectoryExists("#temp#\#currentDirectory2#")>
<cfdirectory action="create" directory="#temp#\#currentDirectory2#">
</cfif>
<cfif getChkAttachments.recordcount>
<cfloop query="getChkAttachments">
<cffile action="copy" source="#ExpandPath('attachments/#getChkAttachments.Support_Attach_FileName#')#"
destination="#temp#\#currentDirectory2#\">
</cfloop>
</cfif>
</cfif>
<!--- handle the attachments for the Ticket in ZIP Format --->
<cfset spreadsheetWrite(s, filename, true)>
<cfset dest2 = getTempDirectory() & "/" & "Tickets" & ".zip">
<cfzip action="zip" file="#dest2#" overwrite="true">
<cfzipparam source="#temp#"/>
<cfzipparam source="#filename#"/>
</cfzip>
</cfif>
</cfoutput>
</cfif>
<cfdirectory action="delete" directory="#temp#" recurse="yes">
<cfheader name="Content-Disposition" value="attachment;filename=#ListFirst(filename,'.')#.zip">
<cfcontent file="#dest2#" type="application/zip" deletefile="true" reset="true">
This can help someone instead how to nest the cfzip functionality