2012-03-13 7 views
3

Я пытаюсь улучшить время выполнения одного из моих отчетов, который использует cfcharts для печати графиков. Сам код представляет собой цикл сущностей, и для каждого объекта я создаю диаграмму (это сравнительный отчет).Возможна ли Cfcfhart внутри cfthread? как получить выход?

Выполнение этой строки занимает всего минуту или больше для завершения из-за сложности отчета, поэтому я пытаюсь использовать cfthread для этого случая, но я не уверен, что это возможно.

Вот код:

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

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

Как и ожидалось cfchart не будет «напечатано» внутри cfthread хотя очевидно, что это выполняется. Как я могу получить вывод cfthread? Одним из возможных решений было бы создание изображения из cfchart и просто использование изображения для создания документа в более позднее время, когда все потоки закончились, но мне было интересно, есть ли способ получить вывод cfchart из cfthread.

ответ

0

Попробуйте поместить пользовательский тег вокруг вызова cfchart и захватить сгенерированное содержимое в переменную - затем получить доступ к нему с помощью области потоков. Я не уверен, что это сработает (в зависимости от формата вывода).

0

Я не тестировал это, это просто идея, но вы можете попробовать положить cfchart внутри блока cfsavecontent.

0

Я смог использовать cfsavecontent для сохранения, а затем генерировать cfcharts с кавычками.

Просто убедитесь, что независимо запросов/переменных данных, используемые сохраняются в блоке 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 с cfcharts внутри cfthread.