我有一个生成Excel文件的函数(使用ColdFusion的电子表格函数)并将结果存储为ReportContent
。
我需要使用<cfmail>
<cfmail from="#From#" to="#To#" subject="#Subject#" type="html" >
<cfmailparam content="#ReportContent#" type="application/vnd.ms-excel" file="#FileName#" >
#Body#
</cfmail>
我的问题是,在测试中,我发现<cfmail>
命令通常会在Excel文件完全呈现之前执行,而是附加一个不可用的.tmp
文件。
我试图通过暂停执行5秒来处理这个问题,给Excel文件时间渲染:
<cfscript>
thread = CreateObject("java", "java.lang.Thread");
thread.sleep(5000);
</cfscript>
这在大多数情况下有效,但在100%的时间内无效。我现在已经将延迟时间提高到15秒 - 这适用于我当前的测试,但我不相信这是最好的策略。
在调用ReportContent
之前,有没有办法确认<cfmail>
中的Excel文件已完全呈现?
答案 0 :(得分:0)
使用这样的命名锁,看看是否有帮助:
<cflock name="some_preferably_unique_lock_name" type="exclusive" timeout="60">
<!--- code that creates and writes the Excel file to disk --->
</cflock>
<cflock name="same_preferably_unique_lock_name" type="exclusive" timeout="60">
<!--- code that mails the Excel file as attachment --->
</cflock>