0

アプリケーションから送信するすべての電子メールを処理する CFC ファイルがあります (Coldfusion8 を使用)。

私は CFINVOKE を使用して、この CFC 内のそれぞれの関数を呼び出し、次のようにすべてのユーザー データを含む構造体を渡しました。

<cfscript>  
var User.data = {};
    User.data.name = "John Doe";
    User.data.email = "john@doe.com";
    ...
</cfscript>     
// call mailer
<cfinvoke component="mailer_user" method="say_hi">
    <cfinvokeargument name="userData" value="#User.data#">
</cfinvoke>

そして私のmailer.cfcの中に

<cffunction name="say_hi" access="public" output="false">
    <cfargument name="userData" type="struct" required="true" /> 
 ....

何らかの理由でこれは失敗し、フィールドをcfargumentとして個別に渡す場合にのみ機能させることができます。これは、大量のデータを渡すため、苦痛です。

質問: argumentCollectionを使用してこれを機能させるにはどうすればよいですか。

私がこのようにCFINVOKEしたとしても:

 <cfinvoke component="mailer_user" argumentcollection="#User.data#" method="say_hi"></cfinvoke>

それはまだ何もしません。cfinvoke の直前と直後、および出入りする「say_hi」関数内で出力フラグを設定しています。CFINVOKEの前にフラグを取得しているだけです。

補足: これはすべて AJAX を介して行われ、CFC のどこかにエラーがある場合にのみ success="false" が返されます。システム上でリモートで作業するだけなので、CFADMIN で AJAX デバッグを設定できません

4

4 に答える 4

2

書くことでcfscriptスタイルにとどまるべきだと思います

// call mailer
mailUser = createObject("component", "mailer_user");    // or new mailer_user(); for CF9+
mailUser.say_hi(User.data);

それは機能するはずですが、機能しない場合は、コード内の別の場所にあります。エラーログを見てみてください。

于 2012-07-18T07:50:05.037 に答える
1

変数を渡すデータにマップする必要があります。その後、構造体を送信しても問題ありません。こうすれば

<cfset objMailer = createObject("component","mailer_user") />

<cfset objMailer.say_hi(userData:user.data)/>

これはCF7でも機能します。

于 2012-07-19T07:14:42.013 に答える
0

Ok。メーラーの CFC 内にタイプミスがあり、"##" を含む変数がありました。メールの本文にあったままだったので、気付かれませんでした...

したがって、これを使用して struct allright を渡すことができます。

<cfinvoke component="mailer_user" method="say_hi">
    <cfinvokeargument name="userData" value="#User.userdata#">
</cfinvoke>

次のように、呼び出された関数内でそれを取得します。

<cffunction name="say_hi" access="public" output="false" hint=""> 
    <cfargument name="userData" type="struct" required="true" hint="user data  passed" /> 
    <cfscript>  
        var internalInfo = "";
        var User = {};
        User.userdata = userData;                   
    </cfscript> 
    ...

他の誰かがスニペットを使用できる可能性があります。

于 2012-07-18T08:37:14.583 に答える