1

だから、私はほとんどバグを追いかけて夜を過ごしました....それを見つけましたが、何が悪いのかわかりません。

Coldfusion2 つのメールを送信するスクリプトがあります。両方のメールは、次のcfinvokeように呼び出しているメーラー スクリプトに含まれています。

<cfinvoke component="form_mailer_basket" method="msg_order_seller"> 
... parameters
</cfinvoke>

<cfinvoke component="form_mailer_basket" method="msg_order_retailer">
... parameters
</cfinvoke>

両方のメール パラメータは問題ありませんが、2 番目のメーラーはエラーをスローします。

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. 
************************************************************************************ 

質問:
上の 5 行の最初のスクリプトではコンポーネントが検出できるのに、2 番目のメールではコンポーネントが検出されない理由を誰か教えてもらえますか?

ありがとう!

編集:
両方のメソッドを呼び出すための私のコードは次のとおりです。

<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>

最初のものは機能しますが、2 つ目は機能しません。メソッド名は正しく、すべてのパラメーターは問題ありません (argumentsColletion を使用する必要があることはわかっています...)。あとでチェック!

そして、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>     
4

3 に答える 3

3

問題の原因を突き止めようとするのではなく、単に問題を解決したいだけなら、私からの提案があります。同じコンポーネントに対して cfinvoke タグを何度も使用する代わりに、cfobject または CreateObject() のいずれかを使用して、そのインスタンスを 1 つだけ作成します。次に、メソッドを直接呼び出します。

現在のアプローチが機能したとしても、私の提案よりも遅くなります。cfinvoke は、呼び出すたびにオブジェクトを作成するため、処理に時間がかかります。

于 2012-11-21T12:45:38.047 に答える
2

両方の方法が存在し、公開されていることを確認しますか?

于 2012-11-21T04:06:07.193 に答える
1
  1. cfc で cfinclude を使用することは良い習慣ではありませんが、確かに私も時々それをしなければなりませんでした。
  2. あなたのエラーは、コンポーネントCould not find the ColdFusion Component or Interface form_mailer_basket自体に何かが起こっていることを暗示しているようです-メソッドの return ステートメントと関係があると思われます。Init()
  3. CF の以前のバージョン (バージョン 6/7 あたり、おそらく 8 だと思います) では、cfc 内に同じ名前の変数を設定することで、関数を上書きできました。実行しているCFのバージョンについては言及していません。
于 2012-11-23T11:19:44.943 に答える