Reputation: 28483
So, I have allmost spend the night chasing a bug.... found it and no idea what is wrong.
I have script in Coldfusion
which sends two emails. Both mails are in a mailer script which I'm calling with cfinvoke
like so:
<cfinvoke component="form_mailer_basket" method="msg_order_seller">
... parameters
</cfinvoke>
<cfinvoke component="form_mailer_basket" method="msg_order_retailer">
... parameters
</cfinvoke>
Both mail parameters are all ok, but the 2nd mailer throws an error:
mailer orders
************************************************************************************
type: Application
************************************************************************************
message: Could not find the ColdFusion Component or Interface form_mailer_basket.
************************************************************************************
detail: Ensure that the name is correct and that the component or interface exists.
************************************************************************************
Question:
Can anyone tell me why the 2nd mail cannot find the component when the first script 5 lines above can?
Thanks!
EDIT:
Here is my code for calling both methods:
<cfif new_mail.recordcount GT 0>
<cfloop query="new_mail">
<cfset variables.newMail = new_mail.email_bestelleingang>
<cfinvoke component="form_mailer_basket" method="msg_order_seller">
<cfinvokeargument name="delDate" value="#variables.liefdatum_mail#"/>
<cfinvokeargument name="delMsg" value="#variables.bestell_text_mail#"/>
<cfinvokeargument name="delOrd" value="#LOCAL.Basket.bestelltyp#"/>
<cfinvokeargument name="mailto" value="#variables.newMail#"/>
<cfinvokeargument name="client" value="#LOCAL.Basket.re_firma#"/>
<cfinvokeargument name="rebate" value="#variables.kopf_rabatt#"/>
<cfinvokeargument name="sellerIln" value="#variables.iln_verkaeuferNEU#"/>
<cfinvokeargument name="ordNo" value="#variables.bestellnummer_neu#"/>
</cfinvoke>
</cfloop>
</cfif>
...
<cfloop query="active_check">
<cfif active_check.freigeschaltet NEQ "1" AND active_check.freigeschaltet NEQ "0">
<cfinvoke component="form_mailer_basket" method="msg_order_retailer">
<cfinvokeargument name="delDate" value="#variables.liefdatum_mail#" />
<cfinvokeargument name="delOrd" value="#LOCAL.Basket.bestelltyp#" />
<cfinvokeargument name="mailto" value="#variables.cusMail#" />
<cfinvokeargument name="client" value="#order_recipients.firma#" />
<cfinvokeargument name="rebate" value="#variables.kopf_rabatt#" />
<cfinvokeargument name="sellerIln" value="#variables.iln_verkaeuferNEU#" />
<cfinvokeargument name="ordNo" value="#variables.bestellnummer_neu#" />
<cfinvokeargument name="total" value="#variables.gesamtsumme#" />
<cfinvokeargument name="menge" value="#variables.gesamtmenge#" />
<cfinvokeargument name="curr" value="#variables.waehrung#" />
<cfinvokeargument name="agentF" value="#variables.agentFirma#" />
<cfinvokeargument name="agentN" value="#variables.agentName#" />
</cfinvoke>
</cfif>
</cfloop>
First one works, second one doesn't. Method names are correct, all parameters are ok (I know I should use an argumentsColletion...), so I'm clueless and need to take a nap. Checking back later!
And the cfc:
<cfcomponent output="false" hint="basket mailing cfc - sends out all basket related mail messages">
<!--- LOAD LANGUAGES --->
<cfinclude template="../templates/tmp_lang.cfm">
<!--- INIT --->
<cffunction name="Init" access="public" returntype="any" output="false" hint="Initialize">
<!--- nothing here for now --->
<cfreturn true />
</cffunction>
... msgs like this:
<!--- NEW ORDER SELLER --->
<cffunction name="msg_order_seller" access="public" output="false" hint="msg for new orders">
<cfargument name="delDate" type="date" required="true" hint="delivery date" />
<cfargument name="delMsg" type="string" required="true" hint="text message by retailer" />
<cfargument name="delOrd" type="string" required="true" hint="order type pre/asap" />
<cfargument name="mailto" type="string" required="true" hint="email adress" />
<cfargument name="client" type="string" required="true" hint="buyer" />
<cfargument name="rebate" type="string" required="true" hint="rebate 1/0" />
<cfargument name="sellerIln" type="string" required="true" hint="seller ILN" />
<cfargument name="ordNo" type="string" required="true" hint="order number" />
<cfprocessingdirective suppresswhitespace="No">
<cfmail
TO="#mailto#"
FROM="automailer@..."
SERVER="mail.bbb.de"
USERNAME="ddd"
PASSWORD="123456"
SUBJECT="#tx_automailer_order_new# - #client#">
#tx_automailer_default_anrede#
#tx_automailer_order_info#
#tx_automailer_order_type#: #ordertype# #rebateTxt#
#tx_automailer_order_del#: #deliveryDate#
#tx_automailer_order_no#: #ordNo#
#tx_automailer_order_date#: #DateFormat(now(),"dd.Mm.yyyy")#
#tx_kaeufer#: #client#
#tx_automailer_order_msg#:
#delMsg#
#tx_automailer_order_iln#: #sellerIln#
#tx_automailer_default_gruss#
#tx_automailer_default_team#
-------------
#tx_automailer_default_disclaimer#
</cfmail>
</cfprocessingdirective>
<cfreturn />
</cffunction>
...
</cfcomponent>
Upvotes: 1
Views: 282
Reputation: 3353
Could not find the ColdFusion Component or Interface form_mailer_basket
seems to imply that something happens to the component itself - I suspect it has something to do with your return statement in Init()
method.Upvotes: 1
Reputation: 20794
If you just want to solve your problem instead of trying to figure out what is causing it, I have a suggestion. Instead of using the cfinvoke tag for the same component many times, use either cfobject or CreateObject() to make just one instance of it. Then call the methods directly.
Even if you do get your current approach to work, it will be slower than my suggestion. cfinvoke creates an object each time you call it and that takes processing time.
Upvotes: 3