2013-10-11 2 views
-1

У меня есть простой CFC-файл, который содержит различные функции для разных запросов. & - отдельная функция, которая динамически отображает отчеты на основе запросов.Экспорт в Excel - Скрытое поле не генерирует результаты

Все запросы работают, кроме тех, которые возвращают ок. 50 тыс. Строк. Его просто пустой экран & У меня нет ошибки. Когда я удаляю результаты запроса, они действительно сбрасываются на экран, но, показывая его в табличном отчете, он ничего не дает.

У меня есть еще один файл CFM, который возвращает 100 тыс. Строк & работает отлично.

Ниже приведен код CFC, который не работает.

<cfcomponent> 
    <cfparam name="qry1" default=""> 
<cffunction name="showqry1" access="remote"> 
    <cfquery name="qry1" dataSource="myds" cachedwithin="#CreateTimeSpan(0, 2, 0, 0)#"> 
     <!--- myquery ---> 
    </cfquery> 
    <cfset Display()> 
</cffunction> 
<cffunction name="showqry2" access="remote"> 
    <cfquery name="qry1" dataSource="myds" cachedwithin="#CreateTimeSpan(0, 2, 0, 0)#"> 
     <!--- myquery ---> 
    </cfquery> 
    <cfset Display()> 
</cffunction> 

<cffunction name="Display" access="private"> 
    <cfdump var="#rptQry#" top="20"> 
    <cfsavecontent variable="myrpt"> 
     <table> 
       <!--- make a tabular report here using cfloop over the query---> 
     </table> 
    </cfsavecontent> 

    <cfform action="test.cfm" method="post" name="ExcelData"> 
     <cfoutput>#myrpt#</cfoutput> 
     <cfinput type="hidden" name="excel_data" value="#myrpt#"/><!---This is giving the error. ---> 
     <cfinput type="submit" name="test" value="Export" /> 
    </cfform> 

</cffunction> 
</cfcomponent> 

Любая идея, почему CFM работает нормально, но CFC не работает? Мне нужно CFC работать & хотите, чтобы преобразовать его в CFM Dont ...

UPDATE: Я добавил комментарий («Это дает ошибку») в приведенном выше коде, который является причиной ошибки , Независимо от CFC/CFM это не работает.

Я использую скрытое поле для передачи данных в другой файл, который экспортирует данные в excel. Любые альтернативные предложения?

Любая помощь очень ценится.

Благодаря

+3

Мы не можем комментировать ваш код, если вы на самом деле * не показываете нам * ваш код. Рекомендуемое чтение: http://cfmlblog.adamcameron.me/2013/09/short-self-contained-correct-compilable.html –

+0

Вы должны передавать свои данные в качестве аргумента в свою функцию, а также просматривать свои переменные –

ответ

0

Ваша функция Дисплей имеет cfsavecontent с табличными данными, и вы ставите его в cfform внутри ск. Я не знаю, почему вы это делаете. Insted, просто выполните вызов ajax, который возвращает этот cfsavecontent, а затем покажет его в cfm.

Возможно, вам, возможно, придется выводить cfform в функцию Display. Возможно, я ошибаюсь, но я не думаю, что вы можете просто разместить cfc внутри cfc и ожидать, что он появится в браузере. CFC не предназначен для рендеринга браузера, он должен быть в cfm.

+0

Я использовал cfform для экспорта данных в Excel. Нет необходимости в рендеринге браузера, а просто для передачи данных на экспорт в excel ... –

+0

@CrashOR * huh *? –

+0

Я не знаю, что ты здесь делаешь. Если он экспортирует его в файл excel, сохраните ваш файл cfsavecontent в файл xls или csv. Почему вы используете cfform, непонятно. Вы можете просто cfoutput имя столбца, а затем выполнить цикл запроса и вывести туда значения и сохранить их в файл. – nasaa

3

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

Однако вы помещаете свой набор записей в переменную qry1, но пытаетесь сбрасывать переменную rptQry. Но это будет просто ошибкой, если нет какого-то кода, который вы не показываете нам, который заполняет rptQry.

Кроме того, из практики POV для кодирования вы не должны выводить материал в свои функции: это лучше всего делать на странице CFM. Получите данные с помощью метода CFC; отобразите его с помощью CFM.

Я также рекомендую вам ознакомиться с тем, как делать OO с CFML (или вообще). Возможно, получите книгу Мэтта Гиффорда «Object-Oriented Programming in ColdFusion»

0

Что касается комментария, «Это потому, что мне нужно экспортировать, чтобы преуспеть по нажатию кнопки, для которой мне нужен cfform. Можете ли вы предложить альтернативу этой функции?», Я расскажу вам кое-что о чем подумать.

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

Далее, в вашем коде есть функции для различных запросов, кроме одной функции отображения. Если это не хитро написанная функция, которая определяет имена столбцов, она будет работать только в том случае, если все запросы имеют одинаковые столбцы. Если это так, возможно, вам нужен только один запрос и некоторые переменные.

Мое предложение состоит в том, чтобы начать с формы, в которой пользователь отправляет соответствующую информацию, которая определяет, что sql получает. Эта форма также должна включать в себя способ выбора, хотят ли они получить результаты, полученные в excel или html. Если они выберут html, сделайте что-нибудь, чтобы гарантировать, что возвращаемые данные не перегружают их браузер.

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