публикация coldfusion cfhttp из запланированных задач

У меня есть запланированные задачи CF, которые отправляют по электронной почте сводку телефонных звонков для пользователя-администратора. Я хочу добавить возможность также отправлять отчет по электронной почте для определенных пользователей-администраторов. Дополнительный отчет является динамическим для каждого пользователя-администратора и хранится в таблице. Я не могу просто указать код отчета, так как он может измениться или не существовать для следующего пользователя. Возможно, мне следует использовать CFHTTP, но я в этом не разбираюсь.

<cfloop query="qGetTelemateEmails">             
  <cfif trim(QGetTime.Call_Email_On_Hour) eq "" or     listfind(#QGetTime.Call_Email_On_Hour#,datepart("h",now()))>
  <cfset TotalTime = 0>
  <cfset NumberOfCalls = 0> 
  <cfmail ........></cfmail>

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

<cfquery name="QAdditionalReports" datasource="#request.dtsrc#">
Select *
From Admin_Telemate_Additional_Query_Daily as a  LEFT OUTER JOIN
    Admin_Users AS C ON A.AdminID = C.adminID LEFT OUTER JOIN
    Admin_Telemate_Available_Queries AS b ON A.description = b.description
where a.adminid = #val(QGetTime.call_admin_user_id)#
</cfquery>
<cfif QAdditionalReports.recordcount gt 0>
SEE CODE BELOW  -------------------------------------------------------------       
</cfif>

</cfif>
</cfloop>

Это код отчета, который я хочу «включить/выполнить». Я получаю URL-адрес кода из записи таблицы запросов.

    <cfquery name="QGetCommEct" datasource="#request.dsn#">
      select *
      from Q_ES_Communications_by_Search_Number
      where upper(communication_type) = 'T'
        and Date_Entered = '#dateformat(now(),"yyyy/mm/dd")#'
    and consultant_id = <cfqueryparam cfsqltype="cf_sql_integer" value="#url.adminid#">
      order by date_Entered
    </cfquery>
    <cfmail>
        <div style="text-align:center; font-weight:bold; ">Communications Files Query</div> 
    <table>
     <tr>
      <td>
        <table style="font:Arial, Helvetica, sans-serif x-small; border:1px solid black; ">
         <tr>
      <td><strong>Type</strong></td>
      <td><strong>Cons</strong></td>
      <td><strong>Last Name</strong></td>
         </tr>
     <cfoutput query="QGetCommEct">     
    <tr valign="top">
      <td>#QGetCommEct.Communication_Type#-#QGetCommEct.Category#</td>
          <td>#QGetCommEct.AS400_Initials#</td>
          <td>#QGetCommEct.lastname#</td>
        </tr>
     </cfoutput>      
     </table> 
    </td>
  </tr>
</table> 
</cfmail>

Я заменил cfif QAdditionalReports.recordcount gt 0 на

<cfloop query="QAdditionalReports">
<cfhttp url="#QAdditionalReports.QueryURL##QAdditionalReports.QueryName#?adminid=#val(QGetTime.call_admin_user_id)#&emailto=#qGetTelemateEmails.Telemate_Email#">
<cfmail to="[email protected]" from="[email protected]" subject="Recap of daily phone calls" type="html" spoolenable="false"><cfdump var="#cfhttp#"></cfmail>
</cfloop>

И электронная почта содержит;

struct
Charset [empty string] 
ErrorDetail [empty string] 
Filecontent [empty string] 
Header  HTTP/1.1 503 Server Error Content-Type: text/html Date: Wed, 13 Feb 2013 15:11:17 GMT Server: Microsoft-IIS/7.0 
Mimetype    text/html 
Responseheader  struct
Content-Type    text/html 
Date    Wed, 13 Feb 2013 15:11:17 GMT 
Explanation Server Error 
Http_Version    HTTP/1.1 
Server  Microsoft-IIS/7.0 
Status_Code 503 

Statuscode  503 Server Error 
Text    YES 

Может быть, мне нужно сделать HTTPS


person user990016    schedule 13.02.2013    source источник
comment
cfhttp очень просто. ознакомьтесь с документацией — livedocs.adobe.com /coldfusion/8/htmldocs/   -  person Matt Busche    schedule 13.02.2013
comment
Я не вижу, где cfhttp входит в это уравнение.   -  person Travis    schedule 13.02.2013
comment
Я не знаю другого способа динамического выполнения страницы с другой страницы cfml. И то, что я делаю выше, приводит к сообщению об ошибке 503.   -  person user990016    schedule 13.02.2013


Ответы (1)


Вы можете поместить код, который вы пытаетесь повторно использовать, и «удаленно вызвать» в cfc или включить его в cfinclude.

Лучше всего было бы написать CFC. Вот некоторая документация.

<cfcomponent ...>
   <cffunction name = "additionalReports" ...>
      <cfargument name = "adminid" ...>
      <cfargument name = "emailto" ...>

      <!--- dynamic query using your adminid here ---->

      <cfmail to = "#arguments.emailTo#" ...>
         <!--- nicely formated output --->
      </cfmail>
   </cffunction>
<cfcomponent>

Вы бы вызвали cfc в запланированной задаче, как это

<!--- make the object. assume the cfc is in the same folder named adminreports.cfc --->
<cfset reportObject = createObject("component", "adminReports")>
<cfset reportObject.additionalReports(val(QGetTime.call_admin_user_id), qGetTelemateEmails.Telemate_Email)>
person Travis    schedule 13.02.2013
comment
Думаю, я мог бы добавить cfinclude в cffunction. Но что происходит, когда я перехожу к следующему пользователю, и у него есть другой дополнительный отчет для cfinclude. Разве функция cf все еще не содержит включение из предыдущего вызова? И какова продолжительность cfcomponent. Я запускаю этот процесс каждый час в течение дня. - person user990016; 13.02.2013
comment
почему у вас разные файлы для каждого отчета? Я все еще понимаю только часть того, чего вы пытаетесь достичь. Извиняюсь. CFC существует на время запроса, поэтому каждый раз при запуске процесса создается новый объект. - person Travis; 13.02.2013
comment
но в любом случае вы можете использовать cfinclude с динамическим именем страницы, предполагая, что queryName — это имя вашего файла: <cfinclude template = #QAdditionalReports.QueryName#?adminid=#val(QGetTime.call_admin_user_id)#&emailto=#qGetTelemateEmails.Telemate_Email#"> - person Travis; 13.02.2013
comment
У меня есть 10 пользователей-администраторов, которые звонят весь день. Каждый час я посылаю им по электронной почте сводку их звонков. Это запускается из запланированных задач CF. Перебирая запрос (группа по идентификатору администратора), я смотрю, есть ли дополнительные отчеты для пользователя. Если есть, я пытаюсь сделать CFHTTP для создания отчета. У следующего пользователя может быть другой отчет. Это кажется единственным логичным способом создания отчетов. CFINCLUDE останется в памяти для следующего пользователя, и они будут складываться. - person user990016; 13.02.2013
comment
являются ли дополнительные отчеты производными от 1 или более страниц coldfusion, которыми вы управляете? - person Travis; 13.02.2013
comment
хорошо, так что они запросили пользовательские отчеты, я вижу. вы должны иметь возможность включить их в обработку, как я предложил в 3-м комментарии. - person Travis; 13.02.2013