Подводные камни remote-методов
Родион Быков - 05/30/2009
Организовать удаленный доступ к данным в Coldfusion - дело достаточно простое. Любой метод Coldfusion-компонента может вызываться удаленно, достаточно лишь поставить модификатор доступа access="remote", вот простой пример:
<cfcomponent displayname="myservice" hint="Service" output="false">
<cffunction name="getStructure" access="remote" output="false" returntype="Struct">
<cfset struct = StructNew() />
<cfset struct["id"] = 213 />
<cfset struct.refID = 321231 />
<cfset struct["someName"] = "Foo Bar" />
<cfreturn struct />
</cffunction>
<cffunction name="getQueryObject" access="remote" output="false" returntype="Query">
<cfquery datasource="test" name="qry">
SELECT id, someName, refID FROM test
</cfquery>
<cfreturn qry />
</cffunction>
</cfcomponent>
Однако на практике могут выскочить известные грабли.
- имена полей в объектах query возвращаются в UPPERCASE при вызове метода через SOAP;
- имена полей в объектах query возвращаются точно так как написано в коде, если метод вызывается через Flash Remoting (осторожно, флешеры!). При этом название поля в БД не имеет значения. Если поле в БД называется id, а программист в коде SQL запроса выбрал его как Id, во Flash Remoting отразится именно так. Как известно, ActionScript различает case символов, а значит могут быть проблемы.
- имена ключей в структурах возвращаются в UPPERCASE, если поле задано как struct.fieldName. При этом, case сохраняется в точности как задан, если поле задано как struct["fieldName"]. Сказанное справедливо для структур, возвращенных и через Web Service и через Flash Remoting.