I'm trying to write a web service that returns a complex datatype (like a struct but using a CFC instead), and one of the elements is an Array which contains complex datatypes. I need to make this portable so that a VB app can consume it (my prior solution when using Flash as the consumer was to just return structs..)
I was looking at the WSDL for the Google API, and it does exactly what I want to do. It returns a Complex Data Type named "GoogleSearchElement", which in turn contains a number of simple elements and a couple of complex data type elements. One of these sub-elements is named "GoogleSearchArray", a complex data type that is an array containing another complex datatype "ResultElement". That's as far as I really need to take this..
http://api.google.com/GoogleSearch.wsdl
So anyway... I want to mimic this functionality... but I can't figure out how.
Here is my ReturnObject CFC that describes the complex data type that I want to return... a couple of strings and an array.
<cfcomponent> <CFPROPERTY NAME="ERRORCODE" TYPE="STRING"> <CFPROPERTY NAME="ERRORMESSAGE" TYPE="STRING"> <CFPROPERTY NAME="Results" TYPE="array"> </cfcomponent>
Now, I want the "Results" array to be an array of "ResultElement" datatypes. so here is my ResultElement CFC...
<cfcomponent> <CFPROPERTY NAME="USERID" type="string"> <CFPROPERTY NAME="FULLNAME" type="string"> <CFPROPERTY NAME="TITLE" type="string"> <CFPROPERTY NAME="DEPT" type="string"> <CFPROPERTY NAME="PHONE" type="string"> <CFPROPERTY NAME="FAX" type="string"> <CFPROPERTY NAME="EMAIL" type="string"> </cfcomponent>
So next, I write a CFC that looks like this, called "directory.cfc"
<cfcomponent hint="Authorization Functions" output="no">
<cffunction name="getAllUsers" access="remote" returntype="ReturnObject"
displayname="getAllUsers" hint="getAllUsers">
<CFSET retVal =
CreateObject("component","components.authorization.ReturnObject")>
<CFSET retVal.ERRORCODE = "0">
<CFSET retVal.ERRORMESSAGE = "Success!">
<CFSET retVal.Results = ArrayNew(1)>
<CFSET retVal[1] =
CreateObject("component","components.authorization.ResultElement")>
<CFSET retVal[2] =
CreateObject("component","components.authorization.ResultElement")>
<CFSET retVal[1].USERID = "rick">
<CFSET retVal[1].FULLNAME = "Rick Root">
<CFSET retVal[1].TITLE = "Coder">
<CFSET retVal[2].USERID = "john">
<CFSET retVal[2].FULLNAME = "John Doe">
<CFSET retVal[2].TITLE = "Coder Assistant">
<CFRETURN retVal>
</cffunction></cfcomponent>
This works fine if I implement it via an HTTP call... as in:
http://www.ads.duke.edu/components/authorization/directory.cfc?method=getAllUsers
So finally, I write a CFM to invoke the web service via a SOAP call.
<cfinvoke webservice="http://www.ads.duke.edu/components/authorization/directory.cfc?WSDL"
method="getAllUsers" returnvariable="retVal"> <CFDUMP VAR="#retVal#">
And I call it: http://www.ads.duke.edu/components/authorization/directorytest.cfm
UGLY! HORROR! YUCK! NASTY ERROR!
- Rick [Todays Threads] [This Message] [Subscription] [Fast Unsubscribe] [User Settings]
----------------------------------------------------------
You are subscribed to cfcdev. To unsubscribe, send an email
to [EMAIL PROTECTED] with the words 'unsubscribe cfcdev' in the message of the email.
CFCDev is run by CFCZone (www.cfczone.org) and supported by Mindtool, Corporation (www.mindtool.com).
An archive of the CFCDev list is available at www.mail-archive.com/[EMAIL PROTECTED]
