1

ASP.Net ページから Crystal Reports レポートを印刷しようとすると、重大な問題が発生します。現在の設定は次のとおりです。

  • Crystal Reports ビューアがページに設定されています。レポートを表示すると、レポートは正常に表示されます。
  • レポート ビューアの PrintMode が ActiveX に設定されている
  • SAP の推奨に従って、セッション変数からレポート データ ソースを設定しています (ナレッジ ベース記事の 1 つに記載されています)。レポート データ ソースは、WCF サービスへの呼び出しによって設定されています。レポートに渡されるデータは問題ありません。(ここでも、レポートは問題なく表示され、すべてのコンテンツが適切に表示されます)。
  • ASP.Net アプリケーションと関連サービスのビルド ターゲットは x86 です。
  • すべてが Crystal Reports バージョン 13 を使用しており、ASP.Net Web アプリケーションは .Net 4 を使用しています。これは Internet Explorer 8 で表示されています。
  • Internet Explorer 8 で ActiveX の設定を確認してみましたが、問題はありません (すべて許可またはプロンプトに設定されています)。
  • このエラーは、IDE から実行した場合でも、別のサーバーにセットアップされた Web サイトから実行した場合でも発生します。
  • 他のサーバーの IIS のアプリケーション プールの設定は、32 ビット アプリケーションを許可するように設定されています。

レポート ビューアーの [印刷] アイコンをクリックすると、次のエラー メッセージが表示されます。

「通信エラーが発生しました。印刷を中止します。」

この同じエラーが複数のマシンで発生します。エラー メッセージで [OK] をクリックすると、その下のダイアログに「Crystal Reports Print Control が読み込まれるまでお待ちください。」と表示されます。待っていても何も起こりません。ActiveX コントロールをインストールするプロンプトは表示されず、プリンターを選択するためのポップアップも表示されません (いくつかのプリンターがインストールされていることはわかっています)。

私は次のことを試みましたが、どれもうまくいきませんでした:

  • レポートの種類を PDF に切り替えます。これを実行してレポート ビューアーの [印刷] ボタンをクリックすると、次のエラーが表示されます。

Microsoft JScript ランタイム エラー: オブジェクトが必要です。」

特にこの行で壊れます:

bobj.crv.stateManager.setComponentState('MainContent_reportViewer_ UI',eval('('+document.getElementById(' _CRYSTALSTATEctl00$MainContent$reportViewer').value+')'));

レポートにはいくつかの動的画像がありますが、レポートを表示するとすべて正しく表示されています。これらは、このレポートに関連付けられると私が考えることができる唯一のバイナリ オブジェクトです。ページの動的に作成されたコードでエラーが発生しています-私が書いたものではありません。

  • 正しい .cab ファイルから ActiveX コントロールを手動でインストールしようとしました。これは、どのシナリオでも違いはありませんでした。
  • 最新の Crystal Reports サービス パック (サービス パック 3) をインストールしました。繰り返しますが、これは何も変わりませんでした。
  • 私が遭遇したいくつかのフォーラム投稿で推奨されているように、デフォルト Web サイト内に CrystalReportViewers13 用の仮想ディレクトリを設定しようとしました。これも効果がありませんでした。
  • ページで ViewState を有効にしても、印刷が機能するかどうかには影響しません。
  • 独自の印刷ボタンと、使用可能なプリンターのリストを含むドロップダウン リストを追加してみました。独自のカスタム印刷ボタンをクリックして PrintToPrinter() を呼び出すと、PDF レポートを印刷しようとした場合と同じエラー メッセージが表示されます。

「Microsoft JScript ランタイム エラー: オブジェクトが必要です」

...そして、[印刷] ボタンをクリックして PDF レポートを印刷しようとしたときと同じ行で壊れます。

私はこれに対して少なくとも 1 日は頭を悩ませてきましたが、アイデアがまったくありません。誰がこれを引き起こしているのか考えていますか?

編集:

さて、これが私が物事を機能させるためにしたことです。それは、私が考えていたものよりもはるかに簡単な修正になりました。

  • ReportDocument 全体をセッションに詰め込みます。ページの読み込みは次のようになります。

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["report"] != null)
        {
            reportViewer.ReportSource = Session["report"];
        }
    
        BuildReport();
    }
    
  • ReportViewer はできるだけシンプルに保ちます。レポートの種類 (PDF または ActiveX) を指定しないでください。それを何かに設定すると、問題が発生するように見えました。これは、ページのソースで次のように表示されます。

...そしてそれだけでした。こんなに簡単な作業になってしまったのに、それを機能させるために約 1 日を費やしたなんて信じられません。この投稿が、同じ問題に直面している他の人に役立つことを願っています。

4

4 に答える 4

1

多くのユーザー要求を受け取っている場合、レポート全体をセッションに保存するのはお勧めできません。

Crystal レポートを操作している間は、応答を送信する前に、各要求 (ポストバックの有無は関係ありません) でレポートとそのログインとデータソース、パラメーターなどを再初期化する必要があります。Crystal レポートは完全なビューステートを維持しないため、毎回再初期化する必要があります。

ポストバック リクエスト中に再初期化していないため、エラーが発生したと思います。

于 2012-04-14T06:29:49.583 に答える
0

この質問が古いことは知っていますが、他の誰かがこの問題を抱えている場合に備えて、私はチャイムを鳴らすと思いました.

このページには、あなたの問題に非常に似ていると思われる問題のオプションがいくつかあることがわかりました。「bobj is undefined」というタイトルのエラーが発生しましたが、実際には、IIS が Crystal の JS ファイルへの適切なパスを見つけられないことが原因です。

私自身、サイトのルート (wwwroot) にある aspnet_client ディレクトリにいくつかのフォルダーを配置し、NETWORK_SERVICE が aspnet_client フォルダーにアクセスできるようにしました。x86 SAP フォルダーの下にある「crystalreportviewers」フォルダーで同じことを行う必要がありました。

「C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports 20XX\crystalreportviewers」

また、そのサイトの構成を web.config に追加する必要がありました...その後、ビューアーが正常に動作し始めました。

それが役に立てば幸い!

于 2013-05-02T11:47:05.480 に答える