3

cfcharts を使用してグラフを印刷するレポートの実行時間を改善しようとしています。コード自体はエンティティのループであり、エンティティごとにグラフを作成します (これは比較レポートです)。

これをインラインで実行すると、レポートが複雑なため、完了までにほぼ 1 分以上かかるため、この場合に cfthread を使用しようとしていますが、それが可能かどうかはわかりません。

コードは次のとおりです。

<body> 
<cfloop array="#uuids#" index="uuid" >

   <cfthread action="run" name="t#threadCount#" output="to#threadCount#">
    ...
       <cfchart >
          ...
       </cfchart>
   </cfthread>
    ...
</cfloop>
</body>

予想どおり、cfchart は cfthread 内で「印刷」されませんが、明らかに実行されています。cfthread の出力を取得するにはどうすればよいですか? 考えられる解決策の1つは、cfchartから画像を作成し、後ですべてのスレッドが終了したときにその画像を使用してドキュメントを作成することですが、cfthreadからcfchart出力を取得する方法があるかどうか疑問に思っていました.

4

3 に答える 3

0

cfchart 呼び出しの周りにカスタム タグを配置し、生成されたコンテンツを変数にキャプチャしてから、スレッド スコープを使用してアクセスしてみてください。これが機能するかどうかは確信が持てません(出力形式によって異なります)。

于 2012-03-13T13:22:07.437 に答える
0

私はこれをテストしていません。これは単なるアイデアですが、cfsavecontent ブロック内に cfchart を配置してみてください。

于 2012-03-13T13:46:40.140 に答える
0

cfsavecontent を使用して保存し、引用符付きの cfchart を生成することができました。

使用されるクエリ/データ変数が cfsavecontent ブロック内に保存されていることを確認してください (この部分で問題がありました。注意しないと、スコープが少し不安定になります)。

<body> 
<cfloop array="#uuids#" index="uuid" >

   <cfthread action="run" name="t#threadCount#" output="to#threadCount#">
        <cfsavecontent variable="thisContent">
           <cfquery name="thisQuery" datasource="dsource">
              ...
           </cfquery>
        <cfchart >
           ...
        </cfchart>
       </cfsavecontent>
    </cfthread>
 ...
</cfloop>

<cfloop array="#uuids#" index="uuid" >
    <cfthread action="join" name="t#threadCount#"/>
    #thisContent#
 </cfloop>
</body>

これに関して私が抱えていた問題は、動的変数の命名/呼び出しでした。これは非常に簡単な修正だと思いますが、作成されることがわかっている名前で各コンテンツを呼び出すと、動的変数を使用する目的に反しますが、表示されました。しかし、それは完全に別の戦いです !答えはイエスです。cfsavecontent を cfthread 内の cfcharts で使用できます。

于 2016-10-27T19:48:46.130 に答える