É muito comum utilizarmos componentes ColdFusion (CFCs) e “tipar” objetos transferidos entre ColdFusion e Flex. Durante o desenvolvimento dos componentes sempre precisamos testar a parte de back-end da aplicação verificando se os valores retornados no componente estão corretos. Em outras situações (como queries, arrays e estruturas) a tag CFDUMP resolveria, mas neste caso a tag CFDUMP exibe os métodos do componente e não os dados, o que nos obriga a escrever o código para exibir a saída de cada método.
O código abaixo varre todos os métodos “get” do componente instanciado e exibe o conteúdo da propriedade correspondente (este código não funciona caso a propriedade represente uma variável complexa, como um array ou estrutura, vou trabalhar nisso):
<cfscript>
user = CreateObject(”component”,”UserVO”);
user.setUserId(”123456″);
user.setName(”Hamad”);
</cfscript>
<cfset methodsArray = GetMetadata(user).functions>
<cfset len = ArrayLen(methodsArray)>
<cfloop index=”i” from=”1″ to=”#len#”>
<cfif left(methodsArray[i].name,3) EQ “get”>
<cfoutput>#Evaluate(”user.#methodsArray[i].name#()”)#</cfoutput><br />
</cfif>
</cfloop>
Abaixo o código do UserVO.cfc:
<cfcomponent output=”false” alias=”UserVO”>
<cfproperty name=”userId” type=”string” default=”">
<cfproperty name=”name” type=”string” default=”">
<cfscript>
variables.userId = “”;
variables.name = “”;
</cfscript>
<cffunction name=”init” output=”false” returntype=”UserVO”>
<cfreturn this>
</cffunction>
<cffunction name=”getUserId” output=”false” access=”public” returntype=”any”>
<cfreturn variables.userId>
</cffunction>
<cffunction name=”setUserId” output=”false” access=”public” returntype=”void”>
<cfargument name=”val” required=”true”>
<cfset variables.userId = arguments.val>
</cffunction>
<cffunction name=”getName” output=”false” access=”public” returntype=”any”>
<cfreturn variables.name>
</cffunction>
<cffunction name=”setName” output=”false” access=”public” returntype=”void”>
<cfargument name=”val” required=”true”>
<cfset variables.name = arguments.val>
</cffunction>
</cfcomponent>