0

大規模なシステムのワークフローの一部として 2 ページの設定がある場合、パフォーマンスの問題があります。このセクションは、ユーザーが独自のパラメーターを選択できるようにするレポートのレンダリング専用です。

Page1.aspxレポートのパラメーター情報を収集します。フォームで送信された情報を受け取り、それを検証します。OK と検証された場合は、選択内容を XML として DB に保存Page2.aspxし、クエリ文字列に実行 ID を指定して にリダイレクトします。十分にシンプルで、パフォーマンスは素晴らしいです。

Page2.aspxDB から ID を取得し、CrystalReportDocumentオブジェクトをハイドレートします (数ミリ秒かかります)。次に、これを呼び出しExportToHttpStreamて、レポートを PDF、DOC、または XLS ダウンロードとしてレンダリングします (出力形式は で決定されますPage1.aspx)。ExportToHttpStreamレポートの作成方法とターゲット システムの DB インデックスが原因で、この方法のパフォーマンスは非常に低くなります。これは現時点では私の手に負えませんが、彼らが取り組んでいることを約束します.

問題は、送信ボタンPage1.aspxが押されたときに、ユーザーがダウンロードを開始する前に非常に長い遅延が発生することです。その後、ユーザーが問題があると考えて送信ボタンを再度押すと、さらに複雑になります。

私がする必要があるのは、にPage1.aspxリダイレクトすることだと思いますPage2.aspxPage2.aspxマスターページの家具と読み込みdivをレンダリングする必要があり、保存ダイアログが自動的にポップアップする前に、レポートはバックグラウンドで非同期的にレンダリングする必要があります。その後、読み込み中の div を「レポートが生成されました。戻るにはここをクリックしてください」 '。

これがこれを達成するための最良の方法である場合、ページ全体を読み込んでから、レポートを非同期的に要求するにはどうすればよいですか? 私はここでどんな提案も受け入れます。

4

3 に答える 3

1

ajax を使用してレポートを読み込み、Page2.aspx処理中に読み込みメッセージを表示できます。

jQuery.load()メソッドを見てください。これは、あなたがしようとしていることを達成するための最も簡単な方法かもしれません。

Page1.aspx- パラメーターの収集
Page2.aspx- レポート ビュー、Page2Details.aspxajax 経由の呼び出し。

于 2012-08-29T14:26:14.587 に答える
0

どちらの答えも、正しい方向に進んで研究するための土台を与えてくれました。私の解決策にはfileDownload、John Culviner のプラグインを使用して同様の解決策を容易にすることが含まれていました。

jQueryファイルJohn Culvinerによるダウンロード

これにより、次のページ構造が可能になりました。

  1. Page1.aspx、レポートのパラメータを収集して検証し、それらをOracleに配置します。
  2. Page2.aspxdiv、クエリ文字列 setup 3 hidden sを介して runid (db 内のパラメーターへのポインター) に渡されます。読み込み中、エラー、成功。

上記のスクリプトは、この時点で採用されました。jQuery は、最初に読み込みをdiv可視に設定し、次にプラグインを呼び出します。プラグインは動的に を作成しiframe、バイナリ (xls/doc/pdf) を からダウンロードしますPage3.aspx。次に、成功のコールバックまたは失敗を発生させます。成功のコールバックは、 の応答の最後に設定された Cookie によって起動されPage3.aspxます。

プラグインは'text/plain'、jQuery で AJAX 呼び出しを使用してダウンロードを言及し、AJAX に同等のオクテット ストリームがないという制限を回避していると思います。

それは動作しますが、決して最もクリーンなソリューションではありません。少しも劣化することはありませんが、制御されたイントラネットのユーザーに非常に応答性が高く快適な UI を提供します。

于 2012-08-31T19:11:49.493 に答える
0

Page2.aspx内部にロードしてみてiframe、jQueryを使用して待機インジケータを表示し、Page2.aspxダウンロード後に非表示にします

于 2012-08-29T14:25:29.470 に答える