I'm jonny-come-lately to this thread, but I send and return arrays and structures to/from CFCs all the time. I've abandoned passing back CFQueries as such but convert them to an array of structures first as that is what Flex UIComponents seem to like.
Example code: <cffunction name="getIndustryCategories" returntype="array" access="public"> <cfset var arrResult = ArrayNew(1)/> <cfset var stItem = StructNew()/> <cfstoredproc procedure="sp_GetIndustryCategories" datasource="#getDataSource()#"> <cfprocresult name="qryCats"/> </cfstoredproc> <cfoutput query="qryCats"> <cfset stItem = StructNew()/> <cfset stItem["label"] = label/> <cfset stItem["data"] = data/> <cfset arrayAppend(arrResult,stItem)/> </cfoutput> <cfreturn arrResult/> </cffunction> If you were dealing with a dynamic list of columns the code could be altered as such: <cfoutput query="qryCats"> <cfset stItem = StructNew()/> <cfloop list="#qryCats.columnList#" index="i"> <cfset stItem[i] = qryCats[i][currentrow]/> </cfloop> <cfset arrayAppend(arrResult,stItem)/> </cfoutput> Produced in this fashion, Flex WILL accept this result as an array of structures. I'm mystified at the problem you're experiencing. Jeff -----Original Message----- From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On Behalf Of Malcolm Sent: Wednesday, August 10, 2005 7:48 PM To: flexcoders@yahoogroups.com Subject: RE: [flexcoders] Calling ArrayStructures in CFCs from Flex Hi Darius, I too went through the same pain (days & days of trying see what data types I could successfully return from a CFC). I'm still learning but in my somewhat limited experience I could find no way to return an array datatype, it just wouldn't do it no matter what I tried, same goes for structures. I have successfully returned the following datatypes: :String :Query :Boolean :Numeric (yet to try) :Date (yet to try) It's interesting to note that Flex (somehow) in the background actually converts a ColdFusion query to an array. (Search the group on how these can be accessed) At the moment I am mostly using queries to get data back. This has the unfortunate side effect of losing typing (everything in the query is a string), thus you may need cast some results etc to their correct type in Flex. Malcolm -----Original Message----- From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On Behalf Of coldfs Sent: Friday, 5 August 2005 7:29 AM To: flexcoders@yahoogroups.com Subject: [flexcoders] Calling ArrayStructures in CFCs from Flex Hi, Using Tom Link's blog (http://tomlink.net/blog/index.cfm? mode=entry&entry=B662BEF9-7E97-A3B0-E3FB286E23BDAA50) and other sources, I've been trying for days to translate queries to arrays of structures (and vice versa). Whatever I do, the cfc doesn't except my values from Flex as arrays. I know it's a chunk of code to review, but you'd help a sane man going slowly mad...:-) Many thanks, Darius ----------- index.mxml: ----------- <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml"> <mx:Script> <![CDATA[ var RecordSetModel; private function doResult(event:Object):Void{ var method: String = event.call.methodName; if (method == "GetUpdateAuthorization"){ RecordSetModel = event.result; } } private function doClick():Void{ var UserId = "rgatta"; var CountyCode = 37; var CaseFlag = "No"; var CourtOrderAvailableFlag = "No"; var Dsn = "TssDev"; ro.GetUpdateAuthorization (UserId,CountyCode,CaseFlag,CourtOrderAvailableFlag,Dsn); } ]]> </mx:Script> <mx:RemoteObject id="ro" endpoint="http://gx270dev.net/flashservices/gateway" source="Model.mUtilities.mUpdate.qry_UpdateAuthorization" fault="mx.controls.Alert.show(event.fault.faultstring)" showBusyCursor="true"> <mx:method name="GetUpdateAuthorization" result="doResult(event.result)"/> </mx:RemoteObject> <mx:Panel width="100%" title="Forms" height="22%"> <mx:DataGrid id="UpdatesDG" width="166" height="156" wordWrap="true" dataProvider="{RecordSetModel}"> <mx:columns> <mx:Array> <mx:DataGridColumn width="200" headerText="Update Form" columnName="Function"/> <mx:DataGridColumn width="320" headerText="Description" columnName="Description"/> </mx:Array> </mx:columns> </mx:DataGrid> <mx:Button label="Get Records" click="doClick()"/> </mx:Panel> </mx:Application> -------------------------- fx_UpdateAuthorization.cfc -------------------------- <cfcomponent extends="Base"> <cfset obj = createObject ("component","qry_UpdateAuthorization")> <!--- <cffunction name="getEmployees" access="remote" returntype="array"> <cfreturn queryToArrayOfStructures(emp.getEmployees()) > </cffunction> ---> <cffunction name="GetUpdateAuthorization" access="remote" returntype="array"> <cfargument name="AuthorizedUserIdObject" type="array" required="yes"> <cfargument name="CountyCodeObject" type="array" required="yes"> <cfargument name="CaseFlagObject" type="array" required="yes"> <cfargument name="CourtOrderAvailableFlagObject" type="array" required="yes"> <cfargument name="DsnObject" type="array" required="yes"> <cfreturn queryToArrayOfStructures (obj.GetUpdateAuthorization (AuthorizedUserIdObject,CountyCodeObject,CaseFlagObject,CourtOrderAvai lableFlagObject,DsnObject))> </cffunction> </cfcomponent> ----------------------------- qry_UpdateAuthorization.cfc ----------------------------- <cfcomponent extends="Base"> <cffunction name="GetUpdateAuthorization" access="remote" returntype="query"> <cfargument name="AuthorizedUserId" type="array" required="yes"> <cfargument name="CountyCode" type="array" required="yes"> <cfargument name="CaseFlag" type="array" required="yes"> <cfargument name="CourtOrderAvailableFlag" type="array" required="yes"> <cfargument name="Dsn" type="array" required="yes"> <CFSTOREDPROC PROCEDURE="spUpdateAuthorization" DATASOURCE="#Arguments.Dsn#"> <CFPROCPARAM DBVARNAME="AuthorizedUserId" TYPE="IN" VALUE="#Arguments.AuthorizedUserId#" CFSQLTYPE="CF_SQL_CHAR"> <CFPROCPARAM DBVARNAME="CountyCode" TYPE="IN" VALUE="#Arguments.CountyCode#" CFSQLTYPE="CF_SQL_CHAR"> <CFPROCPARAM DBVARNAME="CaseFlag" TYPE="IN" VALUE="#Arguments.CaseFlag#" CFSQLTYPE="CF_SQL_CHAR"> <CFPROCPARAM DBVARNAME="CourtOrderAvailableFlag" TYPE="IN" VALUE="#Arguments.CourtOrderAvailableFlag#" CFSQLTYPE="CF_SQL_CHAR"> <CFPROCRESULT NAME="qGetUpdateAuthorization"> </CFSTOREDPROC> <cfreturn qGetUpdateAuthorization> </cffunction> </cfcomponent> ------------- Base.cfc ------------- <cfcomponent> <cffunction name="dumpToFile" access="package" hint="A quick and easy debugging utility when testing with Flash."> <cfargument name="dumpObject" type="any" required="yes"> <cfargument name="path" type="string" required="yes"> <cfset var varToOutput=""> <cfsavecontent variable="varToOutput"> <cfdump var="#arguments.dumpObject#"> </cfsavecontent> <cffile action="write" file="#arguments.path#" addnewline="yes" output="#varToOutput#"> </cffunction> <cfscript> /** * Converts a query object into an array of structures. * * @param query The query to be transformed * @return This function returns a structure. * @author Nathan Dintenfass ([EMAIL PROTECTED]) * @version 1, September 27, 2001 */ function QueryToArrayOfStructures(theQuery){ var theArray = arraynew(1); var cols = ListtoArray(theQuery.columnlist); var row = 1; var thisRow = ""; var col = 1; for(row = 1; row LTE theQuery.recordcount; row = row + 1){ thisRow = structnew(); for(col = 1; col LTE arraylen(cols); col = col + 1){ thisRow[cols[col]] = theQuery[cols [col]][row]; } arrayAppend(theArray,duplicate(thisRow)); } return(theArray); } /** * Converts an array of structures to a CF Query Object. * 6-19-02: Minor revision by Rob Brooks-Bilson ([EMAIL PROTECTED]) * * Update to handle empty array passed in. Mod by Nathan Dintenfass. Also no longer using list func. * * @param Array The array of structures to be converted to a query object. Assumes each array element contains structure with same (Required) * @return Returns a query object. * @author David Crawford ([EMAIL PROTECTED]) * @version 2, March 19, 2003 */ function arrayOfStructuresToQuery(theArray){ var colNames = ""; var theQuery = queryNew(""); var i=0; var j=0; //if there's nothing in the array, return the empty query if(NOT arrayLen(theArray)) return theQuery; //get the column names into an array = colNames = structKeyArray(theArray[1]); //build the query based on the colNames theQuery = queryNew(arrayToList(colNames)); //add the right number of rows to the query queryAddRow(theQuery, arrayLen(theArray)); //for each element in the array, loop through the columns, populating the query for(i=1; i LTE arrayLen(theArray); i=i+1){ for(j=1; j LTE arrayLen(colNames); j=j+1){ querySetCell(theQuery, colNames[j], theArray[i][colNames[j]], i); } } return theQuery; } </cfscript> </cfcomponent> -- Flexcoders Mailing List FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com Yahoo! Groups Links -- Flexcoders Mailing List FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com Yahoo! Groups Links ------------------------ Yahoo! Groups Sponsor --------------------~--> <font face=arial size=-1><a href="http://us.ard.yahoo.com/SIG=12hnf4vq9/M=362329.6886308.7839368.1510227/D=groups/S=1705007207:TM/Y=YAHOO/EXP=1123781967/A=2894321/R=0/SIG=11dvsfulr/*http://youthnoise.com/page.php?page_id=1992 ">Fair play? Video games influencing politics. Click and talk back!</a>.</font> --------------------------------------------------------------------~-> -- Flexcoders Mailing List FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com Yahoo! Groups Links <*> To visit your group on the web, go to: http://groups.yahoo.com/group/flexcoders/ <*> To unsubscribe from this group, send an email to: [EMAIL PROTECTED] <*> Your use of Yahoo! Groups is subject to: http://docs.yahoo.com/info/terms/