I haven't tried to pass a struct over to a CFC but I have passed an array over 
without the need for an extra parameter.

Flex (stripped down):

var formData:Array = new Array();
var obj:Object;

for(var i:int = 0; i< formParams.length; i++)
{
        obj = formParams[i] as Object;
        if(obj.className == 'TextArea' && (obj as TextArea).editable)
        {
                formData.push( { name:obj.name,data:(obj as 
TextArea).htmlText,dataCheck:(obj as TextArea).text} );
        }
        else ...
}

report.postForm(formData);


CFC (stripped down):

<cffunction name="postForm" access="remote" returntype="query" output="true">
        <cfargument name="formData" type="array">

        <cfloop from="1" to="#arrayLen(formData)#" index="i">

                <cfif ListLen(formData[i].name,'.') EQ 4 >
                        <cfset formID = getToken(formData[i].name,1,'.')>
                        ...

Tommy Geist
United Parcel Service
Program Management Group (PMG)
Atlas : 5 - 490 - 6418

-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf Of [email protected]
Sent: Thursday, June 03, 2010 4:50 AM
To: [email protected]
Subject: RE: [AFFUG Discuss] Newbie questions on Flex for email notification 
and form review

Chris,

I think this might be what you need after thinking a bit more about the issue 
you described. Some background info is included (I apologize if it seems 
verbose).

I created a test Flex app (it's Flex 4/Flash Builder 4) and a single function 
CFC to emulate what you're trying to accomplish. I found (and I remember that 
this is something that has existed in Flex/CF since at least Flex 1.5) that 
when you try to pass a simple Flex Object as a CF struct (I did not see how you 
are actually calling the CFC in your Flex app, but suspect you are trying to 
pass a Flex Object as a single entity to CF), you need to apply a bit of 'black 
magic' - passing an extra parameter in the remote object call or CF will 
complain that the struct is required but was not passed in (Element 
FORM_DATA.EMAIL is undefined in ARGUMENTS). Of course you think you're passing 
the object to CF, and you are, but "Notice Coldfusion didn?t treat the Flex 
object as 1 argument" (according to this link:
http://www.joelconnett.com/flexobjectstocoldfusion.html).
The technique I usually use is shown below (it is just easier to type):

You can pass in a dummy extra parameter like I have in the code below (note the 
'' empty string that I pass to the CFC function in line 24:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009";
        xmlns:s="library://ns.adobe.com/flex/spark"
creationComplete="appLoaded()"
        xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955"
minHeight="600">
        <fx:Declarations>
                <mx:RemoteObject id="roTest"
                        destination="ColdFusion"
                        endpoint="http://localhost/flex2gateway/";
                        source="prototypes.test"
                        showBusyCursor="true">
                        <mx:method name="recoverPassword"
result="recoverPasswordHandler(event)" fault="roFaultHandler(event)"/>
                </mx:RemoteObject>
        </fx:Declarations>
        <fx:Script>
                <![CDATA[
                        import mx.controls.Alert;
                        import mx.rpc.events.FaultEvent;
                        import mx.rpc.events.ResultEvent;
                        import mx.utils.ObjectUtil;

                        private function appLoaded(): void {
                                var objUser:Object = new Object();
                                objUser.email = '[email protected]';
line 24                         roTest.recoverPassword(objUser, '');
                        }

                        private function 
recoverPasswordHandler(eventObj:ResultEvent): void {
                                if (eventObj.result){
                                        Alert.show('Your credentials have been 
sent to the email address on file.', 'Password Recovery Confirmation');
                        } else {
                               Alert.show('The email address that you supplied 
was not found in our records.', 'Email Not Found');
                r               }
                        }

                        private function roFaultHandler(event:FaultEvent): void 
{
                                Alert.show(ObjectUtil.toString(event.fault));
                        }
                ]]>
        </fx:Script>

</s:Application>

The CFC I used, test.cfc is shown below (* NOTE: you would need to modify the 
cfquery section to match your database and cfadmin
datasource)

<cfcomponent output="false">

        <!--- Password Retrieval --->
        <cffunction name="recoverPassword" access="remote"
returntype="boolean">
                <cfargument name="form_data" type="struct">
                <cfset var accountCheck="">
                <cftry>

                        <cfquery datasource="your_datasource" 
name="accountCheck">
                                SELECT clientEmail, clientName, tmppassword
                                FROM
                                sometable

                                WHERE clientEmail = 
'#arguments.form_data.email#'
                        </cfquery>

                        <cfif accountCheck.recordcount>

                                <cfmail from="[email protected]" 
to="#accountCheck.clientEmail#"
subject="Credentials Request" type="html">

                                Dear #accountCheck.clientName#, <br /><br />

                                You have requested that we send your login 
credentials for the system on #DateFormat(now(), 'MMMM DD, YYYY')#.

                                <br /><br />

                                Your log-in information:<br />

                                <b>Email address:</b> 
#accountCheck.clientEmail#<br />

                                <b>Password:</b>
                                #accountCheck.tmppassword#      <br /><br />


                                If you did not request your login credentials, 
please contact us immediately at

                                <a 
href="mailto:[email protected]";>[email protected]</a>:<br /><br />

                                <span style="color:red; font-weight:bold; 
font-style:italic;">Please do not reply to this email</span>

                                </cfmail>

                                <cfreturn true/>

                        <cfelse>

                                <cfreturn false/>

                        </cfif>




                <cfcatch>

                <cfsavecontent variable="contentSaver">


                <cfdump var="#cfcatch#">

                </cfsavecontent>


                <cffile action="write" file="#ExpandPath('.')#\debug.html"
output="#contentSaver#">

                <cfreturn false/>
                </cfcatch>

                </cftry>
        </cffunction>

</cfcomponent>

Of note, I tried the
"http://www.joelconnett.com/flexobjectstocoldfusion.html link" technique three 
too, and that also worked for me.

                        private function appLoaded(): void {
                                var objUser:Object = new Object();
                                objUser.email = '[email protected]';
                                var objWrapper:Object = new Object();
                                objWrapper = {form_data : objUser};
                                roTest.recoverPassword(objWrapper);
                        }

Regards,

Mike

> -------- Original Message --------
> Subject: Re: [AFFUG Discuss] Newbie questions on Flex for email
> notification and form review
> From: "[email protected]" <[email protected]>
> Date: Thu, June 03, 2010 11:57 am
> To: [email protected]
>
> 1. Declaring/initializing your query name is a best practice. Do a
> google search about why setting vars in CFC functions is a good idea
> for a better answer or maybe somebody else can chime in on this one?
>
> 2. I missed that you would need to return a boolean in the catch, so
> thanks to the CF server for the reminder to both of us, but I would
> return a false, since it means that the email did not get sent. As to
> the cfmail mechanics and why the try is catching an error, are you
> 100% certain you are not blowing up with any syntax errors in the try
> portion of your code? What does the catch message your writing out say?
> Also, test cfmail with a simple test case where the email address is
> hard-coded to your own address and watch the spool folder. You can do
> a quick copy and paste from the cf spool folder to your desktop,
> tamper with it in a text editor in some way that will prevent the cf
> server from successfully sending the email, save the file, and paste
> it back to the cf spool folder - this should test your third-party
> respooler. Once you're convinced it works, delete the intentionally
> mangled email file you created. All of this said, is to ensure that
> cfmail and your third-party tool are talking to each other.
>
> Back to your cfmail tag in your CFC function... double-check that your
> db query is returning the data you think it is by trying the query
> outside the function - something as innocent-appearing as a misnamed
> columm name could be wreaking havoc. Is email the column name? I'm not
> looking at your code as I type this, but maybe your
> queryname.recordcount eliminates that possibility, but the bottomline
> is the try is failing, so as I mentioned what you capture in your
> catch section should help - you can play with the type of catch and say 'all'
> so u see what type of error you are getting.
>
> Finally on the Flex-side of things my suggested code was to help get
> rid of the null object exception - by passing true or false from your
> CFC function, you will get one of your alerts (now that you pass a
> boolean in your catch block too - return a false though if the try fails.
>
>
> Hope this helps some.
>
> Mike
>
> > -------- Original Message --------
> > Subject: Re: [AFFUG Discuss] Newbie questions on Flex for email
> > notification and form review
> > From: Chris H <[email protected]>
> > Date: Thu, June 03, 2010 8:19 am
> > To: [email protected]
> >
> >
> >    Hi Michael,
> >    Thanks for the reply.
> >    Two points I did not
> >    understand.
> >    1. Why did we need a <cfset
> >    var accountCheck="">  on the
> >    CF side when there was a query
> >    named accountcheck as
> >    <cfquery
> >    datasource="#Application.ds#"
> >    name="accountCheck">
> >                        SELECT
> >    email, fname, lname, password
> >                        FROM
> >    user_accounts
> >                        WHERE
> >    email =
> >    '#form_data.email#<cfif
> >    form_data.email does not
> >    contain
> >    '@domain.com'>@domain.com</cfi
> >    f>'
> >                    </cfquery>
> >    What was the reason for adding
> >    a variable accountCheck?
> >    Because in the if block in the
> >    CF side we are testing <cfif
> >    accountCheck.recordcount>
> >    which was based on the result
> >    of above query so is there any
> >    reason/purpose for setting
> >    accountCheck to empty string?
> >    2. On the CF side cfmail is
> >    failing in the try block as
> >    there is no mail server so it
> >    was going to the catch block
> >    where no true/false was being
> >    returned so I got the message
> >    "Unable to invoke CFC
> >    recoverPassword as the return
> >    type is not boolean. I added a
> >    <cfreturn true />  in the
> >    catch part and the error
> >    message disappeared.
> >    Since in the recoverPassword
> >    on the Flex side, the
> >    eventObj.result is not being
> >    modified in CFC
> >    recoverPassword it has value
> >    false and so we go into the
> >    else part where I get the
> >    message Alert.show(''The email
> >    address that you supplied was
> >    not found in our records.",
> >    'Email Not Found');
> >    I saw nothing was present in
> >    SpoolMail to. My intent was to
> >    test if the cfmail
> >    functionality works and if so
> >    the undelivered mails should
> >    be displayed using a
> >    SpoolMail, but they are not.
> >    How do I know now if the
> >    cfmail worked properly or not?
> >    Can you please clarify?
> >    Sorry, if my questions are
> >    naive, but I am pretty new to
> >    ColdFusion/Flex.
> >    Thanks
> >      _________________________
> >    From: Michael Givens
> >    <[email protected]>
> >    To: [email protected]
> >    Sent: Wed, June 2, 2010
> >    6:48:32 PM
> >    Subject: Re: [AFFUG Discuss]
> >    Newbie questions on Flex for
> >    email notification and form
> >    review
> >    Try this on the Flex-side (the
> >    modified CFC function [see
> >    below] returns a Boolean):
> >    public function
> >    recoverPassword(eventObj:Resul
> >    tEvent):void{
> >                if
> >    (eventObj.result){
> >    Alert.show(''Your credentials
> >    have been sent to the email
> >    address on file.', 'Password
> >    Recovery Confirmation');
> >    currentState = '';
> >                } else {
> >    Alert.show(''The email address
> >    that you supplied was not
> >    found in our records.', 'Email
> >    Not Found');
> >                }
> >    }
> >    On the CF-side:
> >    <!--- Password Retrieval
> >    --->
> >        <cffunction
> >    name="recoverPassword"
> >    access="remote"
> >    returntype="boolean">
> >            <cfargument
> >    name="form_data"
> >    type="struct">
> >            <cfset var
> >    accountCheck="">
> >            <cftry>
> >                    <cfquery
> >    datasource="#Application.ds#"
> >    name="accountCheck">
> >                        SELECT
> >    email, fname, lname, password
> >                        FROM
> >    user_accounts
> >                        WHERE
> >    email =
> >    '#form_data.email#<cfif
> >    form_data.email does not
> >    contain
> >    '@domain.com'>@domain.com</cfi
> >    f>'
> >                    </cfquery>
> >                    <cfif
> >    accountCheck.recordcount>
> >                        <cfmail
> >    from="[email protected]"
> >    to="#accountCheck.email#"
> >    subject="Credentials Request"
> >    type="html">
> >                            Dear
> >    #accountCheck.fname#
> >    #accountCheck.lname#, <br
> >    /><br />
> >                            You
> >    have requested that we send
> >    your login credentials for the
> >    system on #DateFormat(now(),
> >    'MMMM DD,YYYY')#.
> >                            <br
> >    /><br />
> >                            Your
> >    log-in information:<br />
> >    <b>Email address:</b>
> >    #accountCheck.email#<br />
> >    <b>Password:</b>
> >    #accountCheck.password#
> >                            <br
> >    /><br />
> >                            If you
> >    did not request your login
> >    credentials, please contact us
> >    immediately at <a
> >    href="mailto:[email protected]";
> >    >[email protected]</a>:
> >                            <br
> >    /><br />
> >                            <span
> >    style="color:red;
> >    font-weight:bold;
> >    font-style:italic;">Please do
> >    not reply to this email</span>
> >                        </cfmail>
> >                        <cfreturn
> >    true />
> >                    <cfelse>
> >                        <cfreturn
> >    false/>
> >                    </cfif>
> >
> >                <cfcatch>
> >    <cfsavecontent
> >    variable="contentSaver">
> >
> >    <cfdump var="#cfcatch#">
> >    </cfsavecontent>
> >                        <cffile
> >    action="write"
> >    file="#ExpandPath('.')#\debug.
> >    html" output="#contentSaver#">
> >                </cfcatch>
> >            </cftry>
> >        </cffunction>
> >    ----- Original Message -----
> >    From: Chris H
> >    To: [email protected]
> >    Sent: Thursday, June 03, 2010
> >    3:19 AM
> >    Subject: Re: [AFFUG Discuss]
> >    Newbie questions on Flex for
> >    email notification and form
> >    review
> >    Tom,
> >    Whenever my application tries
> >    to send a mail using the
> >    CFMAIL functionality it either
> >    crashes or no mails show up in
> >    SpoolMail.
> >    Before I installed SpoolMail,
> >    my Coldfusion/Flex application
> >    was crashing due to reference
> >    to a null object eventObj
> >    which made me think that since
> >    I have no mail server
> >    installed, it is occurring
> >    when CFMAIL tries to send an
> >    email and posted here on May
> >    26.
> >    The application has a
> >    functionality something like
> >    the below for Recovering
> >    password function.
> >    User clicks a button in the
> >    Flex front end, enters his
> >    mail address, after which a
> >    function called
> >    recoverPassword is called in
> >    the "login.mxml" file which
> >    has code as
> >    public function
> >    recoverPassword(eventObj:Resul
> >    tEvent):void{
> >
> >    if(eventObj.result.status ==
> >    'true'){
> >    Alert.show(eventObj.result.sta
> >    tusMsg, 'Password Recovery
> >    Confirmation');
> >    currentState = '';
> >                        }
> >                        else{
> >    Alert.show(eventObj.result.err
> >    Msg, 'Email Not Found');
> >                        }
> >    }
> >    In the ColdFusion component
> >    file, there is a function
> >    <!--- Password Retrieval
> >    --->
> >        <cffunction
> >    name="recoverPassword"
> >    access="remote"
> >    returntype="any">
> >            <cfargument
> >    name="form_data"
> >    type="struct">
> >            <cftry>
> >                    <cfquery
> >    datasource="#Application.ds#"
> >    name="accountCheck">
> >                        SELECT *
> >                        FROM
> >    user_accounts
> >                        WHERE
> >    email =
> >    '#form_data.email#<cfif
> >    form_data.email does not
> >    contain
> >    '@domain.com'>@domain.com</cfi
> >    f>'
> >                    </cfquery>
> >                    <cfif
> >    accountCheck.recordcount>
> >                        <cfmail
> >    from="[email protected]"
> >    to="#accountCheck.email#"
> >    subject="Credentials Request"
> >    type="html">
> >                            Dear
> >    #accountCheck.fname#
> >    #accountCheck.lname#, <br
> >    /><br />
> >                            You
> >    have requested that we send
> >    your login credentials for the
> >    system on #DateFormat(now(),
> >    'MMMM DD,YYYY')#.
> >                            <br
> >    /><br />
> >                            Your
> >    log-in information:<br />
> >    <b>Email address:</b>
> >    #accountCheck.email#<br />
> >    <b>Password:</b>
> >    #accountCheck.password#
> >                            <br
> >    /><br />
> >                            If you
> >    did not request your login
> >    credentials, please contact us
> >    immediately at <a
> >    href="mailto:[email protected]";
> >    >[email protected]</a>:
> >                            <br
> >    /><br />
> >                            <span
> >    style="color:red;
> >    font-weight:bold;
> >    font-style:italic;">Please do
> >    not reply to this email</span>
> >                        </cfmail>
> >                        <cfset
> >    result['status'] = true>
> >                        <cfset
> >    result['statusMsg'] = 'Your
> >    credentials have been sent to
> >    the following email address:
> >    #accountCheck.email#'>
> >                    <cfelse>
> >                        <cfset
> >    result['errMsg'] = 'The email
> >    address that you supplied was
> >    not found in our records.'>
> >                        <cfset
> >    result['status'] = false>
> >                    </cfif>
> >
> >                <cfreturn result>
> >                <cfcatch>
> >    <cfsavecontent
> >    variable="contentSaver">
> >
> >    <cfdump var="#cfcatch#">
> >    </cfsavecontent>
> >                        <cffile
> >    action="write"
> >    file="#ExpandPath('.')#\debug.
> >    html" output="#contentSaver#">
> >                </cfcatch>
> >            </cftry>
> >        </cffunction>
> >    Before I installed SpoolMail
> >    the application crashed at
> >    public function
> >    recoverPassword(eventObj:Resul
> >    tEvent):void as the eventObj
> >    was null so trying to access
> >    eventObj.result.status
> >    resulted in an access
> >    violation.
> >    After I installed SpoolMail it
> >    is still crashing and nothing
> >    shows up in SpoolMail. I
> >    commented out the function
> >    public function
> >    recoverPassword(eventObj:Resul
> >    tEvent):void, but still
> >    nothing shows up in SpoolMail.
> >    Am I missing something?
> >    Any advice would be
> >    appreciated?
> >    Thanks
> >      _________________________
> >    From: Tom McNeer
> >    <[email protected]>
> >    To: [email protected]
> >    Sent: Wed, May 26, 2010
> >    4:53:39 PM
> >    Subject: Re: [AFFUG Discuss]
> >    Newbie questions on Flex for
> >    email notification and form
> >    review
> >    Chris,
> >    On Wed, May 26, 2010 at 4:10
> >    PM, Chris H
> >    <[email protected]> wrote:
> >    I tried Spoolmail, but could
> >    not see any section named
> >    Custom Extensions in the
> >    ColdFusion Administrator in my
> >    browser(Firefox 3.6) after I
> >    copied the Spoolmail files
> >    into the web root at:
> >    /CFIDE/admistrator and
> >    creating the
> >    extensionscustom.cfm as
> >    explained in the install.doc
> >    file.
> >    I'm afraid I have no way of
> >    knowing the problem. If the
> >    files are in the correct
> >    place, the "Custom Extensions"
> >    menu choice should be
> >    available at the bottom of the
> >    left-hand menu in CF Admin.
> >    Clicking it will reveal the
> >    SpoolMail link.
> >    In extensions section in the
> >    Coldfusion administrator, all
> >    I see is Java Applets, CFX
> >    Tags, Custom Tag Paths, CORBA
> >    Connectors
> >    Yep. But that's the wrong
> >    place. The "Custom Extensions"
> >    choice is separate from
> >    "Extensions." It's probably
> >    the last choice in the
> >    left-hand menu.
> >    If you're certain that all
> >    files are correct, and in the
> >    correct place, I guess you
> >    could try restarting the CF
> >    service. The SpoolMail docs
> >    don't mention it, and I can't
> >    imagine why it should be
> >    necessary, but you could try
> >    it.
> >    I've installed SpoolMail on
> >    several machines. If it's set
> >    up correctly, it always works.
> >    Next, Spoolmail is used for
> >    reading mail only meaning an
> >    email server is required for
> >    testing and Spoolmail will be
> >    helpful in reading it?
> >    Or, is no mail server required
> >    if using Spoolmail?
> >    You don't need a mail server.
> >    The actual mail message is
> >    created and formatted properly
> >    by the CFMAIL functionality.
> >    If ColdFusion cannot connect
> >    to a mail server, it places
> >    the message in its
> >    "undelivered" folder. You can
> >    find it at
> >    {CFInstallDirectory}/Mail/Unde
> >    livr.
> >    SpoolMail just looks into this
> >    directory and displays what's
> >    there.
> >    --
> >    Thanks,
> >    Tom
> >    Tom McNeer
> >    MediumCool
> >    http://www.mediumcool.com
> >    1735 Johnson Road NE
> >    Atlanta, GA 30306
> >    404.589.0560
> >      ---------------------------
> >      ---------------------------
> >      -------
> >      To unsubscribe from this
> >      list, simply email the list
> >      with unsubscribe in the
> >      subject line
> >      For more info, see
> >      http://www.affug.com
> >      Archive @
> >      http://www.mail-archive.com
> >      /discussion%40affug.com/
> >      List hosted by FusionLink
> >      ---------------------------
> >      ---------------------------
> >      -------
> >    ------------------------------
> >    ------------------------------
> >    -
> >    To unsubscribe from this list,
> >    simply email the list with
> >    unsubscribe in the subject
> >    line
> >    For more info, see
> >    http://www.affug.com
> >    Archive @
> >    http://www.mail-archive.com/di
> >    scussion%40affug.com/
> >    List hosted by FusionLink
> >    ------------------------------
> >    ------------------------------
> >    -
> >    ------------------------------
> >    ------------------------------
> >    -
> >    To unsubscribe from this list,
> >    simply email the list with
> >    unsubscribe in the subject
> >    line
> >    For more info, see
> >    http://www.affug.com
> >    Archive @
> >    http://www.mail-archive.com/di
> >    scussion%40affug.com/
> >    List hosted by FusionLink
> >    ------------------------------
> >    ------------------------------
> >    -
>
>
>
> -------------------------------------------------------------
> To unsubscribe from this list, simply email the list with unsubscribe
> in the subject line
>
> For more info, see http://www.affug.com Archive @
> http://www.mail-archive.com/discussion%40affug.com/
> List hosted by http://www.fusionlink.com
> -------------------------------------------------------------



-------------------------------------------------------------
To unsubscribe from this list, simply email the list with unsubscribe in the 
subject line

For more info, see http://www.affug.com
Archive @ http://www.mail-archive.com/discussion%40affug.com/
List hosted by http://www.fusionlink.com
-------------------------------------------------------------


-------------------------------------------------------------
To unsubscribe from this list, simply email the list with unsubscribe in the 
subject line

For more info, see http://www.affug.com
Archive @ http://www.mail-archive.com/discussion%40affug.com/
List hosted by http://www.fusionlink.com
-------------------------------------------------------------


Reply via email to