My function calls the SendGrid API. It returns an Array + structure. I am writing a function to return a CFQuery dataset.
Purpose I want to pass a deserialized data object to my function and get a query data set.
Here is my working code and output:
<cfparam name="variables.ddata" default="#structnew()#"> <cfset arr = DESerializeJSON(returnStruct.Filecontent) /> <cfdump var="#arr#">

My code is:
<cfset arrayit(arrobj= arr) > <cfdump var="#variables.ddata#" > <cffunction name="arrayit" access="public" returntype="void"> <cfargument name="arrobj" type="array" required="yes"> <cfset var arr=arguments.arrobj /> <cfloop from="1" to = "#arrayLen(arr)#" index="i"> <cfif isValid("string", arr[i])> <cfset StructInsert(variables.ddata, i, arr[i]) /> </cfif> <cfif isstruct(arr[i])> <cfset structit(structobj = arr[i]) /> </cfif> </cfloop> </cffunction> <cffunction name="structit" access="public" returntype="void" output="yes"> <cfargument name="structobj" type="any" required="yes"> <cfset stru = arguments.structobj /> <cfloop collection="#stru#" item="S"> <cfif isValid("string", stru[S])> <cfset StructInsert( variables.ddata, S, stru[S]) /> </cfif> <cfif isarray(stru[S])> <cfset arrayit(arrobj = stru[S]) > </cfif> </cfloop> </cffunction>
Result:

When I add this line to my function
<cfif isstruct(stru[S])> <cfset variables.ddata = arrayit(arrobj = stru[S]) /> </cfif>
An error has occurred:
The element type is undefined in the CFML structure referenced as part of the expression.
An error occurred on line 71.
** Full code **
<cfsavecontent variable="returnStruct.Filecontent"> [{"date":"2016-04-05","stats":[{"type":"category","name":"5","metrics":{"blocks":1,"bounce_drops":0,"bounces":9,"clicks":4,"deferred":1,"delivered":1,"invalid_emails":8,"opens":4,"processed":1,"requests":1,"spam_report_drops":0,"spam_reports":1,"unique_clicks":3,"unique_opens":3,"unsubscribe_drops":0,"unsubscribes":9}}]}] </cfsavecontent> <cfset arr = DESerializeJSON(returnStruct.Filecontent) />
<cfloop from="1" to="#arrayLen(arr)#" index="i"> <cfif isValid("string", arr[i])> <cfset StructInsert(variables.ddata, i, arr[i],true ) /> </cfif> <cfif isstruct(arr[i])> <cfsavecontent variable="rr"> <cfdump var="#arr[i]#" label="Line 48 ERROR" > </cfsavecontent> <cfset NotifyErrorAdmin(emailBody = "#rr#" ,emailsubject = "Line 48") /> <cfset structit(structobj = arr[i]) /> </cfif> <cfif isarray(arr[i])> <cfsavecontent variable="rr"> <cfdump var="#arr[i]#" label="Line 54 ERROR" > </cfsavecontent> <cfset NotifyErrorAdmin(emailBody = "#rr#" ,emailsubject = "Line 54") /> <cfset arrayit(arrobj = arr[i]) > </cfif> </cfloop> </cffunction> <cffunction name = "structit" access="public" returntype="void" output="yes"> <cfargument name = "structobj" type="any" required="yes"> <cfset stru = arguments.structobj /> <cfloop collection="#stru#" item="S"> <cfif isValid("string", stru[S])> <cfset StructInsert( variables.ddata, S, stru[S],true) /> </cfif> <cfif isarray(stru[S])> <cfsavecontent variable="rr"> <cfdump var="#stru[S]#" label="Line 86 ERROR" > </cfsavecontent> <cfset NotifyErrorAdmin(emailBody = "#rr#" ,emailsubject = "Line 87") /> <cfset arrayit(arrobj = stru[S]) > </cfif> <cfif isstruct(stru[S])> <cfsavecontent variable="rr"> <cfdump var="#stru[S]#" label="Line 97 ERROR" > </cfsavecontent> <cfset NotifyErrorAdmin(emailBody = "#rr#" ,emailsubject = "Line 97") /> <cfset structit(structobj = stru[S]) /> </cfif> </cfloop> </cffunction>
ERROR
