Coldfusion 将查询元素列表添加到单个数组元素
我正在循环查询以创建零件号列表,以填充零件号列表:Coldfusion 将查询元素列表添加到单个数组元素,coldfusion,Coldfusion,我正在循环查询以创建零件号列表,以填充零件号列表: <cfset binlist = "" > <cfset a = 1 /> <cfloop query="getParts"> <cfif a > <cfset binlist = getParts.binnum> <cfset a = 2 > <cfelse> <cfset binl
<cfset binlist = "" >
<cfset a = 1 />
<cfloop query="getParts">
<cfif a >
<cfset binlist = getParts.binnum>
<cfset a = 2 >
<cfelse>
<cfset binlist = binlist & "," & getParts.binnum >
</cfif>
</cfloop>
我想将binlist元素添加到数组的元素中,以便填充电子表格:
<cfset aColumns = [ partnum, shortchar08, partdescription, binlist, inventory.currinv , staged.stagedqty, alloc.allocqty, available, shelfCount, shipdtl.shipqty, getNumberofStores.numStores, tordered, APS, paddedLeadTime, LWM, storesRemain] />
<!---add the column data to the spreadsheet--->
<cfset SpreadsheetAddRow(SpreadsheetObj, ArrayToList(aColumns)) />
1个零件可以放在多个箱子中。它在我的CF输出页面中工作,但在我试图生成的电子表格中不工作,该电子表格用于显示零件的多个箱子
生成的电子表格每个零件仅包含一个箱子,而对于具有多个箱子的零件不包含多个箱子。您正在重新发明轮子。valuelist(getparts.binnum)将提供您的列表,而无需所有循环和检查。或者至少您可以使用“listAppend()”来避免所有的逗号检查:)您正在重新发明轮子。valuelist(getparts.binnum)将提供您的列表,而无需所有循环和检查。或者至少可以使用“listAppend()”来避免所有的逗号检查:)我认为(如果我理解您的逻辑),您试图做的只是Coldfusion中的一行代码:
<cfset binList = ValueList(getParts.binnum) />
进一步查看代码后,看起来您正在将列表嵌入到数组中,然后将数组转换为列表。如果你有一个逗号分隔的列表,然后把它放在另一个逗号分隔的列表中间,它们将被解释为单个元素而不是集合。
查看如果将分隔符更改为逗号以外的字符,以避免与较大的列表混淆,会发生什么情况:
<cfset binList = ValueList(getParts.binnum, ';') />
更新:
好的,我看你有零件分组问题。让我更新我的解决方案:
<!--- loop over unique parts -->
<cfoutput query="getParts" group="partnum">
<cfset binlist = "" >
<!--- loop over bin numbers for each part --->
<cfoutput>
<cfset binlist = ListAppend( binlist, getParts.binnum, ';' ) />
</cfoutput>
<!--- do row level stuff here --->
<cfset aColumns = [ partnum, shortchar08, partdescription, binlist, inventory.currinv , staged.stagedqty, alloc.allocqty, available, shelfCount, shipdtl.shipqty, getNumberofStores.numStores, tordered, APS, paddedLeadTime, LWM, storesRemain] />
<!---add the column data to the spreadsheet--->
<cfset SpreadsheetAddRow(SpreadsheetObj, ArrayToList(aColumns)) />
</cfoutput>
基本上,您不会混合使用CFOUTPUT和CFLOOP。如果使用CFOUTPUT进行分组,则需要使用内部CFOUTPUT(减去group参数)来获得内部分组。我认为(如果我理解您的逻辑),您试图做的只是Coldfusion中的一行代码:
<cfset binList = ValueList(getParts.binnum) />
进一步查看代码后,看起来您正在将列表嵌入到数组中,然后将数组转换为列表。如果你有一个逗号分隔的列表,然后把它放在另一个逗号分隔的列表中间,它们将被解释为单个元素而不是集合。
查看如果将分隔符更改为逗号以外的字符,以避免与较大的列表混淆,会发生什么情况:
<cfset binList = ValueList(getParts.binnum, ';') />
更新:
好的,我看你有零件分组问题。让我更新我的解决方案:
<!--- loop over unique parts -->
<cfoutput query="getParts" group="partnum">
<cfset binlist = "" >
<!--- loop over bin numbers for each part --->
<cfoutput>
<cfset binlist = ListAppend( binlist, getParts.binnum, ';' ) />
</cfoutput>
<!--- do row level stuff here --->
<cfset aColumns = [ partnum, shortchar08, partdescription, binlist, inventory.currinv , staged.stagedqty, alloc.allocqty, available, shelfCount, shipdtl.shipqty, getNumberofStores.numStores, tordered, APS, paddedLeadTime, LWM, storesRemain] />
<!---add the column data to the spreadsheet--->
<cfset SpreadsheetAddRow(SpreadsheetObj, ArrayToList(aColumns)) />
</cfoutput>
基本上,您不会混合使用CFOUTPUT和CFLOOP。如果使用CFOUTPUT进行分组,则需要使用内部CFOUTPUT(减去group参数)来获得内部分组。如果查询仅包含单个零件的行,则ValueList()函数可能是实现此目的的方法。您可能需要为bin列表使用不同的分隔符,以使其与传递给SpreadSheetAddRow的数组中的其他项目分开:
<!--- Second argument uses space as delimiter --->
<cfset binlist = ValueList(getParts.binnum, " ") >
<!---add the column data to the spreadsheet--->
<!--- Explicitly use comma as delimiter --->
<cfset SpreadsheetAddRow(SpreadsheetObj, ArrayToList(aColumns, ",")) />
听起来您很难按部分将查询划分为多个集合。因此,如果不使用Query of Query(QoQ),ValueList可能无法为您实现这一点。如果您已经在使用分组的cfoutput,只需在结构中收集part/binlist映射:
<cfset part_bins = structNew()>
<cfoutput query="getParts" group="partnum">
<cfoutput> <!--- partnum group --->
<cfif structKeyExists(part_bins, getParts.partnum)>
<cfset part_bins[getParts.partnum] = listAppend(part_bins[getParts.partnum], getParts.binnum, " ")>
<cfelse>
<cfset part_bins[getParts.partnum] = getParts.binnum>
</cfif>
<cfoutput>
</cfloop>
然后在创建数组时从结构中提取bin列表:
<cfset aColumns = [ partnum, shortchar08, partdescription,
part_bins[partnum], inventory.currinv , staged.stagedqty,
alloc.allocqty, available, shelfCount, shipdtl.shipqty,
getNumberofStores.numStores, tordered, APS, paddedLeadTime,
LWM, storesRemain] />
您可能需要处理零件没有BIN的情况—这将引发结构键异常。如果查询只包含单个零件的行,则ValueList()函数可能就是解决此问题的方法。您可能需要为bin列表使用不同的分隔符,以使其与传递给SpreadSheetAddRow的数组中的其他项目分开:
<!--- Second argument uses space as delimiter --->
<cfset binlist = ValueList(getParts.binnum, " ") >
<!---add the column data to the spreadsheet--->
<!--- Explicitly use comma as delimiter --->
<cfset SpreadsheetAddRow(SpreadsheetObj, ArrayToList(aColumns, ",")) />
听起来您很难按部分将查询划分为多个集合。因此,如果不使用Query of Query(QoQ),ValueList可能无法为您实现这一点。如果您已经在使用分组的cfoutput,只需在结构中收集part/binlist映射:
<cfset part_bins = structNew()>
<cfoutput query="getParts" group="partnum">
<cfoutput> <!--- partnum group --->
<cfif structKeyExists(part_bins, getParts.partnum)>
<cfset part_bins[getParts.partnum] = listAppend(part_bins[getParts.partnum], getParts.binnum, " ")>
<cfelse>
<cfset part_bins[getParts.partnum] = getParts.binnum>
</cfif>
<cfoutput>
</cfloop>
然后在创建数组时从结构中提取bin列表:
<cfset aColumns = [ partnum, shortchar08, partdescription,
part_bins[partnum], inventory.currinv , staged.stagedqty,
alloc.allocqty, available, shelfCount, shipdtl.shipqty,
getNumberofStores.numStores, tordered, APS, paddedLeadTime,
LWM, storesRemain] />
您可能需要处理部件没有BIN的情况—这将引发结构键异常。您没有说明您使用的是什么数据库平台,但您可以使用SQL中的聚合函数来完成同样的操作。例如,在MySQL中:
SELECT partnum, GROUP_CONCAT(DISTINCT binnum SEPARATOR ' ')
FROM Parts
GROUP BY partnum
PostgreSQL中也存在类似的函数:
array_to_string(array_agg(binnum),' ')
您并没有说您使用的是什么数据库平台,但您可以使用SQL中的聚合函数来实现同样的技巧。例如,在MySQL中:
SELECT partnum, GROUP_CONCAT(DISTINCT binnum SEPARATOR ' ')
FROM Parts
GROUP BY partnum
PostgreSQL中也存在类似的函数:
array_to_string(array_agg(binnum),' ')
我不明白你到底想干什么?此外,如果可以用html显示代码,则可以使用cfcontent作弊并将html发送到excel。此外,如果您还想在循环中执行其他逻辑,您可以使用ValueList()或ListAppend()简单地检查初始逻辑。不过,感谢您的响应,Bush,binnum并没有局限于特定部分。我不明白您到底想做什么?此外,如果可以用html显示代码,则可以使用cfcontent作弊并将html发送到excel。此外,如果您还想在循环中执行其他逻辑,您可以使用ValueList()或ListAppend()简单地检查初始逻辑。不过,感谢您的响应,Bush,binnum并不局限于特定部分。哈哈。。。你赢了我!我的想法完全正确。哈。。。你赢了我!我的想法完全正确。谢谢你,马克。我已经试过了,但它似乎是拉每一个箱子,而不是限制特定零件的箱子。我正在尝试:
您的