2017-04-02 6 views
1
<cffunction name="QueryToCSV" access="public" returntype="string" output="false" hint="I take a query and convert it to a CSV string."> 
.... 
</cffunction> 

<cfquery name="pull_call_label" datasource="callmeasurement"> 
    SELECT refname, lskinid FROM lskin where isactive = 1 
</cfquery> 

<cfif isDefined('URL.export')> 

<cfset strFilePath = GetTempFile(GetTempDirectory(),"excel_") /> 
<!--- Write the excel data to the file. ---> 

<cffile action="WRITE" file="#strFilePath#" output="#QueryToCSV(pull_call_label, "refname, lskinid")#"/> 

<cfheader name="Content-Disposition" value="attachment; filename=report.csv"/> 
<cfcontent type="application/csv" file="#strFilePath#" deletefile="true"/> 

</cfif> 

<cfoutput> 
    <a href="#CGI.script_name#?export=csv">export</a> 
</cfoutput> 

このコードは、「staff-report.cfm」というファイルにあり、テスト環境と同じように機能します。私のテスト環境では私はこのファイルしか持っていません。 「エクスポート」ボタンをクリックすると、クエリの結果を含むCSVファイルが自動的に作成され、ダウンロードされます。cfincludeを使用してマスターページから呼び出したページがCSVにエクスポートされない

実際のプロジェクトでは、 "staff-report.cfm"というファイルが "report-viewer.cfm"という別のファイルに(cfincludeを使って)含まれているので、 "staff-report.cfm"というファイルは次のようになります。 report-viewer.cfmファイルから呼び出されます。今、私は "エクスポート"ボタンを押すと、ファイルをダウンロードしませんが、私は "report-viewer.cfm"ページにCSVファイルの内容を貼り付けます。 ColdFusionでこれを達成する方法を誰かが助けてくれると本当に感謝しています。つまり、「エクスポート」ボタンを押すと、ブラウザにCSVファイルをダウンロードさせ、作成せずに、それを呼び出した「report-viewer.cfm」ファイルに戻すことができますか? 注:私のシナリオでは、cfincludeタグを取り除いて同じページにすべてを置く方法はありません。

+0

test-viewer.cfmをテスト環境にコピーしてください。 staff-report.cfmがインクルードファイルのときに実際に実行されているコードを確認できるように標準的なトラブルシューティングを実行します。 –

+0

report-viewer.cfmは、基本的に3行のコードページです。主にヘッダーとして使用されます。すべてのロジックはstaff-report.cfmにあります。私はこの問題の鍵は、CSVファイルをダウンロードしてマスターページに戻らないようブラウザに指示する方法を見つけることだと思います。私はちょうどそれを行う方法を知らない。 – DoArNa

答えて

2

もしこれがcfincludingなら、すでに他のコンテンツがブラウザに配信されており、ヘッダーは既に完成しているはずです。出力パイプラインをリセットせずに追加するのは遅すぎます。試してみてください:

<cfcontent reset="true"> 
関連する問題