I'm having problems building an HTML e-mail in one template and passing it
back as a variable to the calling template to then send it.
The GenerateInvoice tag builds the Invoice as a webpage, ready to send with
CFMAIL and TYPE="HTML". That bit works fine. If you output
#variables.Invoice# to the page, you get a page that displays as expected
and that HTMLValidator says is OK.
<CFMODULE
TEMPLATE="/customtags/GenerateInvoice.cfm"
InvoiceID="#variables.InvoiceID#"
Format="HTML">
<CFMAIL
TO="[EMAIL PROTECTED]"
FROM="[EMAIL PROTECTED]"
SUBJECT="Invoice"
TYPE="HTML">#variables.Invoice#</CFMAIL>
Running the template produces a blank HTML e-mail which (if you do View
Source in Outlook) appears to have no content. The To, From and Subject
Fields are fine.
If you delete TYPE="HTML" and set variable.Invoice in GenerateInvoice to any
old rubbish, it works fine.
Does anyone have any ideas what might be happening? GenerateInvoice is
below...
Thanks if you can offer any advice.
GenerateInvoice.cfm
========================
<CFPARAM NAME="attributes.InvoiceID" DEFAULT="">
<CFPARAM NAME="attributes.Format" DEFAULT="HTML">
<!--- Get the main invoice information --->
<CFQUERY DATASOURCE="#request.DataSource#" NAME="GetInvoice">
SELECT Invoices.Company,
Invoices.CustomerID,
Invoices.Customer,
Invoices.InvoiceDate
FROM Invoices
WHERE Invoices.InvoiceID = #attributes.InvoiceID#;
</CFQUERY>
<!--- Get the ClientUID from the database if the Invoice stored the
CustomerID --->
<CFIF Len(GetInvoice.CustomerID)>
<CFQUERY DATASOURCE="#request.DataSource#" NAME="GetClientUID">
SELECT Customers.ClientUID
FROM Customers
WHERE Customers.CustomerID = #GetInvoice.CustomerID#;
</CFQUERY>
</CFIF>
<!--- Get the main invoice information --->
<CFQUERY DATASOURCE="#request.DataSource#" NAME="GetInvoiceItems">
SELECT InvoiceItems.*
FROM InvoiceItems
WHERE InvoiceItems.InvoiceID = #attributes.InvoiceID#;
</CFQUERY>
<CFSET variables.Invoice = "">
<CFSET variables.TotalNet = 0>
<CFSET variables.TotalVAT = 0>
<!--- Build the invoice in the specified format --->
<CFSWITCH EXPRESSION="#attributes.Format#">
<CFCASE VALUE="plaintext">
</CFCASE>
<CFCASE VALUE="HTML">
<CFSET variables.Invoice = variables.Invoice &
"<HTML><HEAD><TITLE>Invoice</TITLE></HEAD><BODY BGCOLOR=""##FFFFFF"">">
<!--- Preliminary Invoice information --->
<CFSET variables.Invoice = variables.Invoice & "<H3>Invoice</H3>">
<CFSET variables.Invoice = variables.Invoice & "<P><B>From</B><BR>" &
Replace(GetInvoice.Company, request.CrLf, "<BR>", "all") & "</P>">
<CFSET variables.Invoice = variables.Invoice & "<P><B>To</B><BR>" &
Replace(GetInvoice.Customer, request.CrLf, "<BR>", "all") & "</P>">
<CFSET variables.Invoice = variables.Invoice & "<P><B>Invoice No:</B> " &
attributes.InvoiceID & "<BR>">
<CFSET variables.Invoice = variables.Invoice & "<B>Customer No:</B> " &
GetClientUID.ClientUID & "</P>">
<!--- Output an HTML table with one row per Invoiceitem --->
<CFSET variables.Invoice = variables.Invoice &
"<TABLE><TR><TH><P>Details</P></TH><TH><P>Net Amount</P></TH><TH><P>VAT
Amount</P></TH></TR>">
<CFLOOP QUERY="GetInvoiceItems">
<CFSET variables.Invoice = variables.Invoice & "<TR><TD><P>" &
InvoiceItem>
<!--- If there is a period applicable for this record, output it --->
<CFIF Len(PeriodFrom) AND Len(PeriodTo)>
<CFSET variables.Invoice = variables.Invoice & "<BR>From: " &
DateFormat(PeriodFrom, "dd/mm/yyyy") & " To: " & DateFormat(PeriodTo,
"dd/mm/yyyy")>
</CFIF>
<CFSET variables.Invoice = variables.Invoice & "</P></TD>">
<CFSET variables.Invoice = variables.Invoice & "<TD><P>" &
DecimalFormat(NetAmount) & "</P></TD>">
<CFSET variables.Invoice = variables.Invoice & "<TD><P>" &
DecimalFormat(VATAmount) & "</P></TD></TR>">
<CFSET variables.TotalNet = variables.TotalNet & NetAmount>
<CFSET variables.TotalVAT = variables.TotalVAT & VATAmount>
</CFLOOP>
<!--- Output the totals --->
<CFSET variables.Invoice = variables.Invoice & "<TR><TD
COLSPAN=""3""><HR></TD></TR>">
<CFSET variables.Invoice = variables.Invoice & "<TR><TD> </TD><TD
ALIGN=""right""><P><B>Total Net</B></P></TD><TD><P>" &
DecimalFormat(variables.TotalNet) & "</P></TD></TR>">
<CFSET variables.Invoice = variables.Invoice & "<TR><TD> </TD><TD
ALIGN=""right""><P><B>Total VAT</B></P></TD><TD><P>" &
DecimalFormat(variables.TotalVAT) & "</P></TD></TR>">
<CFSET variables.Invoice = variables.Invoice & "<TR><TD
COLSPAN=""3""><HR></TD></TR>">
<CFSET variables.Invoice = variables.Invoice & "<TR><TD> </TD><TD
ALIGN=""right""><P><B>Invoice Total</B></P></TD><TD><P>" &
DecimalFormat(variables.TotalNet) & "</P></TD></TR>">
<CFSET variables.Invoice = variables.Invoice & "<TR><TD
COLSPAN=""3""><HR></TD></TR></TABLE>">
<CFSET variables.Invoice = variables.Invoice & "</BODY></HTML>">
</CFCASE>
</CFSWITCH>
<!--- Make the invoice available to the calling template --->
<CFSET caller.Invoice = variables.Invoice>
--
Aidan Whitehall <[EMAIL PROTECTED]>
Netshopper UK Ltd
Advanced Web Solutions & Services
http://www.netshopperuk.com/
Telephone +44 (01744) 648650
Fax +44 (01744) 648651
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Structure your ColdFusion code with Fusebox. Get the official book at
http://www.fusionauthority.com/bkinfo.cfm
Archives: http://www.mail-archive.com/[email protected]/
Unsubscribe: http://www.houseoffusion.com/index.cfm?sidebar=lists