【问题标题】:ColdFusion Function Error (cfc)ColdFusion 函数错误 (cfc)
【发布时间】:2015-06-19 16:02:19
【问题描述】:

我对不应该返回任何东西的 cfc 有一点问题。它的唯一功能是将信息插入到几个数据库表中。我收到一条通用消息,说明“从 PutLocSalesRegisterInfo 函数返回的值不是布尔类型。”。有没有人遇到过类似的问题并以某种方式解决?下面是我的函数。

<cffunction name="PutLocSalesRegisterInfo" access="public" output="false" returntype="boolean">
    <cfargument name="OrgID"                        required="yes" type="any">
    <cfargument name="LocID"                        required="yes" type="any">
    <cfargument name="RegNum"                       required="yes" type="any">
    <cfargument name="userID"                       required="yes" type="any">
    <cfargument name="firstName"                    required="yes" type="any" default="">
    <cfargument name="LastName"                     required="yes" type="any" default="">
    <cfargument name="effectiveDate"                required="yes" type="any" default="">
    <cfargument name="VisaAmount"                   required="no" type="any" default="0.00">
    <cfargument name="VisaCount"                    required="no" type="any" default="0">
    <cfargument name="discoverCount"                required="no" type="any" default="0">
    <cfargument name="discoverAmount"               required="no" type="any" default="0.00">
    <cfargument name="MasterCardCount"              required="no" type="any" default="0">
    <cfargument name="MasterCardAmount"             required="no" type="any" default="0.00">
    <cfargument name="debitCount"                   required="no" type="any" default="0">
    <cfargument name="debitAmount"                  required="no" type="any" default="0.00">
    <cfargument name="AmericanExpressCount"         required="no" type="any" default="0">
    <cfargument name="AmericanExpressAmount"        required="no" type="any" default="0.00">
    <cfargument name="ccCountTotal"                 required="no" type="any" default="0">
    <cfargument name="ccAmtTotal"                   required="no" type="any" default="0.00">
    <cfargument name="CheckCount"                   required="no" type="any" default="0">
    <cfargument name="CheckAmount"                  required="no" type="any" default="0.00">
    <cfargument name="CreditIssuedCount"            required="no" type="any" default="0">
    <cfargument name="CreditIssuedAmount"           required="no" type="any" default="0.00">
    <cfargument name="eChecksCount"                 required="no" type="any" default="0">
    <cfargument name="eChecksAmount"                required="no" type="any" default="0.00">
    <cfargument name="CreditRedeemedCount"          required="no" type="any" default="0">
    <cfargument name="CreditRedeemedAmount"         required="no" type="any" default="0.00">
    <cfargument name="GiftCertIssuedCount"          required="no" type="any" default="0">
    <cfargument name="GiftCertIssuedAmount"         required="no" type="any" default="0.00">
    <cfargument name="GiftCardIssuedCount"          required="no" type="any" default="0">
    <cfargument name="GiftCardIssuedAmount"         required="no" type="any" default="0.00">
    <cfargument name="GiftCertRedeemedCount"        required="no" type="any" default="0">
    <cfargument name="GiftCertRedeemedAmount"       required="no" type="any" default="0.00">
    <cfargument name="GiftCardRedeemedCount"        required="no" type="any" default="0">
    <cfargument name="GiftCardRedeemedAmount"       required="no" type="any" default="0.00">
    <cfargument name="VouchersCount"                required="no" type="any" default="0">
    <cfargument name="VouchersAmount"               required="no" type="any" default="0.00">
    <cfargument name="cashDonationsCount"           required="no" type="any" default="0">
    <cfargument name="cashDonationsAmount"          required="no" type="any" default="0.00">
    <cfargument name="ChangeRndUpCount"             required="no" type="any" default="0">
    <cfargument name="ChangeRndUpAmount"            required="no" type="any" default="0.00">
    <cfargument name="ExpectedCashfromRegister"     required="no" type="any" default="0.00">
    <cfargument name="ExpectedCashFromDrawer"       required="no" type="any" default="0.00">
    <cfargument name="CashTotal"                    required="no" type="any" default="0.00">
    <cfargument name="CashTotalAmountEntered"       required="no" type="any" default="0.00">
    <cfargument name="Cashadjust"                   required="no" type="any" default="0.00">
    <cfargument name="ActualCashMinusChangeStock"   required="no" type="any" default="0.00">
    <cfargument name="transactions"                 required="no" type="any" default="0">
    <!--- <cfargument name="totalSalesandTax"           required="no" type="any" default="0.00"/> --->
    <cfargument name="salesTaxadjustment"           required="no" type="any" default="0.00">
    <cfargument name="salesTax"                     required="no" type="any" default="0.00">
    <cfargument name="totalSales"                   required="no" type="any" default="0.00">
    <cfargument name="taxExemptSales"               required="no" type="any" default="0.00">
    <!--- <cfargument name="commercialGoods"                required="no" type="any" default="0.00"/> --->
    <cfargument name="changeStock"                  required="no" type="any" default="0.00">
    <cfargument name="overshort"                    required="no" type="any" default="0.00">
            <!--- local empty variables --->
            <cfset var PutRegSalesInfo ="">
            <cfset var PutRegisterBalanceDetail ="">
            <cfset var PutSalesCategories ="">
            <cfset var PutCCDetail ="">
            <!--- Strip commas and dollar signs from the argument --->
            <cfset OverShort = ReplaceNoCase(ReplaceNoCase(Arguments.overshort,',','','ALL'),'$','','ALL')>
            <cfset ActualCashMinusChangeStock = ReplaceNoCase(ReplaceNoCase(Arguments.ActualCashMinusChangeStock,',','','ALL'),'$','','ALL')>
            <cfset cashTotal = ReplaceNoCase(ReplaceNoCase(Arguments.cashTotal,',','','ALL'),'$','','ALL')>
            <cfset totalSales = ReplaceNoCase(ReplaceNoCase(Arguments.totalSales,',','','ALL'),'$','','ALL')>
            <cfset ExpectedCashFromDrawer = ReplaceNoCase(ReplaceNoCase(Arguments.ExpectedCashFromDrawer,',','','ALL'),'$','','ALL')>

                <cftry>
                    <cftransaction>
                        <cfquery name="PutRegSalesInfo" datasource="#application.dsn.name#">
                            INSERT INTO Data_Org_Location_Register_Totals
                               (
                               nOrganizationID
                               ,nLocationID
                               ,nRegisterNumber
                               ,cCashierFirstName
                               ,cCashierLastName
                               ,dTotalActualCash
                               ,dTotalActualCashLessChangeStock
                               ,nCountCreditCardTransactions
                               ,dTotalCreditCards
                               ,nCountChecks
                               ,dTotalChecks
                               ,nCountEChecks
                               ,dTotalEChecks
                               ,nCountCreditIssued
                               ,dTotalCreditIssued
                               ,nCountCreditRedeemed
                               ,dTotalCreditRedeemed
                               ,nCountGiftCertIssued
                               ,dTotalGiftCertIssued
                               ,nCountGiftCertRedeemed
                               ,dTotalGiftCertRedeemed
                               ,nCountGiftCardIssued
                               ,dTotalGiftCardIssued
                               ,nCountGiftCardRedeemed
                               ,dTotalGiftCardRedeemed
                               ,nCountVouchers
                               ,dTotalVouchers
                               ,nCountCashDonations
                               ,dTotalCashDonations
                               ,dTotalTaxExemptSales
                               ,nCountTransactions
                               ,dTotalSales
                               ,dSalesTax
                               ,dSalesTaxAdjustment
                               ,tEffectiveDate
                               ,nAvailable
                               ,tCreationDate
                               ,nActive
                               ,tLastUpdate
                               ,cChangedBy
                               )
                             VALUES(
                               <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.OrgID#"/>,
                               <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.LocID#"/>,
                               <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.RegNum#"/>,
                               <cfqueryparam cfsqltype="cf_sql_varchar" value="#Arguments.firstName#"/>,
                               <cfqueryparam cfsqltype="cf_sql_varchar" value="#Arguments.LastName#"/>,
                               <cfqueryparam cfsqltype="cf_sql_decimal" value="#DecimalFormat(cashTotal)#"/>,
                               <cfqueryparam cfsqltype="cf_sql_decimal" value="#DecimalFormat(ActualCashMinusChangeStock)#"/>,
                               <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.ccCountTotal#"/>,
                               <cfqueryparam cfsqltype="cf_sql_decimal" value="#DecimalFormat(Arguments.ccAmtTotal)#"/>,
                               <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.CheckCount#"/>,
                               <cfqueryparam cfsqltype="cf_sql_decimal" value="#DecimalFormat(Arguments.CheckAmount)#">,
                               <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.eChecksCount#"/>,
                               <cfqueryparam cfsqltype="cf_sql_decimal" value="#DecimalFormat(Arguments.eChecksAmount)#"/>,
                               <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.CreditIssuedCount#"/>,
                               <cfqueryparam cfsqltype="cf_sql_decimal" value="#DecimalFormat(Arguments.CreditIssuedAmount)#"/>,
                               <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.CreditRedeemedCount#"/>,
                               <cfqueryparam cfsqltype="cf_sql_decimal" value="#DecimalFormat(Arguments.CreditRedeemedAmount)#"/>,
                               <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.GiftCertIssuedCount#"/>,
                               <cfqueryparam cfsqltype="cf_sql_decimal" value="#DecimalFormat(Arguments.GiftCertIssuedAmount)#"/>,
                               <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.GiftCertRedeemedCount#"/>,
                               <cfqueryparam cfsqltype="cf_sql_decimal" value="#DecimalFormat(Arguments.GiftCertRedeemedAmount)#"/>,
                               <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.GiftCardIssuedCount#"/>,
                               <cfqueryparam cfsqltype="cf_sql_decimal" value="#DecimalFormat(Arguments.GiftCardIssuedAmount)#"/>,
                               <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.GiftCardRedeemedCount#"/>,
                               <cfqueryparam cfsqltype="cf_sql_decimal" value="#DecimalFormat(Arguments.GiftCardRedeemedAmount)#"/>,
                               <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.VouchersCount#"/>,
                               <cfqueryparam cfsqltype="cf_sql_decimal" value="#DecimalFormat(Arguments.VouchersAmount)#"/>,
                               <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.CashDonationsCount#"/>,
                               <cfqueryparam cfsqltype="cf_sql_decimal" value="#DecimalFormat(Arguments.CashDonationsAmount)#"/>,
                               <cfqueryparam cfsqltype="cf_sql_decimal" value="#DecimalFormat(Arguments.taxExemptSales)#"/>,
                               <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.Transactions#"/>,
                               <cfqueryparam cfsqltype="cf_sql_decimal" value="#DecimalFormat(totalSales)#"/>,
                               <cfqueryparam cfsqltype="cf_sql_decimal" value="#DecimalFormat(Arguments.salesTax)#"/>,
                               <cfqueryparam cfsqltype="cf_sql_decimal" value="#DecimalFormat(Arguments.salesTaxadjustment)#"/>,
                               <cfqueryparam cfsqltype="cf_sql_date" value="#DateFormat(CreateODBCDateTime(Arguments.effectiveDate), 'dd/mm/yyyy')#"/>,
                               <cfqueryparam cfsqltype="cf_sql_integer" value="#val(1)#"/>,
                               GetDate(),
                               <cfqueryparam cfsqltype="cf_sql_integer" value="#val(1)#"/>,
                               GetDate(),
                               <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.userID#"/>
                               )
                              SELECT SCOPE_IDENTITY() AS New_PutRegSalesInfo_ID
                        </cfquery>

                    <!--- Create random unique Ref number (dont know why this is needed if there is a PK)--->
                        <cfset local.random_part = Randomize(PutRegSalesInfo.New_PutRegSalesInfo_ID, "SHA1PRNG")>
                        <cfset local.UserRefToHash = Now() & "ref" & PutRegSalesInfo.New_PutRegSalesInfo_ID & ":" & local.random_part>
                        <cfset local.NewSalesInfoRefID = Hash(local.UserRefToHash, 'sha-256', 'iso-8859-1')>

                        <cfquery datasource="#application.dsn.name#" name="UpdateRegisterTotalsRef">
                            update  Data_Org_Location_Register_Totals
                            set     cRegisterTotalsRefID = <cfqueryparam cfsqltype="cf_sql_varchar" value="#local.NewSalesInfoRefID#"/>
                            where   nID = <cfqueryparam cfsqltype="cf_sql_integer" value="#PutRegSalesInfo.New_PutRegSalesInfo_ID#"/>
                        </cfquery>

                        <cfquery datasource="#application.dsn.name#" name="PutRegisterBalanceDetail">
                            Insert into Data_Org_Location_Register_BalanceDetail (
                                nRegisterTotalsID,
                                nOrganizationID,
                                nLocationID,
                                dExpectedCashFromRegister,
                                dCashAdjustments,
                                dAdjustedExpectedCashFromRegister,
                                dChangeStock,
                                dOverShort,
                                tCreationDate,
                                nActive,
                                tLastUpdate,
                                cChangedBy
                                )
                            values (
                                <cfqueryparam cfsqltype="cf_sql_integer" value="#PutRegSalesInfo.New_PutRegSalesInfo_ID#"/>,
                                <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.OrgID#"/>,
                                <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.LocID#"/>,
                                <cfqueryparam cfsqltype="cf_sql_decimal" value="#DecimalFormat(Arguments.ExpectedCashFromRegister)#"/>,
                                <cfqueryparam cfsqltype="cf_sql_decimal" value="#Arguments.CashAdjust#"/>,
                                <cfqueryparam cfsqltype="cf_sql_decimal" value="#DecimalFormat(ExpectedCashFromDrawer)#"/>,
                                <cfqueryparam cfsqltype="cf_sql_decimal" value="#DecimalFormat(Arguments.ChangeStock)#"/>,
                                <cfqueryparam cfsqltype="cf_sql_decimal" value="#DecimalFormat(OverShort)#"/>,
                                GetDate(),
                                <cfqueryparam cfsqltype="cf_sql_integer" value="#val(1)#"/>,
                                GetDate(),
                                <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.UserID#"/>
                        )
                    </cfquery>
                    <!--- Get the number of CategoryIDs from the list then loop that many times--->
                     <cfloop index="i" from="1" to="#ListLen(Arguments.CategoryList)#"><!--- loop through the category form fields --->

                        <cfquery name="PutSalesCategories" datasource="#application.dsn.name#">
                            INSERT INTO Data_Org_Location_Register_CategorySales
                               (nOrganizationID
                               ,nLocationID
                               ,nRegisterTotalsID
                               ,nOrgCategoryID
                               ,nCount
                               ,dAmount
                               ,dAdjustment
                               ,dTotal
                               ,nAvailable
                               ,tCreationDate
                               ,nActive
                               ,tLastUpdate
                               ,cChangedBy
                               )
                            VALUES(
                                <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.OrgID#"/>,
                               <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.LocID#"/>,
                               <cfqueryparam cfsqltype="cf_sql_integer" value="#PutRegSalesInfo.New_PutRegSalesInfo_ID#"/>,
                               <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.categoryID[i]#"/>,
                               <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.categoryCount[i]#"/>,
                               <cfqueryparam cfsqltype="cf_sql_decimal" value="#DecimalFormat(Arguments.Amount[i])#"/>,
                               <cfqueryparam cfsqltype="cf_sql_varchar" value="#Arguments.Adjustment[i]#"/>,
                               <cfqueryparam cfsqltype="cf_sql_decimal" value="#DecimalFormat(Arguments.total[i])#"/>,
                               <cfqueryparam cfsqltype="cf_sql_integer" value="#val(1)#"/>,
                               GetDate(),
                               <cfqueryparam cfsqltype="cf_sql_integer" value="#val(1)#"/>,
                               GetDate(),
                               <cfqueryparam cfsqltype="cf_sql_interger" value="#Arguments.UserID#"/>
                               )
                        </cfquery>
                        <cfset i =  i + 1>
                    </cfloop>
                    <cfquery datasource="#application.dsn.name#" name="PutCCDetail">
                        INSERT INTO Data_Org_Location_Register_CreditCardDetail
                           (
                           nRegisterTotalsID
                           ,nOrganizationID
                           ,nLocationID
                           ,nCountVisa
                           ,dTotalVisa
                           ,nCountMasterCard
                           ,dTotalMasterCard
                           ,nCountAmericanExpress
                           ,dTotalAmericanExpress
                           ,nCountDiscover
                           ,dTotalDiscover
                           ,nCountDebit
                           ,dTotalDebit
                           ,nAvailable
                           ,tCreationDate
                           ,nActive
                           ,tLastUpdate
                           ,cChangedBy
                           )
                        VALUES(
                            <cfqueryparam cfsqltype="cf_sql_integer" value="#PutRegSalesInfo.New_PutRegSalesInfo_ID#"/>,
                            <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.OrgID#"/>,
                            <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.LocID#"/>,
                            <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.VisaCount#"/>,
                            <cfqueryparam cfsqltype="cf_sql_decimal" value="#DecimalFormat(Arguments.VisaAmount)#"/>,
                            <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.MasterCardCount#"/>,
                            <cfqueryparam cfsqltype="cf_sql_decimal" value="#DecimalFormat(Arguments.MasterCardAmount)#"/>,
                            <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.AmericanExpressCount#"/>,
                            <cfqueryparam cfsqltype="cf_sql_decimal" value="#DecimalFormat(Arguments.AmericanExpressAmount)#"/>,
                            <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.DiscoverCount#"/>,
                            <cfqueryparam cfsqltype="cf_sql_decimal" value="#DecimalFormat(Arguments.DiscoverAmount)#"/>,
                            <cfqueryparam cfsqltype="cf_sql_integer" value="#Arguments.DebitCount#"/>,
                            <cfqueryparam cfsqltype="cf_sql_decimal" value="#DecimalFormat(Arguments.DebitAmount)#"/>,
                            <cfqueryparam cfsqltype="cf_sql_integer" value="#val(1)#"/>,
                            GetDate(),
                            <cfqueryparam cfsqltype="cf_sql_integer" value="#val(1)#"/>,
                            GetDate(),
                            <cfqueryparam cfsqltype="cf_sql_interger" value="#Arguments.UserID#"/>
                           )
                    </cfquery>
            </cftransaction>
        <cfreturn true>
        <cfcatch>
            <cfinvoke method="errorHandler" argumentcollection="#ARGUMENTS#" />
        </cfcatch>
    </cftry>
</cffunction>

【问题讨论】:

  • 好吧,函数签名说它应该返回一些东西:returntype="boolean"。如果它不应该返回任何东西,请使用returnType="void".

标签: coldfusion-10 cfc


【解决方案1】:

如果你的 catch 块被执行,就不会返回。 也许您想返回 false 作为 cfcatch 的最后一行。 否则将 cfreturn true 作为函数的最后一行。 你能验证一下 catch 块没有被执行吗?

【讨论】:

  • 正在执行 catch 块,这基本上给了我电子邮件中的 CFC 错误转储。当我注释掉 catch 块时,我看到的代码行也有错误。谢谢你。但是,循环现在导致了一个问题,即“i”值中的数字未动态放置在其位置。例如:如果它循环了 3 次,“i”应该在第一个循环中为 1,在第二个循环中为 2,在最后一个循环中为 3。
  • 你也应该 var scope i。 cfset var i = 1 在循环之前。
  • 即使在循环之前添加了 语句,我仍然得到“categoryID is undefined”。这是正确的。但是它应该是 categoryID1。
  • 一个函数的代码太多了。我没有时间查看所有代码,但据我所知,错误消息是准确的。参数范围内没有CategoryID 变量,与其他一些变量相同。此外,代码将不存在的变量引用为数组,但很难判断您正在使用什么类型的变量,因为所有内容都是“any”类型。把它分成小块。一次测试一件。旁注,这是一个与所问问题完全不同的问题。考虑打开一个新线程,并包括任何错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-26
  • 2010-10-20
  • 2015-02-25
相关资源
最近更新 更多