2016-09-20 2 views
1

Je suis en train de rencontrer un problème en remplissant les lignes d'un objet de feuille de calcul cf et en créant un fichier xls. Sur mon serveur de développement, l'ensemble du processus ne prend qu'une minute environ, mais sur mon serveur prod, la page commence à pendre indéfiniment dans la toute première itération de ma boucle de requête. J'ai commenté où il commence à traîner dans le code ci-dessous.Comment empêcher la population de tableurs des FC de pendre?

Pour chaque ligne de qReconciled, la requête étant bouclée (résultat d'une jointure), je crée 3 lignes dans la feuille de calcul - la première contient des données d'un côté de la jointure, la seconde contient des données de l'autre côté de la jointure, et le troisième est une rangée vide.

La requête qReconciled (qui compte environ 2 200 lignes) ne pose aucun problème; J'ai couru la requête dans le studio de SQL Server sur dev et prod, et dans les deux cas cela a pris seulement environ une minute pour courir.

Notez que pour les deux serveurs dev et prod, la CPU est épinglée à 100% ou presque à mesure que le processus s'exécute. Mais alors que le serveur dev est une boîte dédiée, le serveur prod est une machine virtuelle avec 3 autres VM partageant la même boîte, donc je me demande si c'est juste un problème d'allocation de mémoire VM.

<cfparam name="url.from" default="" /> 
<cfparam name="url.to" default="" > 

<!---dates for from and to come in the format "yyyy-mm-dd"---> 

    <cfset vImportName = "" /> 
    <cfset vDateTitle = "" /> 
    <cfset oStarsImporter = CreateObject("component", "#application.cfcpath#.starsImporter") /> 
    <cfset qReconciled = oStarsImporter.getReconciled(url.importId, url.from, url.to) /> 

    <cfif isDate(url.from) AND isDate(url.to)> 
     <cfif len(trim(vImportName))> 
      <cfset vImportName = vImportname & "-" /> 
     </cfif> 
     <cfset vDateTitle = "From_" & dateFormat(url.from, "mm-dd-yyyy") & "_to_" & dateFormat(url.to, "mm-dd-yyyy") /> 
    </cfif> 

    <cfset vFileName = vImportName & vDateTitle /> 

    <cfif NOT len(trim(vFileName))> 
     <cfset vFileName = "All_reconciled_" & dateFormat(now(), "mm-dd-yyyy") /> 
    </cfif> 

    <cfset currentSpreadSheetRow = 1> <!---start at 1, to ignore spreadsheet header row---> 

<!---Below is handy a way to generate an Excel sheet without having to save any file to the server...---> 

    <cfset s = spreadsheetNew()> 

    <!--- Add header row ---> 
    <cfset spreadsheetAddRow(s, "Assessment Source,Client Last,Client First,SSN,Gender,Client Case Number,DoB,Zip Code,Assessment Type,Assessment Status,NYCWAY Appt Code,Appt Date,Appt Time,CASAC Worker,Approving Supervisor,Benefit Status (Case Type),Final Recommendation,Site Code,Re-Assessment,Current Living Situation,Mental Conditions,Candidate for WeCARE,Attend Substance Use,Agency Name,Currently Attending Treatment Program Name,Type of Treatment,Opioid Taken,Housing Outcome,Return to Treatment Provider,Non HRA-Approved,Name non-HRA Site,New Mandate,Transfer to New Treatment Provider,Check-in,Assessment Start,Checked Out Time,Checked-in Site,Addendum,Consent B signed")> 

    <!---For each row in the query, create *3* rows in the spreadsheet. One for STARS, one for SACAP, and a blank row---> 
    <cfloop query="qReconciled"> 

     <!---Need to do this, else spreadsheet won't recognize as string---> 
     <cfset tCheckin = " #timeformat(dcheckin,'short')#" /> 
     <cfset tAssessmentStart = " #timeformat(dAssessmentStart,'short')#" /> 
     <cfset tCheckouttime = " #timeformat(dCheckouttime,'short')#" /> 
     <cfset tTimeInBin = " #timeformat(timeInBin,'short')#" /> 
     <cfset tApptBeginTime = " #timeformat(dApptBeginTime,'short')#" /> 
     <cfset tApptEndTime = " #timeformat(dApptEndTime,'short')#" /> 
     <cfset tAppointmentTime = " #timeformat(dAppointmentdate,'short')#" /> 
     <cfset tScheduledTime = " #timeformat(scheduledTime, 'short')#" /> 

     <cfset arrThisRowSTARSValues = ['STARS','#vClientlname#','#vClientfname#','#vSSN#','#vGender#',#listFirst(vClientcasenumber, '-')#,#dateFormat(dDOB, 'mm/dd/yyyy')#,'#vZipcode#','#vAssessmenttype#','#vAssessmentstatus#','#vNycwayappointmentcode#',#dateFormat(dAssessmentStart, 'mm/dd/yyyy')#, #tAppointmentTime#,'#vCasacworker#','#vApprovingsupervisor#','#vBenefitstatus_casetype#','#vFinalrecommendation#','#vSitecode#','#dReassessment#','#vCurrentlivingsituation#','#vMentalconditions#','#vCandidateforwecare#','#vAttendsubstanceuse#','#vAgencyname#','#vTreatmentprogramname#','#vTypeoftreatment#','#vOpioidtaken#','#iHousingoutcome#','#vReturntotreatmentprovider#','#vNonhraapproved#','#vNamenonhrasite#','#vNewhramandate#','#vTransfertonewtreatmentprovider#', #tCheckin#, #tAssessmentStart#, #tCheckouttime#,'#vCheckedinsite#','#vAddendum#','#vConsentbsigned#'] /> 
     <cfset arrThisRowSACAPValues = ['SACAP','#sacap_clientLName#','#sacap_clientFName#','#sacap_ssn#','#sacap_gender#','#vHRAClientId#',#dateFormat(vAge, 'mm/dd/yyyy')#,'#vClientPermZip#','#sacap_StarsAssessmentType#',' ',#sacap_clienttype#,#dateFormat(dCasacDate, 'mm/dd/yyyy')#,#tScheduledtime#,'#vEmpFName# #vEmpLName#','#supervisor_fname# #supervisor_lname#','#sacap_benefitstatus#','#sacap_finalRecommendation#','#vHRACode#','#sacap_reassessment#',' ','#vMHdiagnoses#','#sacap_wecaretype#',' ','#sacap_projects#',' ',' ','#sacap_buprenorphine#','#sacap_housingstatus#','#sacap_encounteroutcome#','#sacap_nonhraapproved#','#sacap_namenonhrasite#','#isNewlyMandated#','#sacap_transferreason#', #tTimeInBin#, #tApptBeginTime#, #tApptEndTime#,'#sacap_sacapsite#',' ',' '] /> 

     <!---This method of populating the spreadsheet is necessary; with spreadsheetAddRow(), commas in values will be interpreted as a new column, even if the value is wrapped in single-quotes, and this screws everything up---> 
     <cfset currentSpreadSheetRow = currentSpreadSheetRow + 1 /> 

     <!---STARS Row---> 
     <cfloop from="1" to="39" index="x"> 
      <cfset spreadsheetSetCellValue(s,arrThisRowSTARSValues[x],currentSpreadSheetRow,x) /> 
     </cfloop> 

     <cfset currentSpreadSheetRow = currentSpreadSheetRow + 1 /> 

     <!---THIS IS WHERE IT HANGS, ON THE VERY FIRST ITERATION OF QRECONCILED. CPU IS PINNED AT 100%---> 
     <!---SACAP Row---> 
     <cfloop from="1" to="39" index="x"> 
      <cfset spreadsheetSetCellValue(s,arrThisRowSACAPValues[x],currentSpreadSheetRow,x) /> 
     </cfloop> 

     <!---Blank Row---> 
     <cfset spreadsheetAddRow(s, "") /> 

     <cfset currentSpreadSheetRow = currentSpreadSheetRow + 1 /> 

    </cfloop> 

    <cfheader name="content-disposition" value="attachment; filename=#vFileName#_Reconciled.xls"> 
    <cfcontent type="application/msexcel" variable="#spreadsheetReadBinary(s)#" reset="true"> 

J'ai pensé à utiliser le cfc utilitaire de POI de Ben Nadel, dans ce cas, je crée une nouvelle requête et le remplir de la même façon que je suis peuplant la feuille de calcul (3 lignes pour chaque 1 rang dans qReconciled) et alimentez la requête à writeSingleExcel().

Répondre

0

Oui, l'utilisation de l'utilitaire POI cfc a résolu le problème. Ce qui avait l'habitude de courir pendant 30 minutes et expirer maintenant prend seulement environ 90 secondes. J'ai posté le nouveau code pour la page ci-dessus, et une nouvelle fonction cfc que j'ai créée, ci-dessous. Ce que j'ai fait au lieu d'utiliser l'objet feuille de calcul a été créer un nouvel objet de requête, boucle sur qReconciled, et remplir un tableau pour chacune des 39 colonnes dans cet objet de requête. Avec chaque itération de boucle, tous les 39 tableaux reçoivent des valeurs pour une ligne "STARS", une ligne "SACAP" et une ligne vide. Ensuite, une fois que toutes les itérations sont terminées, j'utilise queryAddColumn() pour remplir toutes les colonnes de l'objet de requête, puis je renvoie cette requête à poiUtility.writeSingleExcel(). Le fichier Excel est ensuite enregistré dans un dossier sur le serveur, mais il est également automatiquement téléchargé sur la machine de l'utilisateur, grâce aux balises cfheader/cfcontent.

page Action:

<!---Originally used cf spreadsheet object to create Excel Export. 
But this method used up too much memory; page would hang indefinitely on Production. Now using Ben Nadel's POI Utility instead.---> 

<!---dates for from and to come in the format "yyyy-mm-dd"---> 
<!---NOTE- if doing a date range without a specific importId, include ImportId as one of the columns in the report---> 


<cfif len(trim(url.from & url.to)) AND NOT (isDate(url.from) AND isDate(url.to))> 
    <cfset url.from = "" /> 
    <cfset url.to = "" /> 
</cfif> 

<cfset vImportName = "" /> 
<cfset vDateTitle = "" /> 
<cfset oStarsImporter = CreateObject("component", "#application.cfcpath#.starsImporter") /> 
<cfset oPOI = CreateObject("component", "#application.cfcpath#.poiUtility").init() /> 
<cfset qReconciled = oStarsImporter.getReconciled(url.from, url.to) /> 

<cfset qDisplay = oStarsImporter.prepForExport(qReconciled) /> 

<cfif isDate(url.from) AND isDate(url.to)> 
    <cfif len(trim(vImportName))> 
     <cfset vImportName = vImportname & "-" /> 
    </cfif> 
    <cfset vDateTitle = "From_" & dateFormat(url.from, "mm-dd-yyyy") & "_to_" & dateFormat(url.to, "mm-dd-yyyy") /> 
</cfif> 

<cfset vFileName = vImportName & vDateTitle /> 

<cfif NOT len(trim(vFileName))> 
    <cfset vFileName = "All_reconciled_" & dateFormat(now(), "mm-dd-yyyy") /> 
<cfelse> 
    <cfset vFileName = vFileName & "_reconciled" /> 
</cfif> 

<cfset oPOI.WriteSingleExcel(
    FilePath=application.starsExportDirectory & vFileName & ".xls" 
    ,query=qDisplay 
    ,columnList="Assessment_Source,Client_Last,Client_First,SSN,Gender,Client_Case_Number,DoB,Zip_Code,Assessment_Type,Assessment_Status,NYCWAY_Appt_Code,Appt_Date,Appt_Time,CASAC_Worker,Approving_Supervisor,Benefit_Status_Case_Type,Final_Recommendation,Site_Code,Re_Assessment,Current_Living_Situation,Mental_Conditions,Candidate_for_WeCARE,Attend_Substance_Use,Agency_Name,Currently_Attending_Treatment_Program_Name,Type_of_Treatment,Opioid_Taken,Housing_Outcome,Return_to_Treatment_Provider,Non_HRA_Approved,Name_non_HRA_Site,New_Mandate,Transfer_to_New_Treatment_Provider,Check_in,Assessment_Start,Checked_Out_Time,Checked_in_Site,Addendum,Consent_B_signed" 
    ,columnNames="Assessment Source,Client Last,Client First,SSN,Gender,Client Case Number,DoB,Zip Code,Assessment Type,Assessment Status,NYCWAY Appt Code,Appt Date,Appt Time,CASAC Worker,Approving Supervisor,Benefit Status (Case Type),Final Recommendation,Site Code,Re-Assessment,Current Living Situation,Mental Conditions,Candidate for WeCARE,Attend Substance Use,Agency Name,Currently Attending Treatment Program Name,Type of Treatment,Opioid Taken,Housing Outcome,Return to Treatment Provider,Non HRA-Approved,Name non-HRA Site,New Mandate,Transfer to New Treatment Provider,Check-in,Assessment Start,Checked Out Time,Checked-in Site,Addendum,Consent B signed" 
)/> 

<cfheader name="Content-Disposition" value="inline; filename=#vFileName#.xls"> 
<cfcontent type="application/vnd.ms-excel" file="#application.starsExcelExportURL##vFileName#.xls"> 

prepForExport():

<cffunction name="prepForExport" returntype="query" hint="Preps query of reconciled assessments for Excel export"> 
     <cfargument name="qReconciled" type="query" required="true" /> 

     <cfset var qryRet = queryNew("") /> 
     <cfset var arrAssessmentSource = arrayNew(1) /> 
     <cfset var arrClientLast = arrayNew(1) /> 
     <cfset var arrClientFirst = arrayNew(1) /> 
     <cfset var arrSSN = arrayNew(1) /> 
     <cfset var arrGender = arrayNew(1) /> 
     <cfset var arrCaseNumber = arrayNew(1) /> 
     <cfset var arrDob = arrayNew(1) /> 
     <cfset var arrZip = arrayNew(1) /> 
     <cfset var arrAssessmentType = arrayNew(1) /> 
     <cfset var arrAssessmentStatus = arrayNew(1) /> 
     <cfset var arrNYCApptCode = arrayNew(1) /> 
     <cfset var arrApptDate = arrayNew(1) /> 
     <cfset var arrApptTime = arrayNew(1) /> 
     <cfset var arrCasacWorker = arrayNew(1) /> 
     <cfset var arrApprovingSup = arrayNew(1) /> 
     <cfset var arrBenStatus = arrayNew(1) /> 
     <cfset var arrFinalRecommend = arrayNew(1) /> 
     <cfset var arrSiteCode = arrayNew(1) /> 
     <cfset var arrReAssess = arrayNew(1) /> 
     <cfset var arrLivingSit = arrayNew(1) /> 
     <cfset var arrMentalCond = arrayNew(1) /> 
     <cfset var arrCandidateWecare = arrayNew(1) /> 
     <cfset var arrAttendSubsUse = arrayNew(1) /> 
     <cfset var arrAgencyname = arrayNew(1) /> 
     <cfset var arrCurrentTxProg = arrayNew(1) /> 
     <cfset var arrTypeTx = arrayNew(1) /> 
     <cfset var arrOpioid = arrayNew(1) /> 
     <cfset var arrHousingOutcome = arrayNew(1) /> 
     <cfset var arrReturnToTxProv = arrayNew(1) /> 
     <cfset var arrNonHRAApproved = arrayNew(1) /> 
     <cfset var arrNameNonHRASite = arrayNew(1) /> 
     <cfset var arrNewMandate = arrayNew(1) /> 
     <cfset var arrXferToNewTxprov = arrayNew(1) /> 
     <cfset var arrCheckIn = arrayNew(1) /> 
     <cfset var arrAssessmentStart = arrayNew(1) /> 
     <cfset var arrCheckOut = arrayNew(1) /> 
     <cfset var arrCheckedInSite = arrayNew(1) /> 
     <cfset var arrAddendum = arrayNew(1) /> 
     <cfset var arrConsentBSigned = arrayNew(1) /> 
     <cfset var tCheckin = "" /> 
     <cfset var tAssessmentStart = "" /> 
     <cfset var tCheckouttime = "" /> 
     <cfset var tTimeInBin = "" /> 
     <cfset var tApptBeginTime = "" /> 
     <cfset var tApptEndTime = "" /> 
     <cfset var tAppointmentTime = "" /> 
     <cfset var tScheduledTime = "" /> 

     <!---populate qryRet by inserting 3 rows for every row in qReconciled: one for STARS, one for SACAP, and one blank row as a seperator---> 

     <cfloop query="arguments.qReconciled"> 
      <cfset tCheckin = timeformat(dcheckin,'short') /> 
      <cfset tAssessmentStart = timeformat(dAssessmentStart,'short') /> 
      <cfset tCheckouttime = timeformat(dCheckouttime,'short') /> 
      <cfset tTimeInBin = timeformat(timeInBin,'short') /> 
      <cfset tApptBeginTime = timeformat(dApptBeginTime,'short') /> 
      <cfset tApptEndTime = timeformat(dApptEndTime,'short') /> 
      <cfset tAppointmentTime = timeformat(dAppointmentdate,'short') /> 
      <cfset tScheduledTime = timeformat(scheduledTime, 'short') /> 

      <cfset arrayAppend(arrAssessmentSource, 'STARS') /> 
      <cfset arrayAppend(arrAssessmentSource, 'SACAP') /> 
      <cfset arrayAppend(arrAssessmentSource, '') /> 

      <cfset arrayAppend(arrClientLast, vClientlname) /> 
      <cfset arrayAppend(arrClientLast, sacap_clientLName) /> 
      <cfset arrayAppend(arrClientLast, '') /> 

      <cfset arrayAppend(arrClientFirst, vClientfname) /> 
      <cfset arrayAppend(arrClientFirst, sacap_clientFName) /> 
      <cfset arrayAppend(arrClientFirst, '') /> 

      <cfset arrayAppend(arrSSN, vSSN) /> 
      <cfset arrayAppend(arrSSN, sacap_ssn) /> 
      <cfset arrayAppend(arrSSN, '') /> 

      <cfset arrayAppend(arrGender, vGender) /> 
      <cfset arrayAppend(arrGender, sacap_gender) /> 
      <cfset arrayAppend(arrGender, '') /> 

      <cfset arrayAppend(arrCaseNumber, listFirst(vClientcasenumber, '-')) /> 
      <cfset arrayAppend(arrCaseNumber, vHRAClientId) /> 
      <cfset arrayAppend(arrCaseNumber, '') /> 

      <cfset arrayAppend(arrDob, dateFormat(dDOB, 'mm/dd/yyyy')) /> 
      <cfset arrayAppend(arrDob, dateFormat(vAge, 'mm/dd/yyyy')) /> 
      <cfset arrayAppend(arrDob, '') /> 

      <cfset arrayAppend(arrZip, vZipcode) /> 
      <cfset arrayAppend(arrZip, vClientPermZip) /> 
      <cfset arrayAppend(arrZip, '') /> 

      <cfset arrayAppend(arrAssessmentType, vAssessmenttype) /> 
      <cfset arrayAppend(arrAssessmentType, sacap_StarsAssessmentType) /> 
      <cfset arrayAppend(arrAssessmentType, '') /> 

      <cfset arrayAppend(arrAssessmentStatus, vAssessmentstatus) /> 
      <cfset arrayAppend(arrAssessmentStatus, '') /> 
      <cfset arrayAppend(arrAssessmentStatus, '') /> 

      <cfset arrayAppend(arrNYCApptCode, vNycwayappointmentcode) /> 
      <cfset arrayAppend(arrNYCApptCode, sacap_clienttype) /> 
      <cfset arrayAppend(arrNYCApptCode, '') /> 

      <cfset arrayAppend(arrApptDate, dateFormat(dAssessmentStart, 'mm/dd/yyyy')) /> 
      <cfset arrayAppend(arrApptDate, dateFormat(dCasacDate, 'mm/dd/yyyy')) /> 
      <cfset arrayAppend(arrApptDate, '') /> 

      <cfset arrayAppend(arrApptTime, tAppointmentTime) /> 
      <cfset arrayAppend(arrApptTime, tScheduledtime) /> 
      <cfset arrayAppend(arrApptTime, '') /> 

      <cfset arrayAppend(arrCasacWorker, vCasacworker) /> 
      <cfset arrayAppend(arrCasacWorker, vEmpFName & ' ' & vEmpLName) /> 
      <cfset arrayAppend(arrCasacWorker, '') /> 

      <cfset arrayAppend(arrApprovingSup, vApprovingsupervisor) /> 
      <cfset arrayAppend(arrApprovingSup, supervisor_fname & ' ' & supervisor_lname) /> 
      <cfset arrayAppend(arrApprovingSup, '') /> 


      <cfset arrayAppend(arrBenStatus, vBenefitstatus_casetype) /> 
      <cfset arrayAppend(arrBenStatus, sacap_benefitstatus) /> 
      <cfset arrayAppend(arrBenStatus, '') /> 

      <cfset arrayAppend(arrFinalRecommend, vFinalrecommendation) /> 
      <cfset arrayAppend(arrFinalRecommend, sacap_finalRecommendation) /> 
      <cfset arrayAppend(arrFinalRecommend, '') /> 

      <cfset arrayAppend(arrSiteCode, vSitecode) /> 
      <cfset arrayAppend(arrSiteCode, vHRACode) /> 
      <cfset arrayAppend(arrSiteCode, '') /> 

      <cfset arrayAppend(arrReAssess, dReassessment) /> 
      <cfset arrayAppend(arrReAssess, sacap_reassessment) /> 
      <cfset arrayAppend(arrReAssess, '') /> 

      <cfset arrayAppend(arrLivingSit, vCurrentlivingsituation) /> 
      <cfset arrayAppend(arrLivingSit, '') /> 
      <cfset arrayAppend(arrLivingSit, '') /> 

      <cfset arrayAppend(arrMentalCond, vMentalconditions) /> 
      <cfset arrayAppend(arrMentalCond, vMHdiagnoses) /> 
      <cfset arrayAppend(arrMentalCond, '') /> 

      <cfset arrayAppend(arrCandidateWecare, vCandidateforwecare) /> 
      <cfset arrayAppend(arrCandidateWecare, sacap_wecaretype) /> 
      <cfset arrayAppend(arrCandidateWecare, '') /> 

      <cfset arrayAppend(arrAttendSubsUse, vAttendsubstanceuse) /> 
      <cfset arrayAppend(arrAttendSubsUse, '') /> 
      <cfset arrayAppend(arrAttendSubsUse, '') /> 

      <cfset arrayAppend(arrAgencyname, vAgencyname) /> 
      <cfset arrayAppend(arrAgencyname, sacap_projects) /> 
      <cfset arrayAppend(arrAgencyname, '') /> 

      <cfset arrayAppend(arrCurrentTxProg, vTreatmentprogramname) /> 
      <cfset arrayAppend(arrCurrentTxProg, '') /> 
      <cfset arrayAppend(arrCurrentTxProg, '') /> 

      <cfset arrayAppend(arrTypeTx, vTypeoftreatment) /> 
      <cfset arrayAppend(arrTypeTx, '') /> 
      <cfset arrayAppend(arrTypeTx, '') /> 

      <cfset arrayAppend(arrOpioid, vOpioidtaken) /> 
      <cfset arrayAppend(arrOpioid, sacap_buprenorphine) /> 
      <cfset arrayAppend(arrOpioid, '') /> 

      <cfset arrayAppend(arrHousingOutcome, iHousingoutcome) /> 
      <cfset arrayAppend(arrHousingOutcome, sacap_housingstatus) /> 
      <cfset arrayAppend(arrHousingOutcome, '') /> 

      <cfset arrayAppend(arrReturnToTxProv, vReturntotreatmentprovider) /> 
      <cfset arrayAppend(arrReturnToTxProv, sacap_encounteroutcome) /> 
      <cfset arrayAppend(arrReturnToTxProv, '') /> 

      <cfset arrayAppend(arrNonHRAApproved, vNonhraapproved) /> 
      <cfset arrayAppend(arrNonHRAApproved, sacap_nonhraapproved) /> 
      <cfset arrayAppend(arrNonHRAApproved, '') /> 

      <cfset arrayAppend(arrNameNonHRASite, vNamenonhrasite) /> 
      <cfset arrayAppend(arrNameNonHRASite, sacap_namenonhrasite) /> 
      <cfset arrayAppend(arrNameNonHRASite, '') /> 

      <cfset arrayAppend(arrNewMandate, vNewhramandate) /> 
      <cfset arrayAppend(arrNewMandate, iSNewlyMandated) /> 
      <cfset arrayAppend(arrNewMandate, '') /> 

      <cfset arrayAppend(arrXferToNewTxprov, vTransfertonewtreatmentprovider) /> 
      <cfset arrayAppend(arrXferToNewTxprov, sacap_transferreason) /> 
      <cfset arrayAppend(arrXferToNewTxprov, '') /> 

      <cfset arrayAppend(arrCheckIn, tCheckin) /> 
      <cfset arrayAppend(arrCheckIn, tTimeInBin) /> 
      <cfset arrayAppend(arrCheckIn, '') /> 

      <cfset arrayAppend(arrAssessmentStart, tAssessmentStart) /> 
      <cfset arrayAppend(arrAssessmentStart, tApptBeginTime) /> 
      <cfset arrayAppend(arrAssessmentStart, '') /> 

      <cfset arrayAppend(arrCheckOut, tCheckouttime) /> 
      <cfset arrayAppend(arrCheckOut, tApptEndTime) /> 
      <cfset arrayAppend(arrCheckOut, '') /> 

      <cfset arrayAppend(arrCheckedInSite, vCheckedinsite) /> 
      <cfset arrayAppend(arrCheckedInSite, sacap_sacapsite) /> 
      <cfset arrayAppend(arrCheckedInSite, '') /> 

      <cfset arrayAppend(arrAddendum, vAddendum) /> 
      <cfset arrayAppend(arrAddendum, '') /> 
      <cfset arrayAppend(arrAddendum, '') /> 

      <cfset arrayAppend(arrConsentBSigned, vConsentbsigned) /> 
      <cfset arrayAppend(arrConsentBSigned, '') /> 
      <cfset arrayAppend(arrConsentBSigned, '') /> 
     </cfloop> 

     <cfset queryAddColumn(qryRet, "Assessment_Source", "varchar", arrAssessmentSource) /> 
     <cfset queryAddColumn(qryRet, "Client_Last", "varchar", arrClientLast) /> 
     <cfset queryAddColumn(qryRet, "Client_First","varchar", arrClientFirst) /> 
     <cfset queryAddColumn(qryRet, "SSN", "varchar", arrSSN) /> 
     <cfset queryAddColumn(qryRet, "Gender", "varchar", arrGender) /> 
     <cfset queryAddColumn(qryRet, "Client_Case_Number", "varchar", arrCaseNumber) /> 
     <cfset queryAddColumn(qryRet, "DoB", "varchar", arrDob) /> 
     <cfset queryAddColumn(qryRet, "Zip_Code", "varchar", arrZip) /> 
     <cfset queryAddColumn(qryRet, "Assessment_Type", "varchar", arrAssessmentType) /> 
     <cfset queryAddColumn(qryRet, "Assessment_Status", "varchar", arrAssessmentStatus) /> 
     <cfset queryAddColumn(qryRet, "NYCWAY_Appt_Code", "varchar", arrNYCApptCode) /> 
     <cfset queryAddColumn(qryRet, "Appt_Date", "varchar", arrApptDate) /> 
     <cfset queryAddColumn(qryRet, "Appt_Time", "varchar", arrApptTime) /> 
     <cfset queryAddColumn(qryRet, "CASAC_Worker", "varchar", arrCasacWorker) /> 
     <cfset queryAddColumn(qryRet, "Approving_Supervisor", "varchar", arrApprovingSup) /> 
     <cfset queryAddColumn(qryRet, "Benefit_Status_Case_Type", "varchar", arrBenStatus) /> 
     <cfset queryAddColumn(qryRet, "Final_Recommendation", "varchar", arrFinalRecommend) /> 
     <cfset queryAddColumn(qryRet, "Site_Code", "varchar", arrSiteCode) /> 
     <cfset queryAddColumn(qryRet, "Re_Assessment", "varchar", arrReAssess) /> 
     <cfset queryAddColumn(qryRet, "Current_Living_Situation", "varchar", arrLivingSit) /> 
     <cfset queryAddColumn(qryRet, "Mental_Conditions", "varchar", arrMentalCond) /> 
     <cfset queryAddColumn(qryRet, "Candidate_for_WeCARE", "varchar", arrCandidateWecare) /> 
     <cfset queryAddColumn(qryRet, "Attend_Substance_Use", "varchar", arrAttendSubsUse) /> 
     <cfset queryAddColumn(qryRet, "Agency_Name", "varchar", arrAgencyname) /> 
     <cfset queryAddColumn(qryRet, "Currently_Attending_Treatment_Program_Name", "varchar", arrCurrentTxProg) /> 
     <cfset queryAddColumn(qryRet, "Type_of_Treatment", "varchar", arrTypeTx) /> 
     <cfset queryAddColumn(qryRet, "Opioid_Taken", "varchar", arrOpioid) /> 
     <cfset queryAddColumn(qryRet, "Housing_Outcome", "varchar", arrHousingOutcome) /> 
     <cfset queryAddColumn(qryRet, "Return_to_Treatment_Provider", "varchar", arrReturnToTxProv) /> 
     <cfset queryAddColumn(qryRet, "Non_HRA_Approved", "varchar", arrNonHRAApproved) /> 
     <cfset queryAddColumn(qryRet, "Name_non_HRA_Site", "varchar", arrNameNonHRASite) /> 
     <cfset queryAddColumn(qryRet, "New_Mandate", "varchar", arrNewMandate) /> 
     <cfset queryAddColumn(qryRet, "Transfer_to_New_Treatment_Provider", "varchar", arrXferToNewTxprov) /> 
     <cfset queryAddColumn(qryRet, "Check_in", "varchar", arrCheckIn) /> 
     <cfset queryAddColumn(qryRet, "Assessment_Start", "varchar", arrAssessmentStart) /> 
     <cfset queryAddColumn(qryRet, "Checked_Out_Time", "varchar", arrCheckOut) /> 
     <cfset queryAddColumn(qryRet, "Checked_in_Site", "varchar", arrCheckedInSite) /> 
     <cfset queryAddColumn(qryRet, "Addendum", "varchar", arrAddendum) /> 
     <cfset queryAddColumn(qryRet, "Consent_B_signed", "varchar", arrConsentBSigned) /> 

     <cfreturn qryRet /> 

    </cffunction> 
+0

Vous pouvez optimiser votre requête, ainsi que 60 sec est beaucoup pour seulement 2200 lignes. – Rado