Reference QoQ in CFSpreadsheet
-
27-04-2021 - |
Вопрос
I've inherited a page that builds an inventory query from four table and outputs them with a QoQ:
<cfoutput query="getParts">
<cfquery dbtype="query" name="jobdata">
select *
from getJobs
where partnum = '#getparts.partnum#'
</cfquery>
<cfquery dbtype="query" name="orderdata">
select *
from getOrders
where partnum = '#getparts.partnum#'
</cfquery>
<cfquery dbtype="query" name="receiptdata">
select *
from getIncoming
where partnum = '#getparts.partnum#'
</cfquery>
<tr>
<td>#partnum#</td>
<td align="center">#partdescription#</td>
<td align="center">#allocated#</td>
<td align="center">#onhand#</td>
<td align="center">#receiptdata.recqty#</td>
<td align="center">#jobdata.JobCount#</td>
<td align="center">#jobdata.QtyNeeded#</td>
<td align="center">#jobdata.qtySent#</td>
<td align="center">#orderdata.ordercount#</td>
<td align="center">#orderdata.ordered#</td>
<td align="center">#orderdata.shipqty#</td>
</tr>
</cfoutput>
<cfset filenametouse = 'myFile' />
<cfset theDir = GetDirectoryFromPath(GetCurrentTemplatePath()) />
<cfset theFile = theDir & filenametouse & ".xls" />
<cflock name="fileActionSentItems" type="exclusive" timeout="30" throwontimeout="true">
<cfset SpreadsheetObj = spreadsheetNew()>
<cfset fcol = {}>
<cfset fcol.dataformat = "@">
<cfset SpreadsheetAddRow(SpreadsheetObj, "Part Number, Description, Allocated, On Hand, Pending Receipt, Job Count, Qty Needed, Qty Issued, Order Count, Qty Ordered, Qty Shipped")>
<cfset SpreadsheetAddRow(SpreadsheetObj,"NOT SURE HOW TO GET DATA HERE")>
<cfset SpreadsheetFormatColumn(SpreadsheetObj,fcol,11)>
<cfspreadsheet action="write" filename="#theFile#" name="SpreadsheetObj" sheetname="Sheet1" overwrite="true" />
I am not certain how to reference the data to populate the cells as it comes from multiple queries. Rewriting the query into one has been a challenge and I'm trying a different route to see if there is another way I don't see.
Решение
How about this:
<cfset filenametouse = 'myFile' />
<cfset theDir = GetDirectoryFromPath(GetCurrentTemplatePath()) />
<cfset theFile = theDir & filenametouse & ".xls" />
<cflock name="fileActionSentItems" type="exclusive" timeout="30" throwontimeout="true">
<cfset SpreadsheetObj = spreadsheetNew()>
<cfset fcol = {}>
<cfset fcol.dataformat = "@">
<cfset SpreadsheetAddRow(SpreadsheetObj, "Part Number, Description, Allocated, On Hand, Pending Receipt, Job Count, Qty Needed, Qty Issued, Order Count, Qty Ordered, Qty Shipped")>
<cfoutput query="getParts">
<cfquery dbtype="query" name="jobdata">
select *
from getJobs
where partnum = '#getparts.partnum#'
</cfquery>
<cfquery dbtype="query" name="orderdata">
select *
from getOrders
where partnum = '#getparts.partnum#'
</cfquery>
<cfquery dbtype="query" name="receiptdata">
select *
from getIncoming
where partnum = '#getparts.partnum#'
</cfquery>
<!--- add all columns to an array --->
<cfset aColumns = [ partdescription, receiptdata.recqty, jobdata.JobCount ] />
<cfset SpreadsheetAddRow(SpreadsheetObj, ArrayToList(aColumns)) />
</cfoutput>
<cfspreadsheet action="write" filename="#theFile#" name="SpreadsheetObj" sheetname="Sheet1" overwrite="true" />
Не связан с StackOverflow